mdadm raid 1 grub nur auf sda

7

Ich habe gerade die Einrichtung eines CentOS 6.3 64-Bit-Servers mit mdadm abgeschlossen, aber eine Glühbirne ging an und ich erkannte, dass grub nur auf dem ersten Laufwerk installiert werden würde, das ungefähr so ​​viel genutzt wird, und einem Aschenbecher auf einem Motorrad.

Ich habe nachgesehen, um meinen Verdacht zu bestätigen:

grub> find /grub/stage1
find /grub/stage1
 (hd0,0)

Also habe ich meine Gerätekarte so aktualisiert, dass sie wie folgt aussieht:

(fd0)   /dev/fd0
(hd0)   /dev/sda
(hd1)   /dev/sdb

(Beachten Sie, dass der Eintrag (hd1) von mir hinzugefügt wurde

Also habe ich versucht, grub auf / dev / sdb zu installieren

Und ich bekomme:

grub> root (hd1,0)
root (hd1,0)
 Filesystem type is ext2fs, partition type 0x83
grub> setup (hd1)
setup (hd1)
 Checking if "/boot/grub/stage1" exists... no
 Checking if "/grub/stage1" exists... no

Error 15t: File not found

Also habe ich ein bisschen gegoogelt (Leider hat Google gerade gute Arbeit geleistet und Hunderte von Grub-Installationsbeispielen aufgegriffen, die hier nicht helfen).

Nachdem ich ein paar Hinweise gefunden hatte, versuchte ich:

# grub-install --recheck /dev/sdb

Probing devices to guess BIOS drives. This may take a long time.
Installation finished. No error reported.
This is the contents of the device map /boot/grub/device.map.
Check if this is correct or not. If any of the lines is incorrect,
fix it and re-run the script `grub-install'.

(fd0)   /dev/fd0
(hd0)   /dev/sda
(hd1)   /dev/sdb

# grub-install /dev/sdb
Installation finished. No error reported.
This is the contents of the device map /boot/grub/device.map.
Check if this is correct or not. If any of the lines is incorrect,
fix it and re-run the script `grub-install'.

(fd0)   /dev/fd0
(hd0)   /dev/sda
(hd1)   /dev/sdb

Welche Art von schlägt vor, dass grub jetzt auch auf / dev / sdb installiert ist, aber wenn ich es mir noch einmal anschaue, bekomme ich immer noch:

grub> find /grub/stage1
find /grub/stage1
 (hd0,0)

getrennte Ausgänge für die 2 Laufwerke:

SDA

Partition Table: gpt

Number  Start   End     Size    File system  Name  Flags
 1      17.4kB  500MB   500MB   ext3         1     boot
 2      500MB   81.0GB  80.5GB               2     raid
 3      81.0GB  85.0GB  4000MB               3     raid
 4      85.0GB  3001GB  2916GB               4     raid

SDB

Partition Table: gpt

Number  Start   End     Size    File system  Name  Flags
 1      17.4kB  500MB   500MB   ext3         1
 2      500MB   81.0GB  80.5GB               2     raid
 3      81.0GB  85.0GB  4000MB               3     raid
 4      85.0GB  3001GB  2916GB               4     raid

Und mdadm mdstat:

Personalities : [raid1]
md1 : active raid1 sdb3[1] sda3[0]
      3905218 blocks super 1.1 [2/2] [UU]

md2 : active raid1 sdb4[1] sda4[0]
      2847257598 blocks super 1.1 [2/2] [UU]

md0 : active raid1 sda2[0] sdb2[1]
      78612189 blocks super 1.1 [2/2] [UU]

Kann jemand etwas Licht in die Situation bringen, fühlt es sich so an, als wäre ich im Moment zu 99% da und vermisse etwas Offensichtliches.

Vielen Dank.

Update bearbeiten:

# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/md0               74G   18G   53G  25% /
tmpfs                 580M     0  580M   0% /dev/shm
/dev/sda1             462M   98M  341M  23% /boot
xenstore              580M   64K  580M   1% /var/lib/xenstored

/ ist auf md0, das aus sda2 besteht, und sdb2 swap ist md1, was sda3 ist, und sdb3 md2 ist LVM, aber / boot ist nur auf / sda1

Ich nehme an, das ist das Problem, wäre die Auflösung, md4 zu erstellen und es sd a 1 und sd b 1 enthalten zu lassen

Vielleicht habe ich etwas durcheinander in meinem Kopf, aber ich nahm an, dass grub nicht auf einer Partition installiert war, sondern auf den ersten Blöcken des Laufwerks, dh sda oder hd0 / 1

Jede Klarstellung und Beratung wird geschätzt.

Backtogeek
quelle
1
Können Sie bestätigen, dass sda1 und sdb1 dieselben Dateien enthalten (einschließlich Kernel, initrd, Grub-Stufen usw.)?
Henry S.
Vielleicht ist die anfängliche Einrichtung auf einer einzelnen Festplatte die Ursache, ich werde den ursprünglichen Beitrag mit mehr Informationen
aktualisieren
1
IIRC-Grub würde auch von einer Partition geladen, die als Raid markiert ist. Wenn Sie also diesen md4 erstellen, bleiben die beiden Partitionen synchron. Aber ich denke, Sie müssen immer noch grub-install /dev/sdXfür die separaten Festplatten laufen . Weil es beim Booten kein md-Gerät gibt. Der Bootfloader von grub wird in den ersten Blöcken der Festplatte installiert , die späteren Phasen werden jedoch in der Partition / boot _partition gespeichert. Weil all diese ausgefallenen Menüs nicht in den Raum vor der Partitionstabelle passen.
Henry S.

Antworten:

4

Dies sollte Ihr Problem sein

root (hd1,0)
 Filesystem type is ext2fs, partition type 0x83

Führen Sie die folgenden Schritte aus:

  • Erstellen Sie die 2 / boot-Partitionen auf / dev / sda1 und / dev / sdb1 - geben Sie fd (Linux Autodetect Raid) ein - verwenden Sie Ihr Lieblingstool (fdisk, cfdisk, gparted, ...) (fd00 für GPT)
  • Denken Sie daran, das bootfähige Flag auf beiden Partitionen, sda1 und sdb1, zu aktivieren (nicht für GPT).
  • Erzwinge, dass die Festplatten ein brandneuer Überfall sind:

    mdadm --zero-superblock /dev/sda1 
    mdadm --zero-superblock /dev/sdb1
    
  • Verwenden Sie beim Erstellen der RAID-Metadaten, die Ihre / boot-Partition sein werden, die Version 0.9. Linux kann neuere Versionen nicht automatisch erkennen (ohne Ramdisk).

    mdadm --create /dev/md0 --level=1 --raid-disks=2 /dev/sda1 /dev/sdb1 --metadata=0.9
    
  • Formatieren Sie mit ext2 oder ext3

  • Installieren Sie das Linux Ihrer Wahl, OHNE das / boot zu formatieren

Nach dem ersten Start Ihrer Distribution:

  • Korrigieren Sie Ihre / etc / fstab so, dass sie auf / dev / md0 zeigt / bootet (möglicherweise ist dies nicht erforderlich).
  • Installieren Sie grub auf dem MBR mit 2 Festplatten

    # grub /dev/sda
     grub> root (hd0,0)
     grub> setup (hd0)
     grub> quit
     quit
    
    # grub /dev/sdb
     grub> root (hd1,0)
     grub> setup (hd1)
     grub> quit
     quit
    
  • Bearbeiten Sie Ihren Bootloader (Anweisungen zu Grub1)

  • Suchen Sie in der Zeile "Standard" und fügen Sie unten die Option "Fallback" hinzu

    vi /boot/grub/menu.lst
    default 0
    fallback 1
    
  • Fügen Sie Ihrem Bootloader einen weiteren Eintrag hinzu (in meinem Fall habe ich wieder grub1 gewählt, da es weniger kompliziert ist und meinen Anforderungen entspricht), wobei jeder auf die verschiedenen Boot-Partitionen verweist, die Mitglieder des Raids sind:

    title           Debian GNU/Linux, kernel 2.6.32-5-686  (default)
    root            (hd0,0)
    kernel          /vmlinuz-2.6.32-5-686 root=/dev/mapper/vg-root ro quiet
    initrd          /initrd.img-2.6.32-5-686
    
    title           Debian GNU/Linux, kernel 2.6.32-5-686  (fallback)
    root            (hd1,0)
    kernel          /vmlinuz-2.6.32-5-686 root=/dev/mapper/vg-root ro quiet
    initrd          /initrd.img-2.6.32-5-686 
    
  • Beachten Sie, dass ich in meinem Fall eine LVM-Ebene auf meinem / md-Raid habe.

Erledigt. Dies sollte ausreichen, um einen "redundanten" Bootloader zu haben.

Cameron Tacklind
quelle
1
Da / boot ziemlich statisch ist, können Sie einfach zwei Partitionen (sda1 und sdb1) erstellen und diese täglich mit rsync synchronisieren. Installieren Sie grub manuell auf beiden Festplatten und verwenden Sie den Standard- / Fallback-Trick.
2
Rsync? !! Das ist eine schreckliche Idee! Lass Raid 1 sein Ding machen! Es hört sich so an, als ob das Problem hier darin besteht, raid1 einzurichten, nachdem die Centos-Installation abgeschlossen ist. Ich habe gerade Gentoo mit RAID 1 auf der Boot-Partition eingerichtet, aber da RAID vor der Installation eingerichtet wird, sieht grub ein Gerät und Linux RAID installiert den Bootloader auf beiden Festplatten.
GeoSword
1

Ob Sie diese beiden Laufwerke einem anderen raid1-Array zuordnen möchten, liegt bei Ihnen. Dies ist eine legitime Wahl, da Sie dann grub md4direkt installieren können und die Mühe vermeiden müssen, beide Installationen manuell zu verwalten. Ich habe es geschafft ™.

Nach meiner Erfahrung ist die Gerätezuordnungsdatei weitgehend irrelevant und ihr Verhalten (wie Grub sie liest) ist bestenfalls unvorhersehbar, wenn nicht geradezu willkürlich.

Der deviceBefehl von der Madenschale ist viel zuverlässiger. Sie können die Hilfeinformationen lesen, aber die grundlegende Syntax spricht für sich:

grub> device (hd0) /dev/md4

Danach wird / dev / md4 hd0in der aktuell ausgeführten Grub-Sitzung zugeordnet, wobei die Gerätezuordnungsdatei nicht berücksichtigt wird . Von hier aus würde man wie gewohnt mit root (hd0)und fortfahren setup (hd0,x). Der Grund für die Installation auf einer Partition wird von Henry S. erläutert.

AFAIK, das einzige, was neben dem "Boot-Code" (Stufe 1), der in die ersten 512 Bytes des Laufwerks (MBR) geschrieben wird, die Anzahl der Partitionen ist, auf denen diese Stufe nach dem Menü suchen soll.

Es ist möglich, das durcheinander zu bringen. Man würde nach dem POST mit einer Eingabeaufforderung anstelle eines Menüs begrüßt, aber grub bietet Befehle zum "Initialisieren" dieses Menüs von einer anderen Partition (Datei) als der unter Installation angegebenen. Es funktioniert jedoch im Allgemeinen ohne Intervention, da das "erste Startlaufwerk" im BIOS als "hd0" erkannt wird.

Ярослав Рахматуллин
quelle