UNIX 中硬挂载和软挂载的优点/缺点是什么?

UNIX 中硬挂载和软挂载的优点/缺点是什么?

这个问题可能因发行版而异,但一般来说,在 UNIX 世界中使用硬挂载或软挂载的优点/缺点是什么?

在某些情况下,一种方式是否更有益,或者其用途是否相当普遍?

答案1

硬挂载通常用于本地磁盘或 SAN 等块资源。软挂载通常用于 NFS 或 CIFS 等网络文件协议。

软挂载的优点是,如果您的 NFS 服务器不可用,内核将在预先配置的时间段后使 I/O 操作超时。缺点是,如果您的 NFS 驱动程序缓存数据并且软挂载超时,您的应用程序可能不知道哪些对 NFS 卷的写入实际上已提交到磁盘。

答案2

硬挂载和“intr”(可中断)是一个很好的折衷方案(对于 2.6.25 之前的内核,请参阅 Ryan Horrisberger 的评论)。应用程序不会被成功的写入所欺骗,但是如果某些东西堵塞了管道,您可以终止它们。

答案3

使用某种网络文件系统(nfs 或 fuse)的硬挂载可能会(有时)在尝试重新建立断开的连接时永远阻塞。这意味着,尝试访问该挂载的每个进程都会进入磁盘休眠 (D) 状态,直到设备再次可用或系统重新启动。

磁盘睡眠无法被中断或终止。它就像僵尸进程中的僵尸。

简而言之,永远不要对网络文件系统使用硬挂载。如果无法进行 I/O,您希望文件系统失败(立即,对使用系统调用的进程而言)。否则,如果 FS 失败,他们声称的内存也可能会被泄漏。

答案4

挂载取决于文件系统的使用情况,并soft影响hard底层软件堆栈保证操作的准确性。nfs 手册页(挂载选项也适用于 nfsv4),“所谓的“软”超时在某些情况下可能会导致静默数据损坏。因此,soft仅当客户端响应能力比数据完整性更重要时才使用该选项。”

对于关键任务读写应用程序使用时,始终使用hard挂载来防止文件损坏(这就是它是大多数系统默认设置的原因)。

为了只读文件系统使用起来很安全,soft因为没有丢失数据的危险;应用程序认为已经写入文件系统,因此更受欢迎,因为它不会阻塞应用程序;只返回无数据或错误 - 这两者都可以而且应该被应用程序检测到。

相关内容