staging.inyokaproject.org

Ubuntu 14.04 lvm über multipath bootet nicht mehr

Archivierte Anleitung

Dieser Artikel wurde archiviert. Das bedeutet, dass er nicht mehr auf Richtigkeit überprüft oder anderweitig gepflegt wird. Der Inhalt wurde für keine aktuell unterstützte Ubuntu-Version getestet. Wenn du Gründe für eine Wiederherstellung siehst, melde dich bitte in der Diskussion zum Artikel. Bis dahin bleibt die Seite für weitere Änderungen gesperrt.

Achtung!

Die Verwendung dieses Howto geschieht auf eigene Gefahr. Bei Problemen mit der Anleitung melde dies bitte in der dazugehörigen Diskussion und wende dich zusätzlich an den Verfasser des Howtos.

Hinweis:

Diese Howto-Anleitung wurde zuletzt von muellerj am 08.02.2016 unter Ubuntu 14.04.3 und kpartx, kpartx-boot, multipath-tools, multipath-tools-boot Version 0.4.9-3ubuntu7.8 erfolgreich getestet.

Problembeschreibung

Nach diversen Updates bootet das System nicht mehr. Beim Betriebssystem handelt es sich um Ubuntu 14.04.3 64-Bit mit LVM-Root-Partition, die über Multipath angebunden ist. Der Systemstart bleibt mit der Bemerkung stehen, dass die Root-Partition nicht gefunden wird (so wie hier beschrieben: http://askubuntu.com/questions/361886/cannot-find-root-device-after-latest-kernel-upgrade). Man wird zur Eingabe von Kommandos aufgefordert. Der Systemstart kann nur nach Eingabe eigener Kommandos fortgesetzt oder beendet werden. Wie kommt man weiter?

Zunächst sollte geprüft werden, wie der Multipath-Status ist. Die kann mit dem Kommando /sbin/multipath -ll erfolgen. Erfahrungsgemäß wird nichts angezeigt. Nach Eingabe des Kommandos /sbin/multipath -v0 zeigt das Kommando /sbin/multipath -ll die Multipath-Konfiguration, wie sie sein soll.

Jetzt kann mit <Strg>D der Eingabemodus verlassen werden. Das System findet nach dem korrekten Start jetzt die Root-Partition und startet.

Multipath wird also offensichtlich beim Systemstart nicht mehr korrekt durch das Initram-FS gestartet (siehe auch dazu: https://bugs.launchpad.net/ubuntu/+source/multipath-tools/+bug/1431650).

Ein manueller Start von Multipath behebt den Fehler. Aber das System soll ja alleine starten, ohne manuellen Eingriff.

Ursache ist offensichtlich, dass das Paket multipath-tools durch diverse Updates so verändert wurde, dass durch den Systemstart Multipath nicht mehr früh genug gestartet wird. Der Start erfolgt in der Initramfs erst nach dem Start von lvm2 - und das ist zu spät. Ursache dafür könnte das Wegfallen des Files /lib/udev/rules.d/95-multipath.rules im Paket multipath-tools sein.

Es gibt 2 Möglichkeiten der Lösung:

  1. Zurücksetzen der Pakete multipath-tools, multipath-tools-boot, kpartx und kpartx-boot auf eine Version, die noch problemlos läuft

  2. Modifizieren des Initram-FS so, dass der Start funktioniert.

Lösung 1 - Alte Pakete einsetzen

Die zuletzt funktionierenden Pakete kpartx, kpartx-boot, multipath-tools und multipath-tools-boot sind in Version 0.4.9-3ubuntu7.4 auf der Installations-CD von Ubuntu 14.04.3-Server vorhanden.

Nachdem man es geschafft hat, das System zu starten, mountet man diesen Datenträger (z.B. auf /mnt). Danach wird man feststellen, dass diese Pakete im Verzeichnis /mnt/pool/main/m/multipath-tools/ liegen. Von dort können sie installiert werden mittels

sudo dpkg -i <paket>... 

Danach müssen diese Pakete gesperrt werden, um bei einem weiteren Update ein Überschreiben zu verhindern. Wie dies geht, das kann dieser Beschreibung: https://wiki.debianforum.de/Pakete_auf_hold_setzen entnommen werden.

Nach

sudo update-initramfs -k all -u 

wird neu gestartet.

Lösung 2 - Modifizieren des Boot-Vorgangs

Diese Lösung ist etwas komplexer. Sie erfordert eine Eingriff in den Systemstart.

Es wurde festgestellt, dass der Multipath-Start nach dem Start von lvm2 zu spät kommt. Beim manuellen Eingreifen in den Start wird Multipath gestartet und lvm2 kann danach seine Arbeit aufnehmen. Das anschließende Mounten der Root-Partition gelingt.

Das Lösungsprinzip besteht darin, zu einem möglichst frühen Zeitpunkt Multipath zu starten, gleich nach udev. Dadurch kommt es zwar zu vielen Meldungen während des Starts, aber der Systemstart kommt erfolgreich zu Ende.

Immerhin arbeitet sie mit den aktuellen Paketen in Version 0.4.9-3ubuntu7.7.

Es wird in diesem Beispiel von folgender Konfiguration für Multipath ausgegangen (/etc/multipath.conf):

defaults {
        user_friendly_names yes
}
blacklist {
        devnode "^(ram|raw|loop|fd|md|dm-|sr|scd|st)[0-9]*"
        devnode "^hd[a-z][[0-9]*]"
        devnode "^cciss!c[0-9]d[0-9]*[p[0-9]*]"
}
devices {
        device {
                vendor "EMC"
                product "Invista"
                product_blacklist "LUNZ"
                path_grouping_policy multibus
                path_checker tur
                no_path_retry 5
        }
}

Zunächst wurde eine Modifikation an /etc/lvm/lvm.conf vorgenommen (Siehe auch: http://www.novell.com/support/kb/doc.php?id=7007498) Die Anweisung "filter" wurde wie unten steht ersetzt:

filter = [ "a|/dev/disk/by-id/dm-name-.*|", "r/.*/" ]

Dann wurde die Liste der in die Initram zu integrierenden Module erweitert. Orientiert wurde sich dabei an der Ausgabe des Kommandos:

sudo lsmod 

In das Konfigurationsfile /etc/initramfs-tools/modules wurden im konkreten Beispiel eingefügt:

scsi_dh_emc 
scsi_dh 
scsi_tgt 
scsi_transport_fc 
dm_multipath 
dm_round_robin

Dann wird das File /etc/initramfs-tools/hooks/99-multipath erstellt und ausführbar gemacht:

sudo chmod +x /etc/initramfs-tools/hooks/99-multipath 

Es sorgt dafür, dass Multipath zu einem frühen Zeitpunkt gestartet wird.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
#!/bin/sh 
PREREQS="multipath" 
prereqs() { echo "$PREREQS"; } 
case $1 in 
prereqs) 
        prereqs 
        exit 0 
        ;; 
esac 
if [ ! -x /sbin/multipath ]; then 
        exit 0 
fi 
. /usr/share/initramfs-tools/hook-functions
if [ -x /usr/share/initramfs-tools/scripts/local-top/multipath ] 
then 
        cp /usr/share/initramfs-tools/scripts/local-top/multipath $DESTDIR/scripts/init-top/ 
fi

Danach wird die Initram neu erstellt:

sudo update-initramfs -k all -u 

Die Initramfs kann ausgepackt werden. Das geschieht mit folgenden Kommandos:

mkdir initramfs
cd initramfs
zcat /boot/initrd.img-... | cpio -imdv 

Dieses ausgepackte System kann analysiert werden, um die Wirkung zu verstehen. Es zeigt sich, dass unter scripts/ zweimal multipath gestartet wird.

Ein Reboot bringt jetzt zwar viele Meldungen, läuft aber durch.

Änderungen seit kpartx, kpartx-boot, multipath-tools, multipath-tools-boot Version 0.4.9-3ubuntu7.8

Seit dieser Version funktioniert der Neustart des Systems wieder ohne das File /etc/initramfs-tools/hooks/99-multipath.

In /etc/lvm/lvm.conf kann auch die filter Anweisung auf den in https://help.ubuntu.com/lts/serverguide/multipath-devices.html vorgeschlagenen Wert zurück gesetzt werden:

filter = [ "r/block/", "r/disk/", "r/sd.*/", "a/.*/" ]

Änderungen seit kpartx, kpartx-boot, multipath-tools, multipath-tools-boot Version 0.4.9-3ubuntu7.11

Seit dieser Version funktioniert der Start wieder richtig flott. Zwischenzeitliche Wartezeiten von maximal 4 mal jeweils 30 Sekunden sind auf maximal 10 Sekungen geschrumpft, die wohl nicht vermeidbar sind, und das bei ca. 40 Multipath-FC-Devices.

  • Howto - Übersicht aller Howto-Artikel

Diese Revision wurde am 23. März 2017 13:02 von noisefloor erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: initrd, Problem, multipath, lvm, Howto, boot, Lösung