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.

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.


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.


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


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


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!


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.


1
Sprawdź odpowiedź, którą zaakceptowałem, po prostu dodaj nobootwait do opcji montowania w fstab.
Jeremy
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.