Mount an external drive at boot time only if it is plugged in

142,172

Solution 1

You're all on the right trail. I've found a way that is a little more clean and better form.

The correct option to add in fstab is nofail, however, it needs to come after auto. If you change it to noauto, it will never mount during boot. If you add nobootwait to the bootloader, you could potentially miss something serious, such as mounting the partition before fsck finishes checking it, or not mounting a partition that is used in the boot process.

After making the above change, The system will start normally (and mount the volume) if the device is plugged in while the system is shutdown. It will also boot normally if the device is not present at boot time.

The only inconvenience is that if you connect the device while the system is running, depending on configuration (too many variables to test), the device may not mount immediately. This can be remedied with a simple mount -a or mount /specific_device or a reboot.

Solution 2

I had the same issue - I've done one extra step

If you use the nofail option in /etc/fstab, the system will look for your disk (and partition) at boot time. If the device is plugged, the filesystem will be mounted. If not, the boot will continue as normal.

See arch wiki: https://wiki.archlinux.org/index.php/Fstab

Example

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

I've tried to boot the system with and without the device plugged, and it works ok.

What I've not achieved is to automount when disk is plugged after boot (when isn't plugged at boot). I must use mount -a as root to mount all again.

Solution 3

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

worked for me.

  • nofail - Do not report errors for this device if it does not exist.
  • x-systemd.device-timeout=30 - Boot will take 30 seconds longer if device does not exist (default is 90 secs).

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

Solution 4

does the noauto option let the boot process continue?

it doesn't automatically mount if present, but it does get it known if present so a simple mount /jgdata works...then a scripted mount /jdata wouldn't need an output check, just catch the error and keep booting

edit: upon some further reading bootwait is probably a more correct option to pass...(usually used for network shares that might not be present until later in the boot process, but it might still cause a hang, idk)

and the mount script could be added like so: https://stackoverflow.com/questions/2062543/running-a-script-with-the-help-of-grub-and-menu-lst

Solution 5

The recommended way to mount during the boot is instructing their system through the fstab file. Looking at your Ask, I could see you are almost there, lacks only the instruction that sets the device to use automount options, allowing your system to mount the device when its available.

So, just rewrite the line in your fstab to be like below:

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

After change and save it, try to mount it by hand:

$ sudo mount -a

It's important to note that:

  1. you need to be sure about the device's UUID. UUIDs are generated by the make-filesystem utilities (mkfs.*) when you create a filesystem.
  2. Those <options> needs to be written following a very specific format, separated by commas but no spaces after each comma. Be careful with this ;-)
  3. I'm not sure if this will work smoothly because you are trying to automount a NTFS filesystem, that are handleable using NTFS-3G utilities. While my instructions are supposed to work correctly, I never tried automount NTFS before. So, if its failed, I recommend you to look at this Mounting Windows Partitions for alternative uses of NTFS.

Thanks!

Share:
142,172

Related videos on Youtube

Jeremy
Author by

Jeremy

Updated on September 17, 2022

Comments

  • Jeremy
    Jeremy over 1 year

    I've got an entry for an external harddrive in my fstab:

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

    But sometimes this drive isn't plugged in at boot time. This leaves me half way through a boot, with a prompt to "Continue Waiting, press S or press M" but no keypress has any affect at this stage (including Ctrl-Alt-Delete, not even caps-lock).

    Short of writing a script to check the output of fdisk -l, how can I mount this drive at boot time only if it is present? It would be handy to have an fdisk entry for this drive, so I can just type mount /jgdata instead of needing a device name.

  • RobotHumans
    RobotHumans over 13 years
    i think he gets most of what you said, but it's hanging when the disk isn't detected. that's why i suggested a workaround to the "proper" way
  • Jeremy
    Jeremy over 13 years
    Thanks for the answer. FYI the sudo blkid command is a good way to find out UUIDs.
  • Jeremy
    Jeremy over 13 years
    I have just tried that exact line in fstab. When the HDD is plugged in, the system boots normally. But, during boot, when the external HDD is not plugged in, it still prompts me to Wait/Skip/Manualy Recover. Since this prompt doesn't time out, if I'm not at the terminal, the box will not boot if the external HDD is not plugged in.
  • Jeremy
    Jeremy over 13 years
    Thanks for the answer. Just to clarify, the options are to be added to the fstab line, correct? (EDIT: Nvm, googled it. Looks like nobootwait is what I need.)
  • Jeremy
    Jeremy over 13 years
    I've used the nobootwait option in fstab, works perfectly, thanks.
  • kkron
    kkron over 8 years
    You need to add the nofail, option.
  • Hackeron
    Hackeron about 7 years
    Every example I can find online shows nofail before auto. Is there any documentation for the correct order?
  • tisc0
    tisc0 over 6 years
    'man fstab' doesn't give the precision of a needed order (checked in centos 7 and Ubuntu 14.04). Though, it says "nofail do not report errors for this device if it does not exist." I'm wondering if this will help not waiting the timeout at boot if nfs volume is not accessible.
  • Bill McCracken
    Bill McCracken over 5 years
    This is the best and simplest answer. Note that this is the new syntax for newer versions of the OS that use systemd, replacing the old nobootwait syntax
  • BobHy
    BobHy almost 5 years
    This worked for me. Key was adding the device-timeout; just using nofail the boot would indeed fail due to udev timeout. (probably unique to USB devices)
  • dannyman
    dannyman over 4 years
    I omit auto altogether. My use case is to allow servers with failed data disks to complete boot.
  • user2660966
    user2660966 over 2 years
    does not work for encrypted file systems?