Podłącz dysk zewnętrzny w czasie uruchamiania tylko wtedy, gdy jest podłączony

70

Mam wpis na zewnętrznym dysku twardym w moim fstab:

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

Ale czasami ten dysk nie jest podłączony podczas rozruchu. To pozostawia mnie w połowie rozruchu, z monitem „Kontynuuj czekanie, naciśnij S lub naciśnij M”, ale żadne naciśnięcie klawisza nie ma żadnego wpływu na tym etapie (w tym Ctrl- Alt- Deletenawet nawet Caps Lock).

Krótkie od napisania skryptu, aby sprawdzić dane wyjściowe fdisk -l, jak mogę zamontować ten dysk w czasie rozruchu, tylko jeśli jest obecny? Przydałoby się mieć wpis fdisk dla tego napędu, więc mogę po prostu pisać mount /jgdatazamiast nazwy urządzenia.

Jeremy
źródło

Odpowiedzi:

73

Jesteś na dobrej drodze. Znalazłem sposób, który jest nieco bardziej czysty i lepszy.

Prawidłowa opcja dodania fstabjest nofailjednak późniejsza auto. Jeśli zmienisz na noauto, nigdy nie zostanie zamontowany podczas rozruchu. Jeśli dodasz nobootwaitdo programu ładującego, możesz potencjalnie przegapić coś poważnego, na przykład zamontowanie partycji przed fsckzakończeniem sprawdzania lub niezamontowanie partycji używanej w procesie uruchamiania.

Po dokonaniu powyższej zmiany, system uruchomi się normalnie (i zamontuje wolumin), jeśli urządzenie zostanie podłączone podczas wyłączania systemu. Uruchomi się również normalnie, jeśli urządzenie nie będzie obecne w czasie uruchamiania.

Jedyną niedogodnością jest to, że jeśli podłączysz urządzenie podczas działania systemu, w zależności od konfiguracji (zbyt wielu zmiennych do przetestowania), urządzenie może się nie zamontować natychmiast. Można temu zaradzić poprzez proste mount -alub mount /specific_deviceponowne uruchomienie.

Bryan Gonzalez
źródło
2
Każdy przykład, który mogę znaleźć w Internecie, pokazuje „brak” przed automatycznym. Czy istnieje dokumentacja dla prawidłowego zamówienia?
Hackeron,
„man fstab” nie podaje dokładności potrzebnego zamówienia (sprawdzone w centos 7 i Ubuntu 14.04). Chociaż napisano: „nofail nie zgłasza błędów dla tego urządzenia, jeśli nie istnieje”. Zastanawiam się, czy to pomoże nie czekać na limit czasu przy starcie, jeśli wolumin nfs nie jest dostępny.
tisc0
16

Miałem ten sam problem - zrobiłem jeden dodatkowy krok

Jeśli użyjesz tej nofailopcji /etc/fstab, system będzie szukał dysku (i partycji) podczas uruchamiania. Jeśli urządzenie jest podłączone, system plików zostanie zamontowany. Jeśli nie, rozruch będzie kontynuowany normalnie.

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

Przykład

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

Próbowałem uruchomić system z podłączonym urządzeniem i bez niego, i działa dobrze.

To, czego nie osiągnąłem, to automatyczne zamontowanie, gdy dysk jest podłączony po uruchomieniu (gdy nie jest podłączony podczas rozruchu). Muszę użyć mount -ajako root, aby zamontować wszystko ponownie.

użytkownik898384
źródło
13

czy opcja noauto pozwala kontynuować proces uruchamiania?

nie instaluje się automatycznie, jeśli jest obecny, ale staje się znany, jeśli jest obecny, więc działa proste polecenie mount / jgdata ... wtedy skryptowe polecenie mount / jdata nie wymagałoby sprawdzenia danych wyjściowych, wystarczy złapać błąd i kontynuować uruchamianie

edytuj: po dalszym czytaniu bootwait jest prawdopodobnie bardziej poprawną opcją do przekazania ... (zwykle używany do udziałów sieciowych, które mogą nie być obecne aż do późniejszego uruchomienia, ale nadal mogą powodować zawieszanie się, idk)

a skrypt montowania można dodać w ten sposób: https://stackoverflow.com/questions/2062543/running-a-script-with-the-help-of-grub-and-menu-lst

