Das Problem
Das Tool mdadm wurde verwendet, um einen Software-RAID-Spiegel mit zwei Device-Mapper-Multipath-Geräten zu erstellen:
# /sbin/mdadm /dev/md0 --create --verbose --level=1 --raid-devices=2 /dev/mapper/ocrp1 /dev/mapper/ocrmirrorp1
Anschließend wurde die Einrichtung bestätigt:
# /sbin/mdadm --detail /dev/md0 ... Number Major Minor RaidDevice State 0 253 2 0 active sync /dev/dm-2 1 253 3 1 active sync /dev/dm-3
Da die tatsächlichen Multipath-Gerätenamen (/dev/dm-N) angezeigt werden, werden auch die Zuordnungen der freundlicheren Namen (/dev/mapped/ocrp1) überprüft:
# /bin/ls -l /dev/mpath/ lrwxrwxrwx 1 root root 7 Apr 23 11:15 ocrp1 -> ../dm-2 lrwxrwxrwx 1 root root 7 Apr 23 11:15 ocrmirrorp1 -> ../dm-3
# /bin/ls -l /dev/mapper/ brw-rw---- 1 root disk 253, 2 Apr 23 11:15 ocrp1 brw-rw---- 1 root disk 253, 3 Apr 23 11:15 ocrmirrorp1
Da diese praktischen Namen denselben Multipath-Geräten zugeordnet sind, hat sich die Einrichtung als richtig erwiesen. Nach einem Neustart zeigt mdadm Folgendes:
# /sbin/mdadm --detail /dev/md0 ... Number Major Minor RaidDevice State 0 8 97 0 active sync /dev/sdg1 1 8 113 1 active sync /dev/sdh1
Das RAID ist aktiv, verwendet die Multipath-Geräte jedoch nicht wie erwartet.
Die Lösung
Das ist eigentlich ein Timing-Problem. Während des Systemstarts wird die /etc/rcN.d Skripte starten mdadm, bevor die Multipath-Geräte erkannt und bereit sind. Dies ist im Wesentlichen eine Wettlaufbedingung, da eine größere Anzahl von Multipath-Geräten länger braucht, um erkannt zu werden, und mdadm ausgeführt werden kann, bevor die Multipath-Verarbeitung abgeschlossen ist.
Die Lösung besteht darin, die erforderlichen Dateisystem-Handler und Geräte in /initrd hinzuzufügen Datei, damit diese dem Kernel beim Booten zur Verfügung stehen. Dadurch kann der Kernel früher mit der Verarbeitung der Multipath-Geräte beginnen.
Hinweis :Die /vmlinuz-Datei des Linux-Kernels wurde mit Unterstützung nur für einige sehr grundlegende Geräte erstellt. Dateisystem-Handler und allgemeine Gerätetreiber werden separat kompiliert und in die /initrd-Datei (anfängliche Ramdisk) gepackt. Der GRUB- oder LILO-Bootloader muss zuerst den Inhalt der /initrd-Datei in den Speicher stellen und dann den Kernel laden. Der Kernel verwendet dann die anfängliche Ramdisk, um die erforderlichen Gerätetreiber für den Zugriff auf das Root-Dateisystem zu erhalten. Dann wechselt der Kernel zur Verwendung des eigentlichen Root-Dateisystems und gibt den Speicher frei, der vom /initrd-Speicherabbild verwendet wird.Dieser clevere Ansatz ermöglicht es, ein Kernel-Image mit einem auf jedes System zugeschnittenen Gerätetreibersatz bereitzustellen, ohne Systemspeicher zu verschwenden, um Gerätetreiber- und Dateisystem-Handler-Code zu speichern, der nie verwendet wird.
Verwenden Sie die folgende Technik, um eine benutzerdefinierte /initrd-Datei mit Multipath-Unterstützung zu erstellen:
1. Erstellen Sie eine neue initrd-Datei einschließlich Multipath, Device-Mapper-Multipath und HBA-Treiber:
# /sbin/mkinitrd -v /root/initrd-mp.img 2.6.18-prep --with=multipath --with=dm-multipath --with=lpfc --omit-raid-modules
Um dasselbe unter CentOS/RHEL 6 und 7 zu tun, werfen Sie bitte einen Blick auf den folgenden Beitrag.
So erstellen Sie das „initramfs“ mit Multipath in CentOS/RHEL 6 und 7 neu2. Überprüfen Sie die Datei /etc/mdadm.conf ist für das RAID-Gerät konfiguriert:
# /bin/cat /etc/mdadm.conf DEVICE /dev/mapper/* ARRAY /dev/md0 uuid=ccfe8a98:ea584ff2:2fad9d51:305ea2da devices=/dev/mapper/ocrp1,/dev/mapper/ocrmirrorp1 level=raid1
3. Kopieren Sie das neue Ramdisk-Image in den vom Bootloader erwarteten Boot-Speicherort:
# /bin/cp /root/initrd-mp.img /boot/
4. Fügen Sie der Bootloader-Konfigurationsdatei /boot/grub/grub.conf einen neuen Eintrag hinzu, um das neue Ramdisk-Image zu verwenden:
title MDADM-MP root (hd0,0) kernel /vmlinuz-2.6.18-8.el5 ro root=/dev/VolGroup00/LogVol00 rhgb quiet initrd /initrd-mp.imgHinweis :Ändern Sie die Beispiel-GRUB-Stanza entsprechend. Ihre Kernel-Version und Ihr Root-Gerät werden sich sicherlich von diesem Beispiel unterscheiden.
Wenn Sie CentOS/RHEL 7 und grub2 verwenden, finden Sie die genauen Schritte im folgenden Beitrag.
CentOS / RHEL 7:So ändern Sie GRUB2-Argumente mit grubby5. Starten Sie Ihr System neu und wählen Sie im GRUB-Menü den Eintrag MDADM-MP.
Hinweis :Wenn Sie die verwendeten Multipath-Geräte immer noch nicht sehen, müssen Sie ein Startskript hinzufügen, um mdadm als letzten Boot-Schritt auszuführen. Eine Möglichkeit besteht darin, den erforderlichen Befehl zu /etc/rc.local hinzuzufügen, wenn Sie kein vollständiges /etc/init.d/-Dienstskript schreiben möchten.