Il comando nocache è la risposta generale a questo problema! Vedi https://github.com/Feh/nocache o trovalo in Debian e Ubuntu 13.10 (impertinente).
Grazie, Peter, per averci avvisato dell'opzione --drop-cache" in rsync. Ma questa è stata respinta a monte (Bug 9560 – opzione drop-cache), a favore di una soluzione più generale per questo:il nuovo comando "nocache" basato sul lavoro di rsync con fadvise.
Devi solo anteporre "nocache" a qualsiasi comando tu voglia. Ha anche utili utility per descrivere e modificare lo stato della cache dei file. Per esempio. ecco gli effetti con e senza nocache:
$ ./cachestats ~/file.mp3
pages in cache: 154/1945 (7.9%) [filesize=7776.2K, pagesize=4K]
$ ./nocache cp ~/file.mp3 /tmp
$ ./cachestats ~/file.mp3
pages in cache: 154/1945 (7.9%) [filesize=7776.2K, pagesize=4K]\
$ cp ~/file.mp3 /tmp
$ ./cachestats ~/file.mp3
pages in cache: 1945/1945 (100.0%) [filesize=7776.2K, pagesize=4K]
Quindi si spera che funzioni per altri programmi di backup (rsnapshot, duplicity, rdiff-backup, amanda, s3sync, s3ql, tar, ecc.) e altri comandi che non vuoi rovinare la tua cache.
Kristof Provost era molto vicino, ma nella mia situazione non volevo usare dd o scrivere il mio software, quindi la soluzione era usare l'opzione "--drop-cache" in rsync.
L'ho usato molte volte da quando ho creato questa domanda e sembra risolvere completamente il problema. Un'eccezione è stata quando utilizzo rsync per copiare da una macchina FreeBSD, che non supporta "--drop-cache". Quindi ho scritto un wrapper per sostituire il comando /usr/local/bin/rsync e rimuovere quell'opzione, e ora funziona anche copiando da lì.
Utilizza ancora un'enorme quantità di memoria per i buffer e sembra non tenere quasi nessuna cache, ma funziona comunque senza problemi.
$ free
total used free shared buffers cached
Mem: 24731544 24531576 199968 0 15349680 850624
-/+ buffers/cache: 8331272 16400272
Swap: 4194300 602648 3591652
Il kernel non può sapere che non utilizzerai i dati memorizzati nella cache dalla copia di nuovo. Questo è il tuo vantaggio informativo.
Ma potresti impostare lo swapiness su 0:sudo sysctl vm.swappiness=0. Ciò farà sì che Linux abbandoni la cache prima che le librerie ecc. vengano scritte nello swap.
Funziona bene anche per me, soprattutto molto performante in combinazione con hugh ram (16-32 GB).