Stellen Sie ein externes Laufwerk nur beim Booten bereit, wenn es eingesteckt ist


70

Ich habe einen Eintrag für eine externe Festplatte in meiner fstab:

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

Aber manchmal ist dieses Laufwerk beim Booten nicht angeschlossen. Damit habe ich die Hälfte des Startvorgangs hinter mir und werde aufgefordert, "Weiter zu warten, S oder M zu drücken". In diesem Stadium hat jedoch kein Tastendruck Auswirkungen (einschließlich Ctrl- Alt- Delete, nicht einmal Feststelltaste).

Ohne ein Skript zu schreiben, um die Ausgabe zu überprüfen fdisk -l, wie kann ich dieses Laufwerk beim Booten nur einbinden, wenn es vorhanden ist? Es wäre praktisch, einen fdisk-Eintrag für dieses Laufwerk zu haben, damit ich einfach tippen kann, mount /jgdataanstatt einen Gerätenamen zu benötigen.

Antworten:


73

Sie sind alle auf dem richtigen Weg. Ich habe einen Weg gefunden, der ein bisschen sauberer und besser in Form ist.

Die richtige Option zum Hinzufügen fstabist nofailjedoch, dass es nachher kommen muss auto. Wenn Sie es ändern, noautowird es während des Startvorgangs nie bereitgestellt. Wenn Sie nobootwaitdem Bootloader etwas hinzufügen , können Sie möglicherweise etwas Schwerwiegendes übersehen, z. B. das Mounten der Partition, bevor die fsckÜberprüfung abgeschlossen ist, oder das Nichtmounten einer Partition, die im Bootprozess verwendet wird.

Nachdem Sie die oben genannten Änderungen vorgenommen haben, wird das System normal gestartet (und das Volume angehängt), wenn das Gerät beim Herunterfahren des Systems angeschlossen wird. Es wird auch normal gestartet, wenn das Gerät zum Startzeitpunkt nicht vorhanden ist.

Der einzige Nachteil ist, dass das Gerät je nach Konfiguration (zu viele Variablen zum Testen) möglicherweise nicht sofort bereitgestellt wird, wenn Sie das Gerät anschließen, während das System ausgeführt wird. Dies kann mit einem einfachen behoben werden mount -aoder mount /specific_deviceoder einem Neustart.


2
Jedes Beispiel, das ich online finden kann, zeigt nofail vor auto. Gibt es Unterlagen für die richtige Bestellung?
Hackeron

'man fstab' gibt nicht die Genauigkeit einer benötigten Bestellung an (in Centos 7 und Ubuntu 14.04 aktiviert). Es wird jedoch angezeigt, dass "kein Fehler für dieses Gerät gemeldet wird, wenn es nicht vorhanden ist". Ich frage mich, ob dies hilft, das Timeout beim Booten nicht abzuwarten, wenn auf das nfs-Volume nicht zugegriffen werden kann.
Tisc0

16

Ich hatte das gleiche Problem - ich habe einen zusätzlichen Schritt getan

Wenn Sie die nofailOption in verwenden /etc/fstab, sucht das System beim Booten nach Ihrer Festplatte (und Partition). Wenn das Gerät angeschlossen ist, wird das Dateisystem eingehängt. Andernfalls wird der Startvorgang normal fortgesetzt.

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

Beispiel

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

Ich habe versucht, das System mit und ohne angeschlossenem Gerät zu starten, und es funktioniert einwandfrei.

Was ich nicht erreicht habe, ist das automatische Laden, wenn die Festplatte nach dem Booten eingesteckt wird (wenn sie beim Booten nicht eingesteckt wird). Ich muss mount -aals root alles wieder einhängen.


13

Lässt die Option noauto den Startvorgang fortfahren?

es wird nicht automatisch gemountet, wenn es vorhanden ist, aber es wird bekannt, wenn es vorhanden ist, so dass ein einfaches mount / jgdata funktioniert ... dann würde ein gescriptetes mount / jdata keine Ausgabeprüfung benötigen, fangen Sie einfach den Fehler ab und booten Sie weiter

edit: nach einigem weiterlesen ist bootwait wahrscheinlich eine korrektere option zum übergeben ... (normalerweise für netzwerkfreigaben, die erst später im bootprozess vorhanden sein könnten, aber trotzdem einen hang verursachen könnten, idk)

Das Mount-Skript könnte folgendermaßen hinzugefügt werden: https://stackoverflow.com/questions/2062543/running-a-script-with-the-help-of-grub-and-menu-lst


