4.13. Einhängereihenfolge für Bind Mounts und Dateisysteme
Wenn Sie die
bind
-Option des mount
-Befehls verwenden, müssen Sie sicherstellen, dass die Dateisysteme in der richtigen Reihenfolge eingehängt werden. In dem folgenden Beispiel muss das /var/log
-Verzeichnis eingehängt werden, bevor der Bind Mount auf dem /tmp
-Verzeichnis ausgeführt wird:
# mount --bind /var/log /tmp
Die Reihenfolge, in der Dateisysteme eingehängt werden, wird wie folgt bestimmt:
- Üblicherweise folgt die Reihenfolge, in der Dateisysteme eingehängt werden, der Reihenfolge, in der diese in der
fstab
-Datei aufgeführt sind. Ausnahmen davon betreffen Dateisysteme, die mit dem_netdev
-Flag eingehängt werden, oder Dateisysteme, die über eigeneinit
-Skripte verfügen. - Ein Dateisystem mit eigenem
init
-Skript wird später im Initialisierungsprozess eingehängt, nach den Dateisystemen in derfstab
-Datei. - Dateisysteme mit dem
_netdev
-Flag werden eingehängt, sobald das Netzwerk auf dem System aktiviert wurde.
Falls Ihre Konfiguration erfordert, dass Sie ein Bind Mount erstellen, auf dem ein GFS2-Dateisystem eingehängt wird, können Sie Ihre
fstab
-Datei wie folgt ordnen:
- Einhängen der lokalen Dateisysteme, die für den Bind Mount notwendig sind.
- Bind Mount des Verzeichnisses, auf dem das GFS2-Dateisystem eingehängt werden soll.
- Einhängen des GFS2-Dateisystems.
Falls Ihre Konfiguration erfordert, dass Sie ein lokales Verzeichnis oder Dateisystem mittels Bind Mount auf einem GFS2-Dateisystem einhängen, würde auch die richtige Reihenfolge der Dateisysteme in der
fstab
-Datei die Dateisysteme nicht richtig einhängen, da das GFS2-Dateisystem erst eingehängt wird, wenn das GFS2-init
-Skript ausgeführt wird. In diesem Fall sollten Sie ein init
-Skript schreiben, um den Bind Mount derart zu konfigurieren, dass der Bind Mount erst durchgeführt wird, nachdem das GFS2-Dateisystem eingehängt wurde.
Das folgende Skript ist ein Beispiel für ein benutzerdefiniertes
init
-Skript. Dieses Skript führt einen Bind Mount von zwei Verzeichnissen auf zwei Verzeichnisse eines GFS2-Dateisystems durch. In diesem Beispiel gibt es einen vorhandenen GFS2-Einhängepunkt unter /mnt/gfs2a
, der eingehängt wird, wenn das GFS2-init
-Skript nach dem Cluster-Start ausgeführt wird.
In diesem Beispielskript bedeuten die Werte der
chkconfig
-Anweisung Folgendes:
- 345 steht für die Runlevels, in denen das Skript gestartet wird
- 29 ist die Startpriorität, was in diesem Fall bedeutet, dass das Skript zum Startzeitpunkt nach dem GFS2-
init
-Skript ausgeführt wird, welches eine Startpriorität von 26 hat - 73 ist die Stopppriorität, was in diesem Fall bedeutet, dass das Skript während des Herunterfahrens vor dem GFS2-Skript gestoppt wird, welches eine Stopppriorität von 74 hat
Die Start- und Stoppwerte zeigen, dass Sie die angegebene Aktion manuell durch Ausführen der Befehle
service start
und service stop
vornehmen können. Falls das Skript beispielsweise fredwilma
heißt, können Sie service fredwilma start
ausführen.
Dieses Skript sollte im
/etc/init.d
-Verzeichnis abgelegt werden, mit denselben Berechtigungen wie die anderen Skripte in dem Verzeichnis. Sie können anschließend den Befehl chkconfig on
ausführen, um das Skript mit den angegebenen Runlevels zu verknüpfen. Falls das Skript beispielsweise fredwilma
heißt, können Sie chkconfig fredwilma on
ausführen.
#!/bin/bash # # chkconfig: 345 29 73 # description: mount/unmount my custom bind mounts onto a gfs2 subdirectory # # ### BEGIN INIT INFO # Provides: ### END INIT INFO . /etc/init.d/functions case "$1" in start) # In this example, fred and wilma want their home directories # bind-mounted over the gfs2 directory /mnt/gfs2a, which has # been mounted as /mnt/gfs2a mkdir -p /mnt/gfs2a/home/fred &> /dev/null mkdir -p /mnt/gfs2a/home/wilma &> /dev/null /bin/mount --bind /mnt/gfs2a/home/fred /home/fred /bin/mount --bind /mnt/gfs2a/home/wilma /home/wilma ;; stop) /bin/umount /mnt/gfs2a/home/fred /bin/umount /mnt/gfs2a/home/wilma ;; status) ;; restart) $0 stop $0 start ;; reload) $0 start ;; *) echo $"Usage: $0 {start|stop|restart|reload|status}" exit 1 esac exit 0