仅在插入时在引导时安装外部驱动器


70

我的fstab中有一个外部硬盘驱动器条目:

UUID="680C0FE30C0FAAE0" /jgdata ntfs noatime,rw

但是有时在启动时没有插入该驱动器。这让我中途引导,以提示“继续等待,按S键或按M”,但没有按键,在此阶段(包括任何影响Ctrl- - AltDelete甚至没有大写锁定)。

无需编写脚本来检查的输出fdisk -l,如何在启动时安装该驱动器(如果存在)?在该驱动器上有一个fdisk条目会很方便,因此我可以键入mount /jgdata而不需要设备名称。

Answers:


73

你们都在正确的道路上。我找到了一种更干净更好的方式。

正确的添加选项fstabnofail,但是它需要紧随其后auto。如果将其更改为noauto,它将在引导期间永远不会挂载。如果添加nobootwait到引导加载程序,则可能会错过一些严重的问题,例如在fsck完成检查之前安装分区,或者不安装引导过程中使用的分区。

完成上述更改后,如果在系统关闭时插入了设备,则系统将正常启动(并挂载卷)。如果设备在启动时不存在,它也将正常启动。

唯一的不便之处是,如果您在系统运行时连接设备,则取决于配置(要测试的变量太多),设备可能不会立即挂载。可以通过简单mount -amount /specific_device重新启动来解决此问题。


2
我可以在网上找到的每个示例在自动之前都显示nofail。是否有正确订单的文件?
Hackeron

“ man fstab”未给出所需命令的精度(已在centos 7和Ubuntu 14.04中检查)。不过,它说:“如果该设备不存在,nofail不会报告此设备的错误。” 我想知道如果无法访问nfs卷,这是否有助于在启动时不等待超时。
tisc0

16

我遇到了同样的问题-我又做了一个步骤

如果使用中的nofail选项/etc/fstab,系统将在引导时查找磁盘(和分区)。如果设备已插入,则将挂载文件系统。如果没有,启动将继续正常进行。

参见Arch Wiki:https : //wiki.archlinux.org/index.php/Fstab

UUID=XXXXXXXXXXXXXXX    /myhdd ntfs  auto,nofail,noatime,rw,user    0   0

我尝试在不插入设备的情况下引导系统,并且工作正常。

我还没有实现的是在引导后插入磁盘(在引导时未插入磁盘)时自动挂载。我必须mount -a以root用户身份再次安装所有设备。


13

noauto选项会让引导过程继续吗?

如果存在,它不会自动挂载,但是如果存在,它会知道,因此简单的挂载/ jgdata可以工作...然后,脚本化的挂载/ jdata不需要输出检查,只需捕获错误并继续引导

编辑:进一步阅读后,bootwait可能是传递的更正确的选项...(通常用于网络共享,该网络共享可能要等到引导过程的后期才能出现,但仍可能导致挂起,idk)

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


感谢您的回答。为了澄清起见,这些选项要添加到fstab行中,对吗?(编辑:Nvm,用谷歌搜索。看来我需要nobootwait。)
Jeremy 2010年

1
我在fstab中使用了nobootwait选项,效果很好,谢谢。
杰里米

5
/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的较新版本OS的新语法,取代了旧nobootwait语法
cxrodgers

这对我有用。关键是增加设备超时;仅使用nofail引导确实会由于udev超时而失败。(可能是USB设备独有的)
BobHy,

1

在引导过程中建议的挂载方法是通过fstab文件指示其系统。查看您的Ask,我可以看到您几乎在那儿,仅缺少将设备设置为使用自动挂载选项的说明,从而使系统可以在设备可用时挂载它。

因此,只需将fstab中的行重写为如下所示:

# <file system>           <dir>       <type>    <options>         <dump> <pass>
UUID="680C0FE30C0FAAE0"   /jgdata      ntfs      user,auto,rw       0     0

更改并保存后,尝试手动安装:

$ sudo mount -a

重要的是要注意:

  1. 您需要确定设备的UUID。创建文件系统时,UUID由make文件系统实用程序(mkfs。*)生成。
  2. <options>需要按照非常特定的格式来编写这些格式,并用逗号分隔,但每个逗号后不能有空格。注意这一点;-)
  3. 我不确定这是否会顺利进行,因为您正在尝试自动挂载可以使用NTFS-3G实用程序处理的NTFS文件系统。虽然我的说明应该可以正常工作,但我之前从未尝试过自动挂载NTFS。因此,如果失败,建议您查看此Mounting Windows Partitions,以了解NTFS的其他用途。

谢谢!


我认为他能充分利用您所说的内容,但是当未检测到磁盘时,它就挂了。这就是为什么我建议一种“正确”方式的解决方法
RobotHumans 2010年

感谢您的回答。仅供参考,该sudo blkid命令是找出UUID的好方法。
杰里米

我刚刚在fstab中尝试了该行。插入HDD后,系统将正常启动。但是,在引导过程中,如果未插入外部硬盘驱动器,它仍会提示我等待/跳过/手动恢复。由于此提示不会超时,如果我不在终端上,则如果未插入外部HDD,则盒子将无法启动
Jeremy

您需要添加nofail选项。
kkron 2015年

0

我有同样的问题。当我知道下次启动时将不存在该驱动器时,我一直在编辑fstab以注释掉该条目。然后,当我确实有该驱动器存在时,我只需编辑fstab除去注释并发出mount -a。这不是一个完美的解决方案。如果我能找到一种方法让系统自动安装驱动器(如果存在)或自动跳过它(如果不存在),那将是很好的。如果自动安装了NFS共享并且没有服务器,则会发生相同的问题。


1
找出我接受的答案,只需将nobootwait添加到fstab中的安装选项。
杰里米
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.