2012-04-12 5 views
2

Ich habe eine virtuelle ARM-Maschine, die auf KVM/QEMU läuft, mit einer Datei, die als Root-Dateisystem angehängt ist. Die VM hat kein Netzwerk, daher kommt NFS, das das Root-Verzeichnis installiert, nicht in Frage. Ich teste gerade einen bestimmten Transportmechanismus für IO, also bleibe ich irgendwie bei dem, was ich habe.Wie den Dateisystemcache auf dem Stammgerät deaktivieren?

Ich möchte Dateien in den Gast senden, also möchte ich die Datei auf dem Host mounten, Dinge darauf schreiben und dann unmounten, um einen Flush zu erzwingen. Der Inhalt des Dateisystems ist trivial und ich habe ein Backup, so dass ich kein Problem mit der Korruption habe. Ebenso ist die Leistung kein Problem.

Das Problem ist, wenn ich diese mount-write-unmount Sache mache, sieht der Gast die Datei nie. Ich vermute, das ist ein Ergebnis des Dateisystem-Cache des Kernels, und wenn ich ls mache, ist die Datei nicht da. Ich nehme an, die Metadaten bezüglich des Dateisystems werden im Speicher zwischengespeichert, und die Aktualisierungen des Dateisystems erscheinen nie.

Ich rate, wenn ich Dateisystem-Caching deaktivieren, dann werden alle Lesevorgänge auf die Festplatte gezwungen, wodurch das Dateisystem getroffen wird, und meine Datei angezeigt wird. Irgendwelche Tipps?

Antwort

2

Ich kann denken:

sync 
echo 3 > /proc/sys/vm/drop_caches 

Und:

qemu -drive cache=none,file=file.img