RobotHumans
źródło
Dziękuję za odpowiedź. Żeby wyjaśnić, opcje należy dodać do linii fstab, prawda? (EDYCJA: Nvm, przejrzał go. Wygląda na to, że potrzebuję nobootwait.)
Jeremy
1
Użyłem opcji nobootwait w fstab, działa idealnie, dzięki.
Jeremy
5
/dev/xvdh1 /myfs xfs defaults,nofail,x-systemd.device-timeout=30 0 0

pracował dla mnie.

nofail ... Nie zgłaszaj błędów dla tego urządzenia, jeśli nie istnieje.
x-systemd.device-timeout = 30 ... Uruchomienie potrwa o 30 sekund dłużej, jeśli urządzenie nie istnieje (domyślnie 90 sekund).

Źródło: https://wiki.archlinux.org/index.php/fstab#External_devices

użytkownik313829
źródło
To najlepsza i najprostsza odpowiedź. Zauważ, że jest to nowa składnia dla nowszych wersji systemu operacyjnego, które używają systemd, zastępując starą nobootwaitskładnię
cxrodgers
To zadziałało dla mnie. Kluczem było dodanie limitu czasu urządzenia; po prostu użycie nofail, rozruch rzeczywiście by się nie powiódł z powodu przekroczenia limitu czasu udev. (prawdopodobnie unikalne dla urządzeń USB)
BobHy
1

Zalecanym sposobem montowania podczas rozruchu jest instruowanie ich systemu za pomocą pliku fstab . Patrząc na Twoje pytanie, zauważyłem, że jesteś prawie na miejscu, brakuje tylko instrukcji, która ustawia urządzenie na korzystanie z opcji automount, umożliwiając systemowi zamontowanie urządzenia, gdy jest dostępne.

Więc po prostu przepisz linię w swoim fstab, tak jak poniżej:

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

Po zmianie i zapisz go, spróbuj zamontować go ręcznie:

$ sudo mount -a

Należy zauważyć, że:

  1. musisz mieć pewność, że identyfikator UUID urządzenia. Identyfikatory UUID są generowane przez narzędzia make-fileystem (mkfs. *) Podczas tworzenia systemu plików.
  2. Te <options>muszą być napisane według bardzo określonego formatu, oddzielone przecinkami, ale bez spacji po każdym przecinku. Uważaj na to ;-)
  3. Nie jestem pewien, czy to zadziała płynnie, ponieważ próbujesz automatycznie zamontować system plików NTFS, które można obsługiwać za pomocą narzędzi NTFS-3G . Chociaż moje instrukcje powinny działać poprawnie, nigdy wcześniej nie próbowałem automatycznego montażu NTFS. Jeśli więc się nie powiedzie, polecam zapoznać się z tymi Montowanymi partycjami systemu Windows pod kątem alternatywnych zastosowań NTFS.

Dzięki!

crncosta
źródło
myślę, że dostaje większość tego, co powiedziałeś, ale zawiesił się, gdy dysk nie został wykryty. dlatego zaproponowałem obejście „właściwego” sposobu
RobotHumans
Dziękuję za odpowiedź. Do Twojej sudo blkiddyspozycji jest dobry sposób na znalezienie UUID.
Jeremy
Właśnie wypróbowałem tę dokładną linię w fstab. Po podłączeniu dysku twardego system uruchamia się normalnie. Ale podczas rozruchu, gdy zewnętrzny dysk twardy nie jest podłączony, nadal wyświetla monit o oczekiwanie / pomijanie / ręczne przywracanie. Ponieważ ten monit nie kończy się, jeśli nie będę przy terminalu, pudełko nie uruchomi się, jeśli zewnętrzny dysk twardy nie zostanie podłączony.
Jeremy,
Musisz dodać nofail, opcja.
kkron
0

Mam ten sam problem. Edytowałem fstab, aby skomentować ten wpis, kiedy wiem, że nie będę miał napędu przy następnym uruchomieniu. Następnie, kiedy mam obecny dysk, po prostu edytuję fstab, aby usunąć komentarz i wydać polecenie mount -a. To nie jest idealne rozwiązanie. Byłoby wspaniale, gdybym wymyślił sposób, aby system automatycznie montował dysk, jeśli jest obecny, lub automatycznie pomija go, jeśli nie jest obecny. Ten sam problem występuje, jeśli masz automatycznie instalowane udziały NFS, a serwer nie jest obecny.


źródło
1
Sprawdź odpowiedź, którą zaakceptowałem, po prostu dodaj nobootwait do opcji montowania w fstab.
Jeremy