Bedingtes `mount` in Linux: dev oder nfs

Bedingtes `mount` in Linux: dev oder nfs

Ich habe einen Einhängepunkt – lass es so /media/question– und zwei mögliche Geräte: eine physische Festplatte und einen Remote-NFS-Ordner. Manchmal schließe ich das Gerät physisch an, in anderen Fällen mounte ich es über NFS.

Gibt es eine Möglichkeit, beide anzugeben, fstabsodass bei der Ausführung mount /media/questionvorzugsweise das physische Volume und, wenn dieses nicht verfügbar ist, NFS ausgewählt wird?

Antwort1

Sie müssen ein Bash-Skript erstellen, das überprüft, ob das physische Gerät vorhanden ist. Wenn das Gerät vorhanden ist, mounten Sie es, andernfalls mounten Sie die NFS-Freigabe.

Etwas wie das :

if [ -d /media/disk ] ; then {
mount /media/disk ...
}
else{ ...

Sie können dieses Skript in /etc/init.d einfügen, um es beim Start auszuführen, oder Sie können es zu cron hinzufügen, um es alle 5 Minuten oder in einem anderen Zeitraum zu prüfen ...

Antwort2

Sie können sich auch udev ansehen, falls es installiert ist. Dies ermöglicht Aktionen, wenn ein Gerät hinzugefügt oder entfernt wird, beispielsweise wenn eine Netzwerkschnittstelle aktiviert wird. Um dies in Aktion zu sehen, schauen Sie in die Dateien, die den Netzwerkzugriff abdecken, in /etc/udev/rules.d/ (auf meiner SuSE-Box heißt es 77-network.rules). Sie können Aktionen definieren, wenn eine Schnittstelle aktiviert/deaktiviert wird:

/etc/udev/rules.d/77-network.rules

# SUBSYSTEM=="netz",

ENV{INTERFACE}=="ppp*|ippp*|isdn*|plip*|lo*|irda*|dummy*|ipsec*|tun*|tap*|bond*|br*|vlan*|modem*|dsl*",GOTO="ifup_überspringen"

SUBSYSTEM=="net", AKTION=="Hinzufügen", RUN+="/sbin/ifup $env{INTERFACE} -o hotplug"

SUBSYSTEM=="net", AKTION=="entfernen", RUN+="/sbin/ifdown %k -o hotplug"

LABEL="ifup_überspringen"

(Die Zeile „ENV(INTERF....“ wird verwendet, um nicht standardmäßige Netzwerkschnittstellen zu ignorieren. Bei Übereinstimmung springt sie zur entsprechenden LABEL-Anweisung. Die SUBSYTEM-Zeilen werden ausgelöst, wenn die ACTION-Anweisung übereinstimmt – d. h. eine Schnittstelle wird HINZUFÜGT oder ENTFERNT.)

Wenn Sie also die AKTION „Hinzufügen/Entfernen“ ändern, um Ihr Skript aufzurufen, das ifup/ifdown aufruft, führen Sie anschließend alles aus, was Sie möchten. Rufen Sie beispielsweise „ifup $@“ auf, überprüfen Sie dann die Schnittstellen-IP und mounten Sie die entsprechenden Einträge. Wenn die Mounts in fstab mit der Option „noauto“ aufgelistet wurden, benötigen Sie nur eine einfache Namenskonvention, um den Eintrag zu finden und ein Mount auszugeben.

In ähnlicher Weise deckt das Skript /etc/udev/rules.d/56-idedma.rules IDE- (oder SATA-)Laufwerke ab und wird ausgeführt, wenn die Laufwerke erkannt werden. Dieses Skript ermöglicht die Initiierung lokaler Mounts basierend auf deren Vorhandensein unter Verwendung eines alternativen RUN-Skripts.

Die Benennung und Anordnung der Regeln ähnelt der im Init-System verwendeten. Weitere Beispiele und Optionen finden Sie in den Hilfe- und Regeldateien.

verwandte Informationen