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