Software RAID1 auf einem laufenden System (Inkl. GRUB Konfiguration) (Debian Etch) einrichten

Um sicher zu gehen, dass keine Reste von vorhergehenden RAID Installationen auf /dev/sdb zu finden sind, lassen wir folgende Befehle laufen:

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

Wenn es keine Reste von vorhergehenden RAID Installationen gibt, wird jeder der obrigen Befehle einen Fehler wie diesen anzeigen (von dem man sich aber nicht beunruhigen lassen muss):

server1:~# mdadm –zero-superblock /dev/sdb1
mdadm: Unrecognised md component device – /dev/sdb1
server1:~#

Sonst werden die Befehle gar nichts anzeigen.

4 Unsere RAID Arrays erstellen

Lass uns nun unsere RAID arrays erstellen /dev/md0, /dev/md1 und /dev/md2. /dev/sdb1 wird zu /dev/md0 hinzugefügt, /dev/sdb2 zu /dev/md1 und /dev/sdb3 zu /dev/md2. /dev/sda1, /dev/sda2 and /dev/sda3 können noch nicht gleich hinzugefügt werden (da das System derzeit auf ihnen läuft). 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 zerfallene RAID arrays hast ([_U] or [U_] bedeutet, dass ein array fehlerhaft ist während [UU] bedeutet, dass das array in Ordnung ist):

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

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

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

unused devices: <none>
server1:~#

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

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

Nun müssen wir /etc/mdadm/mdadm.conf (was keinerlei Informationen über unsere neuen RAID arrays beinhaltet) der neuen Situation anpassen:

cp /etc/mdadm/mdadm.conf /etc/mdadm/mdadm.conf_orig
mdadm –examine –scan >> /etc/mdadm/mdadm.conf

Den Inhalt der Datei anzeigen:

cat /etc/mdadm/mdadm.conf

Am Ende der Datei solltest Du nun Angaben über unsere drei (fehlerhaften) RAID arrays sehen:

# mdadm.conf
#
# Please refer to mdadm.conf(5) for information about this file.
#

# by default, scan all partitions (/proc/partitions) for MD superblocks.
# alternatively, specify devices to scan, using wildcards if desired.
DEVICE partitions

# auto-create devices with Debian standard permissions
CREATE owner=root group=disk mode=0660 auto=yes

# automatically tag new arrays as belonging to the local system
HOMEHOST <system>

# instruct the monitoring daemon where to send mail alerts
MAILADDR root

# This file was auto-generated on Mon, 26 Nov 2007 21:22:04 +0100
# by mkconf $Id: mkconf 261 2006-11-09 13:32:35Z madduck $
ARRAY /dev/md0 level=raid1 num-devices=2 UUID=72d23d35:35d103e3:01b5209e:be9ff10a
ARRAY /dev/md1 level=raid1 num-devices=2 UUID=a50c4299:9e19f9e4:01b5209e:be9ff10a
ARRAY /dev/md2 level=raid1 num-devices=2 UUID=99fee3a5:ae381162:01b5209e:be9ff10a

5 Das System An RAID1 Anpassen

Lass uns nun /dev/md0 und /dev/md2 mounten (wir müssen das /dev/md1 nicht mounten):

mkdir /mnt/md0
mkdir /mnt/md2

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

Du findest nun beide arrays in der Ausgabe von

mount

server1:~# mount
/dev/sda3 on / type ext3 (rw,errors=remount-ro)
tmpfs on /lib/init/rw type tmpfs (rw,nosuid,mode=0755)
proc on /proc type proc (rw,noexec,nosuid,nodev)
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
udev on /dev type tmpfs (rw,mode=0755)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=620)
/dev/sda1 on /boot type ext3 (rw)
/dev/md0 on /mnt/md0 type ext3 (rw)
/dev/md2 on /mnt/md2 type ext3 (rw)
server1:~#

Als Nächstes bearbeiten wir /etc/fstab. Ersetze /dev/sda1 mit /dev/md0, /dev/sda2 mit /dev/md1, und /dev/sda3 mit /dev/md2 so dass die Datei wie folgt aussieht:

vi /etc/fstab

# /etc/fstab: static file system information.
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
proc            /proc           proc    defaults        0       0
/dev/md2       /               ext3    defaults,errors=remount-ro 0       1
/dev/md0       /boot           ext3    defaults        0       2
/dev/md1       none            swap    sw              0       0
/dev/hdc        /media/cdrom0   udf,iso9660 user,noauto     0       0
/dev/fd0        /media/floppy0  auto    rw,user,noauto  0       0

Erstetze nun /dev/sda1 mit /dev/md0 und /dev/sda3 mit /dev/md2 in /etc/mtab:

vi /etc/mtab

/dev/md2 / ext3 rw,errors=remount-ro 0 0
tmpfs /lib/init/rw tmpfs rw,nosuid,mode=0755 0 0
proc /proc proc rw,noexec,nosuid,nodev 0 0
sysfs /sys sysfs rw,noexec,nosuid,nodev 0 0
udev /dev tmpfs rw,mode=0755 0 0
tmpfs /dev/shm tmpfs rw,nosuid,nodev 0 0
devpts /dev/pts devpts rw,noexec,nosuid,gid=5,mode=620 0 0
/dev/md0 /boot ext3 rw 0 0

Nun hoch zum GRUB Boot loader. Öffne /boot/grub/menu.lst und füge fallback 1 gleich nach default 0 hinzu:

vi /boot/grub/menu.lst

[...]
default         0
fallback        1
[...]

Das bewirkt, dass wenn der erste Kernel ausfällt, (beginnend mit 0, also ist der erste Kernel 0) Kernel #2 hochgefahren wird.

Gehe in der gleichen Datei bis ans Ende, wo Du einige Kernelzeilen finden solltest. Kopiere die erste von ihnen und füge sie vor der ersten vorhandenen Zeile ein; ersetze root=/dev/sda3 mit root=/dev/md2 und root (hd0,0) mit root (hd1,0):

[...]
## ## End Default Options ##

title           Debian GNU/Linux, kernel 2.6.18-4-486 RAID (hd1)
root            (hd1,0)
kernel          /vmlinuz-2.6.18-4-486 root=/dev/md2 ro
initrd          /initrd.img-2.6.18-4-486
savedefault

title           Debian GNU/Linux, kernel 2.6.18-4-486
root            (hd0,0)
kernel          /vmlinuz-2.6.18-4-486 root=/dev/sda3 ro
initrd          /initrd.img-2.6.18-4-486
savedefault

title           Debian GNU/Linux, kernel 2.6.18-4-486 (single-user mode)
root            (hd0,0)
kernel          /vmlinuz-2.6.18-4-486 root=/dev/sda3 ro single
initrd          /initrd.img-2.6.18-4-486
savedefault

### END DEBIAN AUTOMAGIC KERNELS LIST

root (hd1,0) bezieht sich auf /dev/sdb die bereits ein Teil unserer RAID arrays ist. Wir werden das System in ein paar Minuten neu starten; das System wird dann versuchen von unseren (immer noch fehlerhaften) RAID arrays hochzufahren; wenn es fehlschlägt, wird es von /dev/sda (-> fallback 1) hochfahren.

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

update-initramfs -u

Nun kopieren wir die Inhalte von /dev/sda1 und /dev/sda3 zu /dev/md0 und /dev/md2 (die auf /mnt/md0 und /mnt/md2 gemountet 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

IN der GRUB Kommandozeile, gib 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)“… 15 sectors are embedded.
succeeded
Running „install /grub/stage1 (hd0) (hd0)1+15 p (hd0,0)/grub/stage2 /grub/menu.lst“… 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)“… 15 sectors are embedded.
succeeded
Running „install /grub/stage1 (hd1) (hd1)1+15 p (hd1,0)/grub/stage2 /grub/menu.lst“… succeeded
Done.

grub>

quit

Zurück in der normalen Kommandozeile. Wir starten das System neu und hoffen, dass es gut von unseren RAID arrays hochfährt:

reboot

Das könnte dich auch interessieren …