Aufsetzen von Software RAID1 auf einem bereits installierten System (inkl. GRUB Konfiguration) (Fedora 8)

Version 1.0
Author: Falko Timme


Diese Anleitung veranschaulicht, wie man Software RAID1 auf einem bereits installierten Fedora 8 System aufsetzt. Der GRUB Bootloader wird so konfiguriert, dass das System immer noch in der Lage sein wird zu starten, wenn eine der Festplatten ausfällt (ganz gleich welche).

Ich übernehme keine Garantie, dass dies auch bei Dir funktioniert!

1 Vorbemerkung

In dieser Anleitung verwende ich ein Fedora 8 System mit zwei Festplatten: /dev/sda und /dev/sdb, die gleich groß sind. /dev/sdb wird derzeit nicht verwendet, /dev/sda hat folgende Partitionen:
  • /dev/sda1: /boot partition, ext3;
  • /dev/sda2: swap;
  • /dev/sda3: / partition, ext3
Am Ende möchte ich folgende Situation vorfinden:
  • /dev/md0 (made up of /dev/sda1 and /dev/sdb1): /boot partition, ext3;
  • /dev/md1 (made up of /dev/sda2 and /dev/sdb2): swap;
  • /dev/md2 (made up of /dev/sda3 and /dev/sdb3): / partition, ext3
Dies ist die derzeitige Situation:

df -h


