Встановлюйте зовнішній привід під час завантаження, лише якщо він підключений


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
Кожен приклад, який я можу знайти в Інтернеті, показує недійсне перед авто. Чи є документація на правильне замовлення?
Хекрон

"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, щоб змонтувати все заново.


13

чи дозволяє опція noauto продовжувати процес завантаження?

він не встановлюється автоматично, якщо він присутній, але він стає відомим, якщо він присутній, тому просте кріплення / jgdata працює ... тоді сценарійного монтажу / jdata не знадобиться перевірка виводу, просто введіть помилку і продовжуйте завантажувати

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

і сценарій монтажу можна додати так: https://stackoverflow.com/questions/2062543/running-a-script-with-the-help-of-grub-and-menu-lst


Дякую за відповідь. Просто для уточнення, параметри потрібно додати до рядка fstab, правда? (EDIT: Nvm, googled it. Схоже, що мені потрібно 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


Це найкраща і найпростіша відповідь. Зауважте, що це новий синтаксис для новіших версій ОС, які використовують 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-файлової системи (mkfs. *) Під час створення файлової системи.
  2. Їх <options>потрібно записати у дуже конкретному форматі, розділених комами, але без пробілів після кожної коми. Будьте обережні з цим ;-)
  3. Я не впевнений, чи буде це працювати безперебійно, оскільки ви намагаєтеся автоматизувати файлову систему NTFS, яку можна керувати за допомогою утиліт NTFS-3G . Хоча мої інструкції повинні працювати коректно, я ніколи раніше не пробував автоматичне налаштування NTFS. Тож, якщо її не вдалося, рекомендую ознайомитись із цим Монтажним розділом Windows для альтернативного використання NTFS.

Дякую!


Я думаю, він отримує більшу частину сказаного, але він висить, коли диск не виявлений. ось чому я запропонував вирішити "належний" шлях
RobotHumans

Дякую за відповідь. sudo blkidКоманда FYI - це хороший спосіб дізнатися UUID.
Джеремі

Я щойно спробував цю точну лінію у fstab. Коли жорсткий диск підключений, система завантажується нормально. Але під час завантаження, коли зовнішній жорсткий диск не підключений, він все-таки пропонує мені зачекати / пропустити / вручну відновити. Оскільки ця підказка не вичерпується, якщо я не в терміналі, ящик не завантажиться, якщо зовнішній жорсткий диск не підключений.
Джеремі

Вам потрібно додати параметр nofail, опція.
ккрон

0

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


1
Перевірте відповідь, яку я прийняв, просто додайте nobootwait до параметрів кріплення у fstab.
Джеремі
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.