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

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

# 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

PartitionenVerschieben (zuletzt geändert am 2007-12-23 22:47:10 durch localhost)