[root@server1 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 4.3G 2.4G 1.8G 58% /
/dev/sda1 99M 12M 83M 13% /boot
tmpfs 185M 0 185M 0% /dev/shm
[root@server1 ~]#

fdisk -l

[root@server1 ~]# fdisk -l


Disk /dev/sda: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x0007b217

Device Boot Start End Blocks Id System
/dev/sda1 * 1 13 104391 83 Linux
/dev/sda2 14 77 514080 82 Linux swap / Solaris
/dev/sda3 78 652 4618687+ 83 Linux

Disk /dev/sdb: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x00000000

Disk /dev/sdb doesn't contain a valid partition table
[root@server1 ~]#

2 Installation von mdadm

Das wichtigste Tool für das Aufsetzen von RAID ist mdadm. Wir installieren es wie folgt:

yum install mkinitrd mdadm

Danach laden wir ein paar Kernel Module (um einen Neustart zu umgehen):

modprobe linear
modprobe multipath
modprobe raid0
modprobe raid1
modprobe raid5
modprobe raid6
modprobe raid10

Führe Folgendes aus

cat /proc/mdstat

Die Ausgabe sollte wie folgt aussehen:

[root@server1 ~]# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
unused devices: <none>
[root@server1 ~]#

3 /dev/sdb vorbereiten

Um auf unserem bereits installierten System ein RAID1 array zu erstellen, müssen wir die /dev/sdb Festplatte für RAID1 vorbereiten, dann die Inhalte unserer /dev/sda Festplatte darauf kopieren und /dev/sda schließlich dem RAID1 array hinzufügen.

Zuerst kopieren wir die Partitionstabelle von /dev/sda nach /dev/sdb sodass beide Festplatte genau das gleiche Layout haben:

sfdisk -d /dev/sda | sfdisk /dev/sdb

Die Ausgabe sollte wie folgt aussehen:

[root@server1 ~]# sfdisk -d /dev/sda | sfdisk /dev/sdb
Checking that no-one is using this disk right now ...
OK

Disk /dev/sdb: 652 cylinders, 255 heads, 63 sectors/track


sfdisk: ERROR: sector 0 does not have an msdos signature
/dev/sdb: unrecognized partition table type
Old situation:
No partitions found
New situation:
Units = sectors of 512 bytes, counting from 0

Device Boot Start End #sectors Id System
/dev/sdb1 * 63 208844 208782 83 Linux
/dev/sdb2 208845 1237004 1028160 82 Linux swap / Solaris
/dev/sdb3 1237005 10474379 9237375 83 Linux
/dev/sdb4 0 - 0 0 Empty
Successfully wrote the new partition table

Re-reading the partition table ...


If you created or changed a DOS partition, /dev/foo7, say, then use dd(1)
to zero the first 512 bytes: dd if=/dev/zero of=/dev/foo7 bs=512 count=1
(See fdisk(8).)
[root@server1 ~]#

Der Befehl

fdisk -l

sollte nun zeigen, dass beide Festplatten das gleiche Layout haben:

[root@server1 ~]# fdisk -l


Disk /dev/sda: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x0007b217

Device Boot Start End Blocks Id System
/dev/sda1 * 1 13 104391 83 Linux
/dev/sda2 14 77 514080 82 Linux swap / Solaris
/dev/sda3 78 652 4618687+ 83 Linux

Disk /dev/sdb: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x00000000

Device Boot Start End Blocks Id System
/dev/sdb1 * 1 13 104391 83 Linux
/dev/sdb2 14 77 514080 82 Linux swap / Solaris
/dev/sdb3 78 652 4618687+ 83 Linux
[root@server1 ~]#

Als Nächstes müssen wir den Partitionstyp unserer drei Partitionen auf /dev/sdb zu Linux raid autodetect ändern:

fdisk /dev/sdb

[root@server1 ~]# fdisk /dev/sdb


Command (m for help): <-- m
Command action
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition
l list known partition types
m print this menu
n add a new partition
o create a new empty DOS partition table
p print the partition table
q quit without saving changes
s create a new empty Sun disklabel
t change a partition's system id
u change display/entry units
v verify the partition table
w write table to disk and exit
x extra functionality (experts only)

Command (m for help): <-- t
Partition number (1-4): <-- 1
Hex code (type L to list codes): <-- L

0 Empty 1e Hidden W95 FAT1 80 Old Minix be Solaris boot
1 FAT12 24 NEC DOS 81 Minix / old Lin bf Solaris
2 XENIX root 39 Plan 9 82 Linux swap / So c1 DRDOS/sec (FAT-
3 XENIX usr 3c PartitionMagic 83 Linux c4 DRDOS/sec (FAT-
4 FAT16 <32M 40 Venix 80286 84 OS/2 hidden C: c6 DRDOS/sec (FAT-
5 Extended 41 PPC PReP Boot 85 Linux extended c7 Syrinx
6 FAT16 42 SFS 86 NTFS volume set da Non-FS data
7 HPFS/NTFS 4d QNX4.x 87 NTFS volume set db CP/M / CTOS / .
8 AIX 4e QNX4.x 2nd part 88 Linux plaintext de Dell Utility
9 AIX bootable 4f QNX4.x 3rd part 8e Linux LVM df BootIt
a OS/2 Boot Manag 50 OnTrack DM 93 Amoeba e1 DOS access
b W95 FAT32 51 OnTrack DM6 Aux 94 Amoeba BBT e3 DOS R/O
c W95 FAT32 (LBA) 52 CP/M 9f BSD/OS e4 SpeedStor
e W95 FAT16 (LBA) 53 OnTrack DM6 Aux a0 IBM Thinkpad hi eb BeOS fs
f W95 Ext'd (LBA) 54 OnTrackDM6 a5 FreeBSD ee EFI GPT
10 OPUS 55 EZ-Drive a6 OpenBSD ef EFI (FAT-12/16/
11 Hidden FAT12 56 Golden Bow a7 NeXTSTEP f0 Linux/PA-RISC b
12 Compaq diagnost 5c Priam Edisk a8 Darwin UFS f1 SpeedStor
14 Hidden FAT16 <3 61 SpeedStor a9 NetBSD f4 SpeedStor
16 Hidden FAT16 63 GNU HURD or Sys ab Darwin boot f2 DOS secondary
17 Hidden HPFS/NTF 64 Novell Netware b7 BSDI fs fd Linux raid auto
18 AST SmartSleep 65 Novell Netware b8 BSDI swap fe LANstep
1b Hidden W95 FAT3 70 DiskSecure Mult bb Boot Wizard hid ff BBT
1c Hidden W95 FAT3 75 PC/IX
Hex code (type L to list codes): <-- fd
Changed system type of partition 1 to fd (Linux raid autodetect)

Command (m for help): <-- t
Partition number (1-4): <-- 2
Hex code (type L to list codes): <-- fd
Changed system type of partition 2 to fd (Linux raid autodetect)

Command (m for help): <-- t
Partition number (1-4): <-- 3
Hex code (type L to list codes): <-- fd
Changed system type of partition 3 to fd (Linux raid autodetect)

Command (m for help): <-- w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
[root@server1 ~]#


Um sicher zu stellen, dass keine Reste von vorherigen RAID Installationen auf /dev/sdb vorhanden sind, führen wir folgende Befehle aus:

mdadm --zero-superblock /dev/sdb1
mdadm --zero-superblock /dev/sdb2
mdadm --zero-superblock /dev/sdb3

Gibt es keine Reste von vorherigen RAID Installationen, wird jeder der obigen Befehlen einen Fehler wie diesen anzeigen (worüber Du Dir aber keine Sorgen machen musst):

[root@server1 ~]# mdadm --zero-superblock /dev/sdb1
mdadm: Unrecognised md component device - /dev/sdb1
[root@server1 ~]#

Anderenfalls werden die Befehle gar nichts anzeigen.

4 Unsere RAID Arrays erstellen

Lass uns nun unsere RAID arrays /dev/md0, /dev/md1 und /dev/md2 erstellen. /dev/sdb1 wird zu /dev/md0, /dev/sdb2 zu /dev/md1 und /dev/sdb3 zu /dev/md2 hinzugefügt. /dev/sda1, /dev/sda2 und /dev/sda3 können jetzt nicht hinzugefügt werden (das das System derzeit darauf ausgeführt wird), daher verwenden wir den Platzhalter missing in den folgenden drei Befehlen:

mdadm --create /dev/md0 --level=1 --raid-disks=2 missing /dev/sdb1
mdadm --create /dev/md1 --level=1 --raid-disks=2 missing /dev/sdb2
mdadm --create /dev/md2 --level=1 --raid-disks=2 missing /dev/sdb3

Der Befehl

cat /proc/mdstat

sollte nun anzeigen, dass Du drei degraded RAID Arrays hast ([_U] oder [U_] bedeutet, dass ein Array degraded ist, während [UU] bedeutet, dass das Array in Ordnung ist):

[root@server1 ~]# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md2 : active raid1 sdb3[1]
4618560 blocks [2/1] [_U]

md1 : active raid1 sdb2[1]
513984 blocks [2/1] [_U]

md0 : active raid1 sdb1[1]
104320 blocks [2/1] [_U]

unused devices: <none>
[root@server1 ~]#

Als Nächstes legen wir auf unseren RAID Arrays Dateisysteme an (ext3 auf /dev/md0 und /dev/md2 und swap auf /dev/md1):

mkfs.ext3 /dev/md0
mkswap /dev/md1
mkfs.ext3 /dev/md2

Als Nächstes erstellen wir /etc/mdadm.conf wie folgt:

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

Lass Dir die Inhalte der Datei anzeigen:

cat /etc/mdadm.conf

In der Datei müsstest Du nun Angaben über die drei (degraded) RAID Arrays sehen:
ARRAY /dev/md0 level=raid1 num-devices=2 UUID=2848a3f5:cd1c26b6:e762ed83:696752f9
ARRAY /dev/md1 level=raid1 num-devices=2 UUID=8a004bac:92261691:227767de:4adf6592 ARRAY /dev/md2 level=raid1 num-devices=2 UUID=939f1c71:be9c10fd:d9e5f8c6:a46bcd49

5 Das System an RAID1 anpassen

Lass uns nun /dev/md0 und /dev/md2 einhängen (wir müssen das Swap Array /dev/md1 nicht einhängen):

mkdir /mnt/md0
mkdir /mnt/md2

mount /dev/md0 /mnt/md0
mount /dev/md2 /mnt/md2

Beide Arrays müsstest Du nun in der Ausgabe des folgenden Befehls sehen

mount


[root@server1 ~]# mount
/dev/sda3 on / type ext3 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
/dev/sda1 on /boot type ext3 (rw)
tmpfs on /dev/shm type tmpfs (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
/dev/md0 on /mnt/md0 type ext3 (rw)
/dev/md2 on /mnt/md2 type ext3 (rw)
[root@server1 ~]#

Als Nächstes bearbeiten wir /etc/fstab. Ersetze LABEL=/boot mit /dev/md0, LABEL=SWAP-sda2 mit /dev/md1 und LABEL=/ mit /dev/md2 sodass die Datei wie folgt aussieht:

vi /etc/fstab


/dev/md2                 /                       ext3    defaults        1 1
/dev/md0 /boot ext3 defaults 1 2 tmpfs /dev/shm tmpfs defaults 0 0 devpts /dev/pts devpts gid=5,mode=620 0 0 sysfs /sys sysfs defaults 0 0 proc /proc proc defaults 0 0 /dev/md1 swap swap defaults 0 0
Ersetze nun LABEL=/boot mit /dev/md0 und LABEL=/ mit /dev/md2 in /etc/mtab:

vi /etc/mtab


/dev/md2 / ext3 rw 0 0
proc /proc proc rw 0 0 sysfs /sys sysfs rw 0 0 devpts /dev/pts devpts rw,gid=5,mode=620 0 0 /dev/md0 /boot ext3 rw 0 0 tmpfs /dev/shm tmpfs rw 0 0 none /proc/sys/fs/binfmt_misc binfmt_misc rw 0 0 sunrpc /var/lib/nfs/rpc_pipefs rpc_pipefs rw 0 0
Weiter mit dem GRUB Boot loader. Öffne /boot/grub/menu.lst und fügen fallback=1 direkt nach default=0 an:

vi /boot/grub/menu.lst


[...]
default=0 fallback=1 [...]
Das hat zur Folge, dass wenn der erste Kernel (das Zählen beginnt bei 0, also ist der erste Kernel 0) ausfällt, Kernel #2 gestartet wird.

Begib Dich ans Ende der (gleichen) Datei, dort siehst Du einige Kernel Zeilen. Kopiere den ersten Bereich und füge diese Kopie am Anfang ein; ersetze root=LABEL=/ mit root=/dev/md2 und root (hd0,0) mit root (hd1,0):
[...]
title Fedora (2.6.23.1-42.fc8) root (hd1,0) kernel /vmlinuz-2.6.23.1-42.fc8 ro root=/dev/md2 rhgb quiet initrd /initrd-2.6.23.1-42.fc8.img title Fedora (2.6.23.1-42.fc8) root (hd0,0) kernel /vmlinuz-2.6.23.1-42.fc8 ro root=LABEL=/ rhgb quiet initrd /initrd-2.6.23.1-42.fc8.img
Die ganze Datei sollte in etwa so aussehen:
# grub.conf generated by anaconda
# # Note that you do not have to rerun grub after making changes to this file # NOTICE: You have a /boot partition. This means that # all kernel and initrd paths are relative to /boot/, eg. # root (hd0,0) # kernel /vmlinuz-version ro root=/dev/sda3 # initrd /initrd-version.img #boot=/dev/sda default=0 fallback=1 timeout=5 splashimage=(hd0,0)/grub/splash.xpm.gz hiddenmenu title Fedora (2.6.23.1-42.fc8) root (hd1,0) kernel /vmlinuz-2.6.23.1-42.fc8 ro root=/dev/md2 rhgb quiet initrd /initrd-2.6.23.1-42.fc8.img title Fedora (2.6.23.1-42.fc8) root (hd0,0) kernel /vmlinuz-2.6.23.1-42.fc8 ro root=LABEL=/ rhgb quiet initrd /initrd-2.6.23.1-42.fc8.img
root (hd1,0) verweist auf /dev/sdb was bereits Teil unseres RAID Arrays ist. In wenigen Minuten werden wir unser System neu starten; das System wird dann versuchen von unseren (immer noch degraded) RAID Arrays zu starten; wenn dies fehlschlägt, wird es von /dev/sda (-> fallback 1) starten.

Als Nächstes passen wir unsere Ramdisk der neuen Situation an:

mv /boot/initrd-`uname -r`.img /boot/initrd-`uname -r`.img_orig
mkinitrd /boot/initrd-`uname -r`.img `uname -r`

Nun kopieren wir die Inhalte von /dev/sda1 und /dev/sda3 nach /dev/md0 und /dev/md2 (die auf /mnt/md0 und /mnt/md2 eingehängt sind):

cp -dpRx / /mnt/md2


cd /boot
cp -dpRx . /mnt/md0

6 GRUB (Teil 1) vorbereiten

Danach müssen wir den GRUB Bootloader auf der zweiten Festplatte /dev/sdb installieren:

grub

Gib in die GRUB Kommandozeile folgende Befehle ein:

root (hd0,0)


grub> root (hd0,0)
Filesystem type is ext2fs, partition type 0x83

grub>

setup (hd0)


grub> setup (hd0)
Checking if "/boot/grub/stage1" exists... no
Checking if "/grub/stage1" exists... yes
Checking if "/grub/stage2" exists... yes
Checking if "/grub/e2fs_stage1_5" exists... yes
Running "embed /grub/e2fs_stage1_5 (hd0)"... 16 sectors are embedded.
succeeded
Running "install /grub/stage1 (hd0) (hd0)1+16 p (hd0,0)/grub/stage2 /grub/grub.conf"... succeeded
Done.

grub>

root (hd1,0)


grub> root (hd1,0)
Filesystem type is ext2fs, partition type 0xfd

grub>

setup (hd1)


grub> setup (hd1)
Checking if "/boot/grub/stage1" exists... no
Checking if "/grub/stage1" exists... yes
Checking if "/grub/stage2" exists... yes
Checking if "/grub/e2fs_stage1_5" exists... yes
Running "embed /grub/e2fs_stage1_5 (hd1)"... 16 sectors are embedded.
succeeded
Running "install /grub/stage1 (hd1) (hd1)1+16 p (hd1,0)/grub/stage2 /grub/grub.conf"... succeeded
Done.

grub>

quit

Wieder zurück in der normalen Kommandozeile, starten wir das System neu und hoffen, dass es ohne Fehler von unseren RAID arrays startet:

reboot


7 /dev/sda vorbereiten

Wenn alles gut geklappt hat, solltest Du nun /dev/md0 und /dev/md2 in der Ausgabe von Folgendem sehen

df -h


[root@server1 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/md2 4.4G 2.4G 1.8G 58% /
/dev/md0 99M 15M 80M 16% /boot
tmpfs 185M 0 185M 0% /dev/shm
[root@server1 ~]#

Die Ausgabe von

cat /proc/mdstat

sollte wie folgt sein:

[root@server1 ~]# cat /proc/mdstat
Personalities : [raid1] [raid6] [raid5] [raid4]
md0 : active raid1 sdb1[1]
104320 blocks [2/1] [_U]

md1 : active raid1 sdb2[1]
513984 blocks [2/1] [_U]

md2 : active raid1 sdb3[1]
4618560 blocks [2/1] [_U]

unused devices: <none>
[root@server1 ~]#

Nun müssen wir auch den Partitionstyp unserer drei Partitionen auf /dev/sda zu Linux raid autodetect ändern:

fdisk /dev/sda

[root@server1 ~]# fdisk /dev/sda


Command (m for help): <-- t
Partition number (1-4): <-- 1
Hex code (type L to list codes): <-- fd
Changed system type of partition 1 to fd (Linux raid autodetect)

Command (m for help): <-- t
Partition number (1-4): <-- 2
Hex code (type L to list codes): <-- fd
Changed system type of partition 2 to fd (Linux raid autodetect)

Command (m for help): <-- t
Partition number (1-4): <-- 3
Hex code (type L to list codes): <-- fd
Changed system type of partition 3 to fd (Linux raid autodetect)

Command (m for help): <-- w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
[root@server1 ~]#

Nun können wir /dev/sda1, /dev/sda2 und /dev/sda3 den entsprechenden RAID arrays hinzufügen:

mdadm --add /dev/md0 /dev/sda1
mdadm --add /dev/md1 /dev/sda2
mdadm --add /dev/md2 /dev/sda3

Sieh Dir Folgendes an

cat /proc/mdstat

... Du solltst feststellen, dass die RAID arrays synchronisiert werden:

[root@server1 ~]# cat /proc/mdstat
Personalities : [raid1] [raid6] [raid5] [raid4]
md0 : active raid1 sda1[0] sdb1[1]
104320 blocks [2/2] [UU]

md1 : active raid1 sda2[0] sdb2[1]
513984 blocks [2/2] [UU]

md2 : active raid1 sda3[2] sdb3[1]
4618560 blocks [2/1] [_U]
[=====>...............] recovery = 29.9% (1384256/4618560) finish=2.3min speed=22626K/sec

unused devices: <none>
[root@server1 ~]#

(Du kannst Folgendes ausführen

watch cat /proc/mdstat

um eine aktuelle Ausgabe des Prozesses zu erhalten. Um watch zu verlassen, drücke STRG+C.)

Warte bis die Synchronisation abgeschlossen ist (die Ausgabe sollte dann wie folgt aussehen:

[root@server1 ~]# cat /proc/mdstat
Personalities : [raid1] [raid6] [raid5] [raid4]
md0 : active raid1 sda1[0] sdb1[1]
104320 blocks [2/2] [UU]

md1 : active raid1 sda2[0] sdb2[1]
513984 blocks [2/2] [UU]

md2 : active raid1 sda3[0] sdb3[1]
4618560 blocks [2/2] [UU]

unused devices: <none>
[root@server1 ~]#

).

Passe dann /etc/mdadm.conf der neuen Situation an:

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

/etc/mdadm.conf sollte nun etwas so aussehen:

cat /etc/mdadm.conf


ARRAY /dev/md0 level=raid1 num-devices=2 UUID=2848a3f5:cd1c26b6:e762ed83:696752f9
ARRAY /dev/md1 level=raid1 num-devices=2 UUID=8a004bac:92261691:227767de:4adf6592 ARRAY /dev/md2 level=raid1 num-devices=2 UUID=939f1c71:be9c10fd:d9e5f8c6:a46bcd49

8 GRUB (Teil 2) vorbereiten

Wir haben es fast geschafft. Jetzt müssen wir erneut /boot/grub/menu.lst bearbeiten. Momentan ist es so konfiguriert, von /dev/sdb (hd1,0) aus zu starten. Wir möchten aber immer noch, dass das System startet, falls /dev/sdb ausfällt. Daher kopieren wir den ersten Kernel Bereich (der hd1 beinhaltet), fügen ihn unten ein und ersetzen hd1 mit hd0. Außerdem kommentieren wir alle anderen Kernel Zeilen aus, sodass es wie folgt aussieht:

vi /boot/grub/menu.lst


# grub.conf generated by anaconda
# # Note that you do not have to rerun grub after making changes to this file # NOTICE: You have a /boot partition. This means that # all kernel and initrd paths are relative to /boot/, eg. # root (hd0,0) # kernel /vmlinuz-version ro root=/dev/sda3 # initrd /initrd-version.img #boot=/dev/sda default=0 fallback=1 timeout=5 splashimage=(hd0,0)/grub/splash.xpm.gz hiddenmenu title Fedora (2.6.23.1-42.fc8) root (hd1,0) kernel /vmlinuz-2.6.23.1-42.fc8 ro root=/dev/md2 rhgb quiet initrd /initrd-2.6.23.1-42.fc8.img title Fedora (2.6.23.1-42.fc8) root (hd0,0) kernel /vmlinuz-2.6.23.1-42.fc8 ro root=/dev/md2 rhgb quiet initrd /initrd-2.6.23.1-42.fc8.img #title Fedora (2.6.23.1-42.fc8) # root (hd0,0) # kernel /vmlinuz-2.6.23.1-42.fc8 ro root=LABEL=/ rhgb quiet # initrd /initrd-2.6.23.1-42.fc8.img
Aktualisiere danach Deine Ramdisk:

mv /boot/initrd-`uname -r`.img /boot/initrd-`uname -r`.img_orig2
mkinitrd /boot/initrd-`uname -r`.img `uname -r`

... und starte das System neu:

reboot

Es sollte ohne Probleme starten.

Das war's - Du hast auf Deinem Fedora 8 System erfolgreich Software RAID1 aufgesetzt!

9 Testen

Lass uns nun das Ausfallen der Festplatte simulieren. Es ist egal ob Du /dev/sda oder /dev/sdb auswählst. In diesem Beispiel gehe ich davon aus, dass /dev/sdb ausgefallen ist.

Um das Ausfallen der Festplatte zu simulieren, kannst Du das System entweder runter fahren und /dev/sdb vom System entfernen oder Du entfernst es wie folgt:

mdadm --manage /dev/md0 --fail /dev/sdb1
mdadm --manage /dev/md1 --fail /dev/sdb2
mdadm --manage /dev/md2 --fail /dev/sdb3

mdadm --manage /dev/md0 --remove /dev/sdb1
mdadm --manage /dev/md1 --remove /dev/sdb2
mdadm --manage /dev/md2 --remove /dev/sdb3

Fahre das System runter:

shutdown -h now

Füge dann eine neue /dev/sdb Festplatte hinzu (wenn Du einen Fehler von /dev/sda simulierst, solltest Du nun /dev/sdb anstelle von /dev/sda verwenden und die neue Festplatte /dev/sdb hinzufügen!) und starte das System. Es sollte immer noch ohne Probleme starten.

Führe nun Folgendes aus

cat /proc/mdstat

und Du stellst fest, dass wir ein degraded array haben:

[root@server1 ~]# cat /proc/mdstat
Personalities : [raid1] [raid6] [raid5] [raid4]
md0 : active raid1 sda1[0]
104320 blocks [2/1] [U_]

md1 : active raid1 sda2[0]
513984 blocks [2/1] [U_]

md2 : active raid1 sda3[0]
4618560 blocks [2/1] [U_]

unused devices: <none>
[root@server1 ~]#

Die Ausgabe von

fdisk -l

sollte wie folgt aussehen:

[root@server1 ~]# fdisk -l


Disk /dev/sda: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x0007b217

Device Boot Start End Blocks Id System
/dev/sda1 * 1 13 104391 fd Linux raid autodetect
/dev/sda2 14 77 514080 fd Linux raid autodetect
/dev/sda3 78 652 4618687+ fd Linux raid autodetect

Disk /dev/sdb: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x00000000

Disk /dev/sdb doesn't contain a valid partition table


Disk /dev/md2: 4729 MB, 4729405440 bytes
2 heads, 4 sectors/track, 1154640 cylinders
Units = cylinders of 8 * 512 = 4096 bytes
Disk identifier: 0x00000000

Disk /dev/md2 doesn't contain a valid partition table


Disk /dev/md1: 526 MB, 526319616 bytes
2 heads, 4 sectors/track, 128496 cylinders
Units = cylinders of 8 * 512 = 4096 bytes
Disk identifier: 0x00000000

Disk /dev/md1 doesn't contain a valid partition table


Disk /dev/md0: 106 MB, 106823680 bytes
2 heads, 4 sectors/track, 26080 cylinders
Units = cylinders of 8 * 512 = 4096 bytes
Disk identifier: 0x00000000

Disk /dev/md0 doesn't contain a valid partition table
[root@server1 ~]#

Nun kopieren wir die Partitionstabelle von /dev/sda nach /dev/sdb:

sfdisk -d /dev/sda | sfdisk /dev/sdb

(Wenn Du eine Fehlermeldung erhältst, kannst Du die --force Option versuchen:

sfdisk -d /dev/sda | sfdisk --force /dev/sdb

)

[root@server1 ~]# sfdisk -d /dev/sda | sfdisk /dev/sdb
Checking that no-one is using this disk right now ...
OK

Disk /dev/sdb: 652 cylinders, 255 heads, 63 sectors/track


sfdisk: ERROR: sector 0 does not have an msdos signature
/dev/sdb: unrecognized partition table type
Old situation:
No partitions found
New situation:
Units = sectors of 512 bytes, counting from 0

Device Boot Start End #sectors Id System
/dev/sdb1 * 63 208844 208782 fd Linux raid autodetect
/dev/sdb2 208845 1237004 1028160 fd Linux raid autodetect
/dev/sdb3 1237005 10474379 9237375 fd Linux raid autodetect
/dev/sdb4 0 - 0 0 Empty
Successfully wrote the new partition table

Re-reading the partition table ...


If you created or changed a DOS partition, /dev/foo7, say, then use dd(1)
to zero the first 512 bytes: dd if=/dev/zero of=/dev/foo7 bs=512 count=1
(See fdisk(8).)
[root@server1 ~]#

Danach entfernen wir alle Reste eines vorherigen RAID arrays von /dev/sdb...

mdadm --zero-superblock /dev/sdb1
mdadm --zero-superblock /dev/sdb2
mdadm --zero-superblock /dev/sdb3

... und fügen /dev/sdb dem RAID array hinzu:

mdadm -a /dev/md0 /dev/sdb1
mdadm -a /dev/md1 /dev/sdb2
mdadm -a /dev/md2 /dev/sdb3

Sieh Dir nun Folgendes an

cat /proc/mdstat


[root@server1 ~]# cat /proc/mdstat
Personalities : [raid1] [raid6] [raid5] [raid4]
md0 : active raid1 sdb1[1] sda1[0]
104320 blocks [2/2] [UU]

md1 : active raid1 sdb2[1] sda2[0]
513984 blocks [2/2] [UU]

md2 : active raid1 sdb3[2] sda3[0]
4618560 blocks [2/1] [U_]
[===>.................] recovery = 15.4% (715584/4618560) finish=4.9min speed=13222K/sec

unused devices: <none>
[root@server1 ~]#

Warte bis die Synchronisation abgeschlossen ist:

[root@server1 ~]# cat /proc/mdstat
Personalities : [raid1] [raid6] [raid5] [raid4]
md0 : active raid1 sdb1[1] sda1[0]
104320 blocks [2/2] [UU]

md1 : active raid1 sdb2[1] sda2[0]
513984 blocks [2/2] [UU]

md2 : active raid1 sdb3[1] sda3[0]
4618560 blocks [2/2] [UU]

unused devices: <none>
[root@server1 ~]#

Führe dann Folgendes aus

grub

und installiere den Bootloader auf beiden Festplatten:

root (hd0,0)
setup (hd0)
root (hd1,0)
setup (hd1)
quit

Das war's. Du hast gerade eine fehlerhafte Festplatte in Deinem RAID1 array ersetzt.

10 Links