root auf LVM und RAID: waiting for device /dev/[vg]/[lv] to appear ...

Eingetragen von Stefan Pampel. | 7. März 2009 - 17:48

SuSE 10.2: Falls das Wurzelverzeichnis trotz Autodetection beim booten nicht initialisiert wird, liegt es vermutlich an einer fehlenden /etc/mdadm.conf, die 'eigentlich' dank Autodetection nicht mehr benötigt werden sollte [1], zumindest für alle Partitionen außer dem Wurzelverzeichnis. Ins Spiel kommt die /etc/mdadm.conf vor allem bei dem erzeugen der initrd. Angelegt werden kann die Datei z.B. mit dem Befehl

mdadm --detail --scan >> /etc/mdadm.conf

Anschließend kann mit mkinitrd die initrd erzeugt werden (Abweichungen je nach Distribution):

mkinitrd -k [/path/to-kernel] -i [/path/to-initrd]

Wichtig ist, dass die entsprechenden Module und Programme in der initrd abgelegt sind. Geprüft werden kann der Inhalt der initrd wie folgt:

mkdir /tmp/initrd
cd /tmp/initrd
zcat /boot/initrd... | cpio -div

Im Verzeichnis ist jetzt der Inhalt zu finden. Vorhanden sein sollten mdadm und lvm in sbin/ , sowie die etc/mdadm.conf usw.

Die Spur des Fehlers

Das System wurde vom Rettungssystem aus von 'physikalischen' Partitionen auf ein Software-Raid mit LVM migriert. Das chroot mit 

mount -t proc none /[mountpoint/new-system]/proc
mount -o bind /dev /[mountpoint/new-system]/dev

vorbereitet. Mit

chroot /[mountpoint/new-system]/ 

in das neue System gewechselt und mit oben genannten Befehl die initrd erzeugt:

mkinitrd -k [/path/to-kernel] -i [/path/to-initrd]

Falls die Werkzeuge für LVM und RAID nicht in der initrd landen, kann das unter SuSE mit den Parametern -f lvm -f md erzwungen werden. Im Zweifel den Inhalt prüfen, siehe oben.

Boot.

Das System bleibt mit einem

Waiting for device /dev/vol01/root to appear: ................ not found -- exiting to /bin/sh

stehen und landet nach einer Weile in einer Shell.

cat /proc/mdstat

zeigt kein RAID und auch /dev/md0 ist nicht vorhanden ist, jedoch

cat /proc/modules 

zeigt dass das Modul raid1 geladen ist.

Das fehlende Block-Device (b) mit mknod erzeugen, Major 9 Minor 0 (siehe KernelQuelltext/Documentation/devices.txt,Abschnitt "9 block ... Metadisk (RAID) devices":

mknod /dev/md0 b 9 0

RAID als /dev/md0 initialisieren

mdadm -Ac partitions -m0 /dev/md0

Antwort positiv, überzeugt mit:

cat /proc/mdstat

welches nun das zu Grunde liegende RAID anzeigt, welches nun auch im LVM zu sehen ist:

lvm pvscan

Jedoch sind die Logical Volumes noch inaktiv:

lvm lvscan

aktiviert mit:

lvm lvchange -ay vol01/root

Nun ist alles vorhanden, mit exit beenden, der Boot-Vorgang geht weiter.

Jetzt wie oben beschreiben die /etc/mdadm.conf anlegen und die initrd erneuern (Erfolgskontrolle!).

[1] http://linux-raid.osdl.org/index.php/RAID_setup#The_Persistent_Superblock

Kategorie: