在干净关闭期间sync
运行是否有意义?umount
我假设umount
会将所有缓存的数据写入磁盘。
我能想到的唯一奇怪的情况是当你的真实磁盘顶部有一些循环设备(如 LUKS 容器)时。
Umount 可能会首先尝试卸载分区。并且在卸载循环设备之前,它可能无法卸载分区。但在这种情况下它会同步数据吗?
答案1
sync
仅影响文件系统,不影响块设备。
不过,我无法回答一个有趣的问题(与卸载无关):按什么顺序处理sync
文件系统?如果它首先刷新根文件系统的缓存,然后刷新循环设备文件系统的缓存,那么第二次刷新将为根文件系统创建新的缓存数据,因此可能永远不会出现一切都完全干净的时刻。但内核可能会等到所有文件系统缓存报告都干净后再返回sync()
系统调用。
但是,sync
如果您不相信内核能够正确执行此操作,您可以使用文件参数进行调用,并按正确的顺序多次调用它......
答案2
sync
不,追求(成功)没有任何意义umount
。
umount 已将所有挂起的写入同步到文件系统。同步命令同步已安装文件系统的缓存文件系统数据。
现在,由 LUKS 配置的 dm-crypt 设备可以正确地传递刷新命令(参见cryptsetup 常见问题解答项目 2.13 如果我使用 dm-crypt/LUKS 映射日志文件系统,它是否仍提供通常的事务保证?)。