只有在启动时插入外部驱动器时,才挂载它。

我在我的fstab中有一个外部硬盘的条目: UUID="680C0FE30C0FAAE0" /jgdata ntfs noatime,rw 但有时这个驱动器在启动时没有插入。这让我在启动过程中停留在一半的位置,出现一个提示“继续等待,按S键或按M键”,但在这个阶段按任何键都没有任何效果(包括Ctrl-Alt-Delete,甚至大写锁定键)。 除了编写一个脚本来检查fdisk -l的输出之外,我如何只在启动时挂载此驱动器(如果存在)?为此驱动器添加一个fdisk条目会很方便,这样我就可以只需输入mount /jgdata而不需要设备名称。
5个回答

你们都在正确的轨迹上。我找到了一种更加干净和更好的方式。 在fstab中添加正确的选项是nofail,但是它需要在auto之后。如果将其更改为noauto,则在启动过程中永远不会挂载。如果在引导加载程序中添加nobootwait,则可能会错过一些严重的问题,例如在fsck完成检查之前挂载分区,或者不挂载用于引导过程的分区。 进行以上更改后,如果设备在系统关闭时插入,则系统将正常启动(并挂载卷)。 如果设备在启动时不存在,则系统也将正常启动。 唯一的不便之处是,如果您在系统运行时连接设备,根据配置(测试的变量太多),设备可能无法立即挂载。这可以通过简单的mount -amount /specific_device或重新启动来解决。

4我在网上找到的每个例子都是在auto之前使用nofail。有没有关于正确顺序的文档? - Hackeron
'man fstab'无法提供所需顺序的精确性(在CentOS 7和Ubuntu 14.04中进行了检查)。 尽管它说“nofail如果此设备不存在,则不报告错误。”我想知道这是否有助于在启动时不等待超时,如果NFS卷无法访问。 - tisc0
我完全省略了"自动"。我的使用场景是允许带有故障数据磁盘的服务器完成启动。 - dannyman
无法用于加密文件系统吗? - user2660966
关于超时问题,也许可以参考这个答案,它包括配置超时选项,而不是等待额外的90秒来插入设备。 - S3DEV

我遇到了同样的问题 - 我多做了一步 如果你在/etc/fstab中使用nofail选项,系统将在启动时寻找你的磁盘(和分区)。如果设备已连接,文件系统将被挂载。如果没有连接,启动将继续正常进行。 参考Arch Wiki: https://wiki.archlinux.org/index.php/Fstab 示例
UUID=XXXXXXXXXXXXXXX    /myhdd ntfs  auto,nofail,noatime,rw,user    0   0
我已经尝试过插上和不插上设备来启动系统,都能正常工作。 但是我还没有成功实现的是,在启动时未插入磁盘后再插入时自动挂载。我必须以root身份使用mount -a命令重新挂载所有内容。

/dev/xvdh1 /myfs xfs defaults,nofail,x-systemd.device-timeout=30 0 0

对我来说起作用。

  • nofail - 如果设备不存在,则不报告错误。
  • x-systemd.device-timeout=30 - 如果设备不存在,启动将需要额外30秒(默认为90秒)。

来源:https://wiki.archlinux.org/index.php/fstab#External_devices


这是最好和最简单的答案。请注意,这是新版本使用systemd的操作系统的新语法,取代了旧的“nobootwait”语法。 - cxrodgers
1这对我有用。关键是添加了设备超时;如果只使用nofail,启动确实会因为udev超时而失败。(可能只适用于USB设备) - BobHy

noauto选项是否允许引导过程继续进行?

如果存在,它不会自动挂载,但如果存在,则会被识别,因此可以使用简单的mount /jgdata命令...然后脚本化的mount /jdata就不需要输出检查,只需捕获错误并继续引导。

编辑:经过进一步阅读,bootwait可能是一个更正确的传递选项...(通常用于在引导过程中可能直到稍后才出现的网络共享,但可能仍会导致挂起,我不确定)

可以像这样添加挂载脚本:https://stackoverflow.com/questions/2062543/running-a-script-with-the-help-of-grub-and-menu-lst


谢谢你的回答。只是想澄清一下,选项是要添加到fstab行中,对吗?(编辑:算了,我查了一下。看起来nobootwait是我需要的。) - Jeremy
1我在 fstab 文件中使用了 nobootwait 选项,完美地运行了,谢谢。 - Jeremy

在启动时挂载设备的推荐方法是通过fstab文件来指示系统。从您的问题中,我可以看出您已经接近成功,只是缺少设置设备使用自动挂载选项的指令,这样当设备可用时,系统就会自动挂载它。 因此,请将您的fstab文件中的那一行改写成以下形式:
# <file system>           <dir>       <type>    <options>         <dump> <pass>
UUID="680C0FE30C0FAAE0"   /jgdata      ntfs      user,auto,rw       0     0

更改并保存后,请尝试手动挂载:

$ sudo mount -a

需要注意以下几点:

  1. 您需要确定设备的 UUID。UUID 是在创建文件系统时由制作文件系统的工具(mkfs.*)生成的。
  2. <options> 需要按照非常特定的格式书写,用逗号分隔,但每个逗号后面不要加空格。请小心处理这一点;-)
  3. 我不确定这是否会顺利工作,因为您正在尝试自动挂载 NTFS 文件系统,而这些文件系统可以通过 NTFS-3G 实用程序来处理。虽然我的指示应该能够正常工作,但我以前从未尝试过自动挂载 NTFS。因此,如果失败,请参考 Mounting Windows Partitions 了解有关 NTFS 的替代使用方法。

谢谢!


我觉得他大部分都理解你说的,但是当硬盘没有被检测到时就出现了问题。这就是为什么我建议采用一个绕过“正常”方法的解决办法。 - RobotHumans
谢谢你的答案。顺便说一下,sudo blkid 命令是查找 UUID 的好方法。 - Jeremy
我刚刚在fstab中尝试了那行精确的代码。当硬盘插入时,系统会正常启动。但是,在启动期间,如果外部硬盘未插入,它仍然提示我等待/跳过/手动恢复。由于此提示没有超时时间,如果我不在终端上,如果外部硬盘未插入,则计算机将无法启动。 - Jeremy
你需要添加nofail选项。 - kkron