¡El comando nocache es la respuesta general a este problema! Consulte https://github.com/Feh/nocache o búsquelo en Debian y Ubuntu 13.10 (descarado).
Gracias, Peter, por alertarnos sobre la opción --drop-cache" en rsync. Pero eso fue rechazado en sentido ascendente (Error 9560 – opción drop-cache), a favor de una solución más general para esto:el nuevo comando "nocache" basado en el trabajo de rsync con fadvise.
Simplemente anteponga "nocache" a cualquier comando que desee. También tiene buenas utilidades para describir y modificar el estado de caché de los archivos. P.ej. aquí están los efectos con y sin 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]
Así que espero que funcione para otros programas de copia de seguridad (rsnapshot, duplicity, rdiff-backup, amanda, s3sync, s3ql, tar, etc.) y otros comandos que no desea que destruyan su caché.
Kristof Provost estaba muy cerca, pero en mi situación, no quería usar dd ni escribir mi propio software, así que la solución fue usar la opción "--drop-cache" en rsync.
Lo he usado muchas veces desde que creé esta pregunta, y parece solucionar el problema por completo. Una excepción fue cuando uso rsync para copiar desde una máquina FreeBSD, que no admite "--drop-cache". Así que escribí un contenedor para reemplazar el comando /usr/local/bin/rsync y eliminé esa opción, y ahora también funciona copiando desde allí.
Todavía usa una gran cantidad de memoria para los búferes y parece no mantener casi ningún caché, pero funciona sin problemas de todos modos.
$ free
total used free shared buffers cached
Mem: 24731544 24531576 199968 0 15349680 850624
-/+ buffers/cache: 8331272 16400272
Swap: 4194300 602648 3591652
El kernel no puede saber que no utilizará los datos almacenados en caché para copiarlos nuevamente. Esta es su ventaja de información.
Pero podría establecer el swapiness en 0:sudo sysctl vm.swappiness=0. Esto hará que Linux elimine el caché antes de que las bibliotecas, etc., se escriban en el intercambio.
También funciona bien para mí, especialmente muy eficaz en combinación con hugh ram (16-32 GB).