Подключайте внешний диск во время загрузки, только если он подключен

70

У меня есть запись для внешнего жесткого диска в моем fstab:

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

Но иногда этот диск не подключается во время загрузки. Это оставляет меня на полпути через загрузку, с предложением «Продолжить ожидание, нажмите S или нажмите M», но никакое нажатие клавиш не оказывает никакого влияния на этом этапе (включая Ctrl- Alt- Delete, даже не заглавные буквы).

Если не считать сценарий для проверки выходных данных fdisk -l, как я могу подключить этот диск во время загрузки, только если он присутствует? Было бы удобно иметь запись fdisk для этого диска, поэтому я могу просто напечатать mount /jgdataвместо ввода имени устройства.

Джереми
источник

Ответы:

73

Вы все на правильном пути. Я нашел способ, который немного более чистый и лучший вид.

Правильная опция для добавления в fstabэто nofail, однако, она должна следовать после auto. Если вы измените его на noauto, он никогда не будет монтироваться во время загрузки. Если вы добавите nobootwaitв загрузчик, вы можете пропустить что-то серьезное, например, смонтировать раздел до fsckего проверки или не смонтировать раздел, используемый в процессе загрузки.

После внесения вышеуказанных изменений система запустится нормально (и смонтирует том), если устройство подключено во время выключения системы. Он также будет загружаться нормально, если устройство отсутствует во время загрузки.

Единственное неудобство заключается в том, что если вы подключите устройство во время работы системы, в зависимости от конфигурации (слишком много переменных для тестирования), устройство может не подключиться сразу. Это можно исправить с помощью простой mount -aили mount /specific_deviceперезагрузки.

Брайан Гонсалес
источник
2
Каждый пример, который я могу найти онлайн, показывает nofail перед auto. Есть ли документация для правильного заказа?
Хакерон
man fstab не дает точности требуемого порядка (проверено в centos 7 и Ubuntu 14.04). Тем не менее, он говорит, что «nofail не сообщать об ошибках для этого устройства, если оно не существует». Мне интересно, поможет ли это не дождаться тайм-аута при загрузке, если том nfs недоступен.
Tisc0
16

У меня была та же проблема - я сделал один дополнительный шаг

Если вы используете nofailопцию в /etc/fstab, система будет искать ваш диск (и раздел) во время загрузки. Если устройство подключено, файловая система будет смонтирована. Если нет, загрузка продолжится как обычно.

Смотрите вики: https://wiki.archlinux.org/index.php/Fstab

пример

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

Я попытался загрузить систему с подключенным устройством и без него, и все работает нормально.

Чего я не достиг, так это автоматического монтирования, когда диск подключен после загрузки (когда он не подключен при загрузке). Я должен использовать mount -aкак root, чтобы смонтировать все снова.

user898384
источник
13

опция noauto позволяет процессу загрузки продолжаться?

он не монтируется автоматически, если присутствует, но он узнает об этом, если он есть, так что простое монтирование / jgdata работает ... тогда скриптовому монтированию / jdata не понадобится проверка вывода, просто перехватите ошибку и продолжайте загрузку

edit: после некоторого дальнейшего чтения bootwait, вероятно, является более правильным вариантом для передачи ... (обычно используется для сетевых ресурсов, которые могут отсутствовать до процесса загрузки, но это может вызвать зависание, idk)

и скрипт монтирования может быть добавлен так: https://stackoverflow.com/questions/2062543/running-a-script-with-the-help-of-grub-and-menu-lst

RobotHumans
источник
Спасибо за ответ. Просто чтобы уточнить, опции должны быть добавлены в строку fstab, правильно? (РЕДАКТИРОВАТЬ: Nvm, гуглил это. Похоже, nobootwait это то, что мне нужно.)
Джереми
1
Я использовал опцию nobootwait в fstab, работает отлично, спасибо.
Джереми
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

user313829
источник
Это самый лучший и самый простой ответ. Обратите внимание, что это новый синтаксис для более новых версий ОС, которые используют systemd, заменив старый nobootwaitсинтаксис
cxrodgers
Это сработало для меня. Ключ добавлял тайм-аут устройства; просто используя nofail, загрузка действительно не удалась из-за тайм-аута udev. (вероятно, уникальное для USB-устройств)
BobHy
1

Рекомендуемый способ монтирования во время загрузки - инструктировать их систему через файл fstab . Глядя на ваш вопрос, я вижу, что вы почти у цели, не хватает только инструкции, которая настраивает устройство на использование опций автомонтирования, позволяя вашей системе смонтировать устройство, когда оно будет доступно.

Итак, просто перепишите строку в вашем fstab так, как показано ниже:

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

После изменения и сохранения попробуйте смонтировать его вручную:

$ sudo mount -a

Важно отметить, что:

  1. Вы должны быть уверены в UUID устройства. UUID генерируются утилитами make-filesystem (mkfs. *) При создании файловой системы.
  2. Они <options>должны быть написаны в очень специфическом формате, разделенном запятыми, но без запятой после каждой запятой. Будьте осторожны с этим ;-)
  3. Я не уверен, что это будет работать гладко, потому что вы пытаетесь автоматически смонтировать файловую систему NTFS, которую можно использовать с помощью утилит NTFS-3G . В то время как мои инструкции должны работать правильно, я никогда не пробовал автомонтировать NTFS раньше. Поэтому, если это не помогло, я рекомендую вам изучить раздел «Монтирование разделов Windows» на предмет альтернативного использования NTFS.

Спасибо!

crncosta
источник
Я думаю, он получает большую часть того, что вы сказали, но зависает, когда диск не обнаружен. вот почему я предложил обходной путь к «правильному» способу
RobotHumans
Спасибо за ответ. К вашему сведению, sudo blkidкоманда - это хороший способ узнать UUID.
Джереми
Я только что попробовал эту точную строку в fstab. Когда жесткий диск подключен, система загружается нормально. Но во время загрузки, когда внешний жесткий диск не подключен, он все равно предлагает мне подождать / пропустить / восстановить вручную. Так как это приглашение не истекает, если я не на терминале, окно не загрузится, если внешний жесткий диск не подключен.
Джереми
Вам нужно добавить опцию nofail.
Ккрон
0

У меня такая же проблема. Я редактировал fstab, чтобы закомментировать запись, когда я знаю, что в следующий раз при загрузке у меня не будет диска. Затем, когда у меня есть диск, я просто редактирую fstab, чтобы удалить комментарий, и запускаю mount -a. Это не идеальное решение. Было бы здорово, если бы я мог найти способ, как система автоматически смонтирует диск, если он есть, или автоматически пропустит его, если он отсутствует. Та же проблема возникает, если у вас автоматически смонтированы общие ресурсы NFS, а сервер отсутствует.


источник
1
Проверьте ответ, который я принял, просто добавьте nobootwait к опциям монтирования в fstab.
Джереми