在禁用写入缓存的情况下执行单个命令

在禁用写入缓存的情况下执行单个命令

每当我将大文件写入 USB 驱动器时,写入缓存都会使跟踪进程变得非常困难。我可以通过多种方式禁用它,就像echo 1000000 > /proc/sys/vm/dirty_bytes解决问题一样。但是,我还必须重新启用旧设置(或重新启动)。

如何告诉我的系统完全绕过单个写入命令的脏字节?例如,类似:

DIRTYBYTES=nope pv file.bin > /dev/sdb1

或者

pv file.bin | cache_buster > /dev/sdb1

澄清:目前的行为pv file.bin > /dev/sdb1是仪表立即达到 100%,然后命令挂起,等待 USB 实际完成写入。相反,我想修改命令并使仪表逐渐增加到大约 USB 驱动器的正确写入速率,不改变脏字节等设置的方式使得下一个命令也将绕过缓存。

答案1

syncwatch-flush

您可以接受缓存,但要跟踪它。毕竟,使用它是有原因的,当你关闭它时,你会失去一些效率。

sync一种方法是在写入过程完成后开始刷新缓冲区,并监视缓冲区的大小。我使用 shellscriptwatch-flush来监视缓冲区的大小、指定的“脏”数据grep Dirty: /proc/meminfo,并且当sync完成时,您知道数据已完全写入驱动器。

watch-flush您可以在属于的 shellscripts 中找到姆库斯布,你可以自由地按原样使用它、修改它,或者只是借用这个概念并制作你自己的工具。

ddfsync

如果您想使用,另一种选择ddconv=fsync根据

当使用 dd 将 ISO 映像写入 USB 闪存驱动器时,我如何知道我可以移除该棒?

答案2

我会尝试使用ddoflag=direct status=progress。请注意,这可能会变慢。

尝试:

dd oflag=direct status=progress bs=16M if=file.bin of=/dev/sdb1

应该按预期完成工作。

相关内容