La commande nocache est la réponse générale à ce problème ! Voir https://github.com/Feh/nocache ou le trouver dans Debian et Ubuntu 13.10 (saucy).
Merci, Peter, de nous avoir alertés sur l'option --drop-cache" dans rsync. Mais cela a été rejeté en amont (Bug 9560 - option drop-cache), en faveur d'une solution plus générale pour cela :la nouvelle commande "nocache" basé sur le travail de rsync avec fadvise.
Vous venez d'ajouter "nocache" à n'importe quelle commande que vous voulez. Il a également de bons utilitaires pour décrire et modifier l'état du cache des fichiers. Par exemple. voici les effets avec et sans 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]
J'espère donc que cela fonctionnera pour d'autres programmes de sauvegarde (rsnapshot, duplicity, rdiff-backup, amanda, s3sync, s3ql, tar, etc.) et d'autres commandes que vous ne voulez pas supprimer de votre cache.
Kristof Provost était très proche, mais dans ma situation, je ne voulais pas utiliser dd ou écrire mon propre logiciel, donc la solution était d'utiliser l'option "--drop-cache" dans rsync.
Je l'ai utilisé plusieurs fois depuis la création de cette question, et cela semble résoudre complètement le problème. Une exception était lorsque j'utilisais rsync pour copier à partir d'une machine FreeBSD, qui ne prend pas en charge "--drop-cache". J'ai donc écrit un wrapper pour remplacer la commande /usr/local/bin/rsync et supprimer cette option, et maintenant cela fonctionne également en copiant à partir de là.
Il utilise toujours une énorme quantité de mémoire pour les tampons et semble ne conserver presque aucun cache, mais fonctionne de toute façon sans problème.
$ free
total used free shared buffers cached
Mem: 24731544 24531576 199968 0 15349680 850624
-/+ buffers/cache: 8331272 16400272
Swap: 4194300 602648 3591652
Le noyau ne peut pas savoir que vous n'utiliserez pas les données mises en cache en les copiant à nouveau. C'est votre avantage informationnel.
Mais vous pouvez définir le swapiness sur 0 :sudo sysctl vm.swappiness=0. Cela entraînera la suppression du cache par Linux avant que les bibliothèques, etc. ne soient écrites dans le swap.
Fonctionne bien pour moi aussi, particulièrement très performant en combinaison avec une énorme RAM (16-32 Go).