umount 是否调用同步来完成任何挂起的写入

ART*_*ART 12 ext4 mount linux-kernel

我们有基于 BBB 的定制板,上面运行着内核 3.12。

我对 umount 和 & 同步有疑问。

假设脚本正在卸载分区,是否需要syncumount完成挂起写入之前运行命令。?

dir*_*rkt 15

不,你不需要运行sync之前umountumount将在实际卸载文件系统之前完成所有挂起的写入。如果某些进程仍在使用文件系统,例如作为当前工作目录,它也将拒绝卸载。

编辑:卸载主要在fs/namespace.c. 您不会在sync那里找到任何显式调用,但是您会看到“将此挂载点标记为卸载,拒绝对其进行任何进一步操作,如果所有操作都已完成,则卸载”这一行的注释。您还可以查看明确的使用中检查。

您可以轻松地测试自己,umount确实完成所有待处理操作:摩有些慢USB记忆棒,一个大的文件复制到它,并直接调用umount之后cp。在您看到新提示之前需要几秒钟,如果您dstat在另一个窗口中运行etc.,您将看到仍在进行的写入操作。这与您输入的行为完全相同sync

  • **它不可能是任何其他方式。**如果你必须`sync`那么你必须首先阻止进程写入,否则在你到达`unmount`时它可能不会被`sync` (竞争条件)。 (7认同)
  • 如果某些东西仍在使用文件系统,“umount -l”将使命令完成,并在后台等待进程完成,然后悄悄卸载它。 (2认同)
  • 我的解释指出,同步实际上可以解决您担心的问题。然而,同步之后的写入会导致损坏(如果它以这种方式工作),因此在卸载之前需要同步的系统将从根本上被破坏。由于 Gnu/Linux 并没有从根本上被破坏,所以不能这样。因此您不需要同步。如果您必须进行同步,那么您首先必须安排**阻止**对设备的所有写入(在同步之前)。 (2认同)