Montare un'unità esterna all'avvio solo se è collegata


70

Ho una voce per un hard disk esterno nel mio fstab:

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

Ma a volte questa unità non è collegata al momento dell'avvio. Questo mi lascia a metà strada attraverso uno stivale, con la richiesta di "Continua in attesa, premi S o premi M" ma in questo momento nessuna pressione dei tasti ha alcun effetto (incluso Ctrl- Alt- Delete, nemmeno il blocco maiuscole).

A corto di scrivere uno script per controllare l'output di fdisk -l, come posso montare questa unità all'avvio solo se è presente? Sarebbe utile avere una voce fdisk per questa unità, quindi posso semplicemente digitare mount /jgdatainvece di aver bisogno di un nome di dispositivo.

Risposte:


73

Siete tutti sulla strada giusta. Ho trovato un modo un po 'più pulito e una forma migliore.

L'opzione corretta da aggiungere fstabè nofail, tuttavia, deve venire dopo auto. Se lo cambi in noauto, non verrà mai montato durante l'avvio. Se si aggiunge nobootwaital bootloader, si potrebbe potenzialmente perdere qualcosa di grave, come montare la partizione prima di fsckterminare il controllo o non montare una partizione utilizzata nel processo di avvio.

Dopo aver apportato la modifica sopra, il sistema si avvierà normalmente (e monterà il volume) se il dispositivo è collegato mentre il sistema è spento. Si avvierà anche normalmente se il dispositivo non è presente al momento dell'avvio.

L'unico inconveniente è che se si collega il dispositivo mentre il sistema è in esecuzione, a seconda della configurazione (troppe variabili da testare), il dispositivo potrebbe non montarsi immediatamente. Questo può essere risolto con un semplice mount -ao mount /specific_deviceo un riavvio.


2
Ogni esempio che posso trovare online mostra nofail prima di auto. Esiste una documentazione per l'ordine corretto?
Hackeron

'man fstab' non fornisce la precisione di un ordine necessario (controllato in centos 7 e Ubuntu 14.04). Tuttavia, dice "nofail non segnala errori per questo dispositivo se non esiste". Mi chiedo se questo aiuterà a non aspettare il timeout all'avvio se il volume nfs non è accessibile.
tisc0

16

Ho avuto lo stesso problema: ho fatto un ulteriore passo

Se si utilizza l' nofailopzione in /etc/fstab, il sistema cercherà il disco (e la partizione) all'avvio. Se il dispositivo è collegato, verrà montato il filesystem. In caso contrario, l'avvio continuerà normalmente.

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

Esempio

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

Ho provato ad avviare il sistema con e senza il dispositivo collegato e funziona bene.

Quello che non ho ottenuto è montare automaticamente quando il disco è collegato dopo l'avvio (quando non è collegato all'avvio). Devo usare mount -acome root per montare di nuovo tutto.


13

l'opzione noauto consente al processo di avvio di continuare?

non si monta automaticamente se presente, ma lo fa sapere se presente, quindi un semplice mount / jgdata funziona ... quindi un mount / jdata con script non avrebbe bisogno di un controllo di output, basta catturare l'errore e continuare l'avvio

modifica: dopo qualche ulteriore lettura bootwait è probabilmente un'opzione più corretta per passare ... (di solito usato per condivisioni di rete che potrebbero non essere presenti fino a dopo nel processo di avvio, ma potrebbe comunque causare un blocco, idk)

e lo script di mount potrebbe essere aggiunto in questo modo: https://stackoverflow.com/questions/2062543/running-a-script-with-the-help-of-grub-and-menu-lst


Grazie per la risposta. Giusto per chiarire, le opzioni devono essere aggiunte alla linea fstab, giusto? (EDIT: Nvm, cerca su Google. Sembra che il nobootwait sia quello di cui ho bisogno.)
Jeremy

1
Ho usato l'opzione nobootwait in fstab, funziona perfettamente, grazie.
Jeremy,

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

ha funzionato per me.

nofail ... Non segnalare errori per questo dispositivo se non esiste.
x-systemd.device-timeout = 30 ... L'avvio richiederà 30 secondi in più se il dispositivo non esiste (il valore predefinito è 90 secondi).

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


Questa è la risposta migliore e più semplice. Si noti che questa è la nuova sintassi per le versioni più recenti del sistema operativo che utilizzano systemd, sostituendo la vecchia nobootwaitsintassi
cxrodgers

Questo ha funzionato per me. La chiave stava aggiungendo il timeout del dispositivo; semplicemente usando nofail l'avvio fallirebbe davvero a causa del timeout udev. (probabilmente unico per i dispositivi USB)
Bob,

1

Il modo consigliato di montare durante l'avvio è istruire il loro sistema attraverso il file fstab . Guardando il tuo Ask, ho visto che ci sei quasi, manca solo le istruzioni che impostano il dispositivo per utilizzare le opzioni di montaggio automatico, consentendo al tuo sistema di montare il dispositivo quando è disponibile.

Quindi, riscrivi la linea nel tuo fstab per essere come sotto:

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

Dopo averlo modificato e salvato, prova a montarlo a mano:

$ sudo mount -a

È importante notare che:

  1. devi essere sicuro dell'UUID del dispositivo. Gli UUID sono generati dalle utility make-filesystem (mkfs. *) Quando si crea un filesystem.
  2. Questi <options>devono essere scritti seguendo un formato molto specifico, separati da virgole ma senza spazi dopo ogni virgola. Stai attento con questo ;-)
  3. Non sono sicuro che funzionerà senza problemi perché si sta tentando di montare automaticamente un filesystem NTFS, che è possibile utilizzare le utility NTFS-3G . Mentre le mie istruzioni dovrebbero funzionare correttamente, non ho mai provato a montare automaticamente NTFS prima. Quindi, se fallisce, ti consiglio di guardare questo montaggio di partizioni Windows per usi alternativi di NTFS.

Grazie!


penso che ottenga la maggior parte di ciò che hai detto, ma si blocca quando il disco non viene rilevato. ecco perché ho suggerito una soluzione alternativa al modo "corretto"
RobotHumans,

Grazie per la risposta. Cordiali saluti, il sudo blkidcomando è un buon modo per scoprire gli UUID.
Jeremy,

Ho appena provato quella riga esatta in fstab. Quando l'HDD è collegato, il sistema si avvia normalmente. Ma, durante l'avvio, quando l'HDD esterno non è collegato, mi viene comunque richiesto di attendere / saltare / Ripristino manuale. Poiché questo prompt non scade, se non sono al terminale, la scatola non si avvierà se l'HDD esterno non è collegato.
Jeremy

Devi aggiungere l'opzione nofail.
kkron,

0

Ho lo stesso problema. Ho modificato fstab per commentare la voce quando so che non avrò l'unità presente al prossimo avvio. Quindi quando ho l'unità presente, modifico semplicemente fstab per rimuovere il commento ed emettere mount -a. Questa non è una soluzione perfetta. Sarebbe bello se potessi trovare un modo per far montare automaticamente il sistema se presente o saltare automaticamente se non presente. Lo stesso problema si verifica se le condivisioni NFS sono montate automaticamente e il server non è presente.


1
Controlla la risposta che ho accettato, basta aggiungere nobootwait alle opzioni di mount in fstab.
Jeremy,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.