Wie stelle ich sicher, dass auf ein Verzeichnis garantiert immer eine ganz bestimmte Partition gehängt wird, egal was sonst noch ausfällt?
Wozu ist das gut?
Folgendes Szenario: Du hast einen Server aufgesetzt, der riesige - temporäre - Datenmengen erzeugt. Deshalb hast Du das Verzeichnis /tmp auf eine extra Festplatte ausgelagert und die /etc/fstab entsprechend angepasst. (/tmp auf eine eigene Partition zu packen ist sowieso immer sinnvoll, vor allem auf einem Server). Auf einer weiteren Platte, z.B. /home, liegen aber wichtige Daten.
Es sieht jetzt also z.B. so aus:
/dev/sda1 / # System /dev/sdb1 /tmp # Temporärer Kram /dev/sdc1 /home # Benutzerdaten ...
Schön. Jetzt fällt /dev/sdb, also die zweite SCSI-Festplatte, plötzlich aus. Der SCSI-Controller resettet sich, und Linux erkennt nur noch zwei Platten, nennt die sda und sdb, weil die Benennung nach der Reihenfolge des Erkennens beim Booten erfolgt, mountet /dev/sdb1 (worin ja die Benutzerdaten liegen!) unter /tmp -- und eines der UNIX-typischen Start-Skripte löscht kurz danach (beim Starten ist das üblich) z.B. alle in /tmp liegenden Dateien, die älter 7 Tage sind.
Dezenter Hinweis: Backups schaden nicht
Abhilfe mit devfs
Ab Kernel 2.4. ist das Device File System devfs verfügbar. Dieses erstellt eine Reihe zusätzlicher Gerätedateien unter /dev, welche nach dem Schema /dev/scsi/busN/hostN/targetN/lunN/ benannt werden. Dann gibt es das Problem nicht mehr, dass SCSI-Geräte beim Ausfall alle eins weiter 'rutschen' und man möglicherweise einen GAU erlebt.
Abhilfe mit Labels/UUIDs
Seit jeher gibt es die Möglichkeit, die /etc/fstab anstatt so
/dev/XXXX /home ext2 defaults 0 0
besser so
LABEL=/home /home ext2 defaults 0 0
oder so
UUID=3a30d6b4-08a5-11d3-91c3-e1fc5550af17 /home ext2 defaults 0 0
zu gestalten. Das hat den immensen Vorteil, dass man
- sich keine Sorgen mehr um Verschiebungen von Partitionen oder Massenspeichern allgemein machen muss.
DateisystemLabels oder UUIDs beim Erstellen des Dateissytems ('formatieren') oder später vergeben werden können.
- man einer Ersatzplatte (notfalls auf einem anderen System!) kurz das 'passende' Label verpassen kann, um sie dann auszutauschen -- das alles OHNE Anpassen von Konfigurationsdateien im betroffenen System.
Für diese Vorgehensweise benötigt man allerdings ein mount-Kommando mindestens in Version 1.15. Diese sollten allerdings bei jeder aktuellen Distribution mittlerweile vorhanden sein. Bei RedHat ist die Nutzung von Labels übrigens Standard.
Verschieben einer root-Partition
Hat man die obigen Tipps nicht beachtet und muss dennoch eine Partition verschieben, ist folgendes zu beachten:
Scenario: Die root-Partition soll von hda5 nach hdb7 verschoben werden
- Kopieren des Inhalts von hda5 nach hdb7. (mit cp -a, rsync, partimg ...)
- Anpassen der Datei /etc/fstab
- Anpassen des Bootloaders (LILO oder GRUB)
- Evt. anpassen der initrd: Wird dort ein mount-Befehl abgesetzt, ist dieser ebenfalls anzupassen.
# Nur root darf das alles: su # Partition kopieren: mkdir /src /trg mount -o ro /dev/hda5 /src mount -o rw /dev/hdb7 /trg cd /src cp -a * /trg # Anpassen von fstab: vi /trg/etc/fstab # Anpassen von lilo oder grub ... # Anpassen der initrd cd /trg/boot gzip -d initrd.gz mount -o loop initrd.gz /mnt perl -pi -e 's/hda5/hdb7/g' linuxrc umount /mnt gzip initrd