2

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

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

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

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

4

2 回答 2

0

在 emmc 上,不幸的是,这个东西不起作用(一般的 sd 卡也是如此)。ioctl 未在上游驱动程序上实现。

到目前为止,我认为它会按照它所说的去做,直到我意识到它什么也没做。

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

于 2018-12-30T18:32:47.723 回答
0

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

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

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

于 2021-10-07T22:31:50.317 回答