固定ファイルシステムを使用したファイルシステムキャッシュのフラッシュ

固定ファイルシステムを使用したファイルシステムキャッシュのフラッシュ

私の考えでは、sysctlを介してキャッシュを削除するとvm.drop_caches削除されます。みんなただし、ファイルシステムを停止してページキャッシュを削除しても、ディレクトリを読み取ることはできます。

# fgrep ' /mnt ' /proc/mounts
/dev/mapper/test /mnt ext2 rw,noatime 0 0
# ls /mnt
lost+found
# fsfreeze --freeze /mnt
# echo 3 > /proc/sys/vm/drop_caches
# ls /mnt
lost+found

同期後もファイルを読み取ることができます。

# echo "hello world" > /mnt/foo
# sync
# fsfreeze --freeze /mnt
# echo 3 > /proc/sys/vm/drop_caches
# cat /mnt/foo
hello world

あきらめたいみんなファイルシステムが使用されるまで、後続の読み取り(ファイルおよびディレクトリエントリ)がブロックされるようにファイルシステムがキャッシュされますfsfreeze --unfreeze /mnt。どうすればいいですか?

なぜvm.drop_cachesこれをしないのですか?先読みキャッシュのようなものは削除されませんか?

答え1

解決策は、ファイルシステムを手動で固定するのではなく、ブロックデバイスバッファをさらにフラッシュし、デバイスマッパーターゲットを一時停止することです(dmsetup suspendファイルシステムも固定されます)。

# ls /mnt
lost+found
# echo 3 > /proc/sys/vm/drop_caches
# blockdev --flushbufs /dev/mapper/test
# dmsetup suspend test
# ls /mnt

これで、コマンドがブロックされ、ls実行されたときにのみブロックが解除されます。dmsetup resume test

関連情報