Danke für die Antwort. Um das zu verdeutlichen, müssen die Optionen zur fstab-Zeile hinzugefügt werden, richtig? (EDIT: Nvm, googelte es. Sieht aus wie nobootwait ist, was ich brauche.)
Jeremy

1
Ich habe die Option nobootwait in fstab verwendet, funktioniert einwandfrei, danke.
Jeremy

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

arbeitete für mich.

nofail ... Melden Sie keine Fehler für dieses Gerät, wenn es nicht vorhanden ist.
x-systemd.device-timeout = 30 ... Der Startvorgang dauert 30 Sekunden länger, wenn das Gerät nicht vorhanden ist (Standard ist 90 Sekunden).

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


Dies ist die beste und einfachste Antwort. Beachten Sie, dass dies die neue Syntax für neuere Versionen des Betriebssystems ist, die systemd verwenden und die alte nobootwaitSyntax ersetzen
cxrodgers

Das hat bei mir funktioniert. Der Schlüssel fügte das Geräte-Timeout hinzu. nur mit nofail würde der boot in der tat wegen udev timeout scheitern. (wahrscheinlich einzigartig für USB-Geräte)
BobHy

1

Die empfohlene Methode zum Mounten während des Startvorgangs besteht darin, das System über die Datei fstab anzuweisen . Wenn Sie sich Ihre Frage ansehen, sehe ich, dass Sie fast da sind. Es fehlt nur die Anweisung, mit der das Gerät auf die Verwendung von Automount-Optionen eingestellt wird, sodass Ihr System das Gerät einbinden kann, wenn es verfügbar ist.

Schreiben Sie die Zeile in Ihrer fstab einfach so um, dass sie wie folgt aussieht:

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

Versuchen Sie nach dem Ändern und Speichern, es von Hand zu montieren:

$ sudo mount -a

Es ist wichtig zu beachten, dass:

  1. Sie müssen sich über die UUID des Geräts sicher sein. UUIDs werden von den Dienstprogrammen make-filesystem (mkfs. *) Generiert, wenn Sie ein Dateisystem erstellen.
  2. Diese <options>müssen in einem ganz bestimmten Format geschrieben werden, getrennt durch Kommas, jedoch ohne Leerzeichen nach jedem Komma. Sei vorsichtig damit ;-)
  3. Ich bin nicht sicher, ob dies reibungslos funktioniert, da Sie versuchen, ein NTFS-Dateisystem, das mit NTFS-3G- Dienstprogrammen verarbeitet werden kann, automatisch bereitzustellen. Obwohl meine Anweisungen korrekt funktionieren sollen, habe ich noch nie versucht, NTFS automatisch zu aktivieren. Wenn dies fehlschlägt, empfehle ich Ihnen, sich diese Windows-Partitionen für alternative Anwendungen von NTFS anzuschauen .

Vielen Dank!


Ich glaube, er bekommt das meiste von dem, was Sie gesagt haben, aber es hängt, wenn die Festplatte nicht erkannt wird. Deshalb schlug ich eine Problemumgehung für den "richtigen" Weg vor
RobotHumans

Danke für die Antwort. Zu Ihrer Information, der sudo blkidBefehl ist ein guter Weg, um UUIDs herauszufinden.
Jeremy

Ich habe gerade genau diese Zeile in fstab ausprobiert. Wenn die Festplatte eingesteckt ist, wird das System normal gestartet. Wenn die externe Festplatte während des Startvorgangs nicht angeschlossen ist, werde ich dennoch aufgefordert, zu warten, zu überspringen und manuell wiederherzustellen. Da bei dieser Eingabeaufforderung keine Zeitüberschreitung auftritt, startet die Box nicht, wenn die externe Festplatte nicht angeschlossen ist.
Jeremy,

Sie müssen die Option nofail hinzufügen.
kkron

0

Ich habe das gleiche Problem. Ich habe fstab bearbeitet, um den Eintrag zu kommentieren, wenn ich weiß, dass das Laufwerk beim nächsten Start nicht vorhanden sein wird. Wenn das Laufwerk vorhanden ist, bearbeite ich einfach fstab, um den Kommentar zu entfernen und mount -a auszugeben. Dies ist keine perfekte Lösung. Es wäre großartig, wenn ich herausfinden könnte, wie das System das Laufwerk automatisch mounten kann, wenn es vorhanden ist, oder es automatisch überspringen kann, wenn es nicht vorhanden ist. Dasselbe Problem tritt auf, wenn Ihre NFS-Freigaben automatisch bereitgestellt werden und der Server nicht vorhanden ist.


1
Schauen Sie sich die Antwort an, die ich akzeptiert habe. Fügen Sie einfach nobootwait zu den Mount-Optionen in fstab hinzu.
Jeremy
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.