blockdev-flushbufs是否可靠地同步到磁盘



我在一个shell脚本中使用blockdev --flushbufs /dev/mmcblk0p1

我假设它对原始块设备访问具有与同步相同的效果。

我想知道在blockdev --flushbufs结束时,假设该设备的所有延迟写入都已完成是否安全?

(手册页提到ioctls,所以我认为它应该被阻塞?)

不幸的是,在emmc上,这件事不起作用(普通sd卡也是如此)。ioctl没有在上游驱动程序上实现。

到目前为止,我以为它会照它说的做,直到我意识到它什么都没做。

mmcqd不受ioctl BLKFLSBUF的影响,并处理队列中挂起的异步mmc请求。它需要付出代价,但如果在执行之后立即执行poweroff-f:blockdev—flushbufs或echo 3>/proc/sys/vm/drop_caches区块开发和文件系统不会在emmc或sd卡上完全同步。

blockdev --flushbufs发送ioctl以刷新设备自己的写缓存(如果有的话),并且可能不可靠(该命令可能未在驱动程序、设备中实现,甚至在途中被截获)。它只会刷新操作系统已经发送到设备的数据,并确保这些数据已写入物理介质。

如果要同步已安装文件系统中的数据,可以使用sync()或其变体之一。通常,应用程序本身应该关心将数据安全地同步到磁盘,并且在卸载文件系统时,操作系统也会刷新数据。

有关blockdev --flushbufs和各种同步系统调用之间差异的更多详细信息,请参阅此答案。

最新更新