![UNIX 中硬挂载和软挂载的优点/缺点是什么?](https://linux22.com/image/482598/UNIX%20%E4%B8%AD%E7%A1%AC%E6%8C%82%E8%BD%BD%E5%92%8C%E8%BD%AF%E6%8C%82%E8%BD%BD%E7%9A%84%E4%BC%98%E7%82%B9%2F%E7%BC%BA%E7%82%B9%E6%98%AF%E4%BB%80%E4%B9%88%EF%BC%9F.png)
这个问题可能因发行版而异,但一般来说,在 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
因为没有丢失数据的危险;应用程序认为已经写入文件系统,因此更受欢迎,因为它不会阻塞应用程序;只返回无数据或错误 - 这两者都可以而且应该被应用程序检测到。