| Wie stellt man eine Linuxinstallation auf RAID1 um? |
|
|
|
|
Der Einsatz von RAID1 hat gewisse Vorteile:
1) Ausfallsicherheit: Wenn eine Platte ausfällt läuft trotzdem alles weiter
2) Nach einem Plattenausfall erhält der Admin eine eMail und kann die defekte Platte austauschen und wieder das RAID1 mit 2 Platten versehen
3) Das Lesen von Daten von den 2 Platten ist schneller als wenn man nur eine Platte hat
Man kann sich eine RAID Hardwarekarte kaufen oder ein RAID mit Software betreiben. Gute RAID Karten sind zeimlich teuer - das SW RAID dagegen ist im Linux enthalten.
Auf den folgenden Seiten habe ich an einem einfachen Beispiel beschrieben, was man alles machen muss, um eine existierende openSuSE 11.2 Linux Installation so umzukonfigurieren, dass man ein RAID1 benutzt. Als wesentliche Vorlage für diese Anleitung habe ich diesen Wiki-Beitrag genommen. Weitere Informationen habe ich aus diesem Beitrag, diesem Beitrag sowie diesem Beitrag entnommen. Hilfreich war auch dieser Forumsthread , in dem mir bei meinenen Problemen geholfen wurde.
Damit ein raid1 genutzt werden kann sind ein paar Voraussetzungen notwendig:
1) Es müssen zwei Platten existieren, die möglichst identisch vom Typ und der Größe sein sollten. Bei mir sieht es z.B. so aus:
fdisk -l
Disk /dev/sda: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Disk identifier: 0x00033bcd Device Boot Start End Blocks Id System /dev/sda1 1 144 1156648+ 82 Linux swap / Solaris /dev/sda2 * 145 797 5245222+ 83 Linux /dev/sda3 798 1044 1984027+ 83 Linux Disk /dev/sdb: 8589 MB, 8589934592 bytes 255 heads, 63 sectors/track, 1044 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Disk identifier: 0x00000000 Disk /dev/sdb doesn't contain a valid partition table
df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 5.0G 1.1G 3.7G 23% / udev 377M 168K 377M 1% /dev /dev/sda3 1.9G 35M 1.8G 2% /home
Es gibt also 3 Partitionen:
1) /dev/sda1 - Swap- swap
2) /dev/sda2 - root Filesystem (/) - ext4
3) /dev/sda3 - home Filesystem (/home) - ext4
Diese Info sollte man sich gut aufschreiben und immer parat haben, denn sie wird im Folgenden immer wieder benötigt werden.
2) Es muss das raid1 module geladen sein. Das kann man prüfen. Es sollte
lsmod | grep raid
raid1 25696 0
als Ergebis kommen. Falls nicht muss in in /etc/sysconfig/kernel in der Zeile INITRD_MODULES am Ende noch raid1 eingetragen werden. Danach mkinitrd eingegeben und nach dem nächsten Restartmuss das Modul geladen.
Nun müssen die neuen RAID Partitionen angelegt werden, d.h. es werden sämtliche Partitionsinformationen von /dev/sda nach /dev/sdb kopiert.:
sfdisk -d /dev/sda | sfdisk /dev/sdb
Danach bekommt man mit
fdisk -l
Disk /dev/sda: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Disk identifier: 0x00033bcd Device Boot Start End Blocks Id System /dev/sda1 1 144 1156648+ 82 Linux swap / Solaris /dev/sda2 * 145 797 5245222+ 83 Linux /dev/sda3 798 1044 1984027+ 83 Linux Disk /dev/sdb: 8589 MB, 8589934592 bytes 255 heads, 63 sectors/track, 1044 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Disk identifier: 0x00000000 Device Boot Start End Blocks Id System /dev/sdb1 1 144 1156648+ 82 Linux swap / Solaris /dev/sdb2 * 145 797 5245222+ 83 Linux /dev/sdb3 798 1044 1984027+ 83 Linux.
d.h. beide Disks haben jetzt dasselbe Partitionslayout.
Jetzt müssen alle Partitions auf /dev/sdb als RAIDpartitions gekennzeichnet werden. (Die Nummern 1 2 3 bezeichnen die Partitionen, die geändert werden sollen)
for i in 1 2 3; do sfdisk --change-id /dev/sdb $i fd; done; sfdisk -R /dev/sdb
und die Kontrolle
fdisk -l
Disk /dev/sda: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Disk identifier: 0x00033bcd Device Boot Start End Blocks Id System /dev/sda1 1 144 1156648+ 82 Linux swap / Solaris /dev/sda2 * 145 797 5245222+ 83 Linux /dev/sda3 798 1044 1984027+ 83 Linux Disk /dev/sdb: 8589 MB, 8589934592 bytes 255 heads, 63 sectors/track, 1044 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Disk identifier: 0x00000000 Device Boot Start End Blocks Id System /dev/sdb1 1 144 1156648+ fd Linux raid autodetect /dev/sdb2 * 145 797 5245222+ fd Linux raid autodetect /dev/sdb3 798 1044 1984027+ fd Linux raid autodetect
Nun müssen die RAIDPartitionen angelegt werden.
for i in 1 2 3; do mdadm --create /dev/md$i --level=1 --raid-disks=2 missing /dev/sdb$i; done
mdadm: array /dev/md1started
mdadm: array /dev/md2 started
mdadm: array /dev/md3 started
Kontrolle:
cat /proc/mdstat
Personalities : [raid1]
md3 : active raid1 sdb3[1] 1983936 blocks [2/1] [_U] md2 : active raid1 sdb2[1] 5245120 blocks [2/1] [_U] md1 : active raid1 sdb1[1] 1156544 blocks [2/1] [_U] unused devices: <none> Nun müssen die RAIDPartitionen für das RAID konfiguriert werden.
echo "DEVICE /dev/sd*" > /etc/mdadm.conf
definiert welche Platten im RAID sein können und der folgende Befehl scannt nun die /dev/md*-Geräte durch und trägt ihre Eigenschaften in /etc/mdadm.conf ein:
mdadm --detail --scan >> /etc/mdadm.conf
Kontrolle:cat /etc/mdadm.conf DEVICE /dev/sd* ARRAY /dev/md1 metadata=0.90 UUID=f0045bf9:ddcdb29b:a24daeb9:4e1c5a02 ARRAY /dev/md2 metadata=0.90 UUID=0611c9b8:1aa41ea9:a24daeb9:4e1c5a02 ARRAY /dev/md3 metadata=0.90 UUID=97fcbd65:935c835b:a24daeb9:4e1c5a02 Nun müssen die neuen RAIDPartitionen formatiert werden:
for i in 2 3; do mkfs.ext4 /dev/md$i; done
Filesystem label=
OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) 328000 inodes, 1311280 blocks 65564 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=1346371584 41 block groups 32768 blocks per group, 32768 fragments per group 8000 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736 Writing inode tables: 0/41 Creating journal (32768 blocks): done Writing superblocks and filesystem accounting information: done This filesystem will be automatically checked every 34 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override. Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) 124160 inodes, 495984 blocks 24799 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=511705088 16 block groups 32768 blocks per group, 32768 fragments per group 7760 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912 Writing inode tables: 0/16
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done This filesystem will be automatically checked every 37 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override.
Nun noch das swap device initialisieren:
mkswap /dev/md1
Nun muss dafür gesorgt werden, dass beim Booten auch das Startscript für den RAID ausgeführt wird.
insserv /etc/init./boot.md
aufrufen.
Nun müssen alle Daten von den OriginalPartitionen auf die RaidPartitionen kopiert werden. Das dauert ein wenig. Achtung! Die / am Ende sind wichtig!
mount /dev/md2 /mnt; rsync -AHPSXavx / /mnt/; umount /mnt/
mount /dev/md3 /mnt; rsync -AHPSXavx /home /mnt/; umount /mnt/
Jetzt kann getestet werden, ob das System auch vom RAID bootet. Dazu muss aber nochdie neue /etc/fstab so geändert werden, dass dort die RAIDPartitionen benutzt werden.Dazu muss die neue RAIDRootPartition (im Beispiel /dev/md2) noch einmal als /mnt gemountet werden und dann dort in der /etc/fstab /dev/sda1 in /dev/md1 geändert werden. Dasselbe natürlich auch für /dev/sda2 und /dev/sda3. Ausserdem muss die initrd noch Informationen erhalten, so dass ein Booten die RAIDs konfiguriert werden.
mkinitrd -f md
mount /dev/md2 /mnt
Anschliessend muss die /etc/fstab wie folgt aus sehen (Die alten Zeilen sind mit einem # am Anfang auskommentiert).
#/dev/sad1 swap swap defaults 0 0
/dev/md1 swap swap defaults 0 0 #/dev/sda2 / ext4 acl,user_xattr 1 1 /dev/md2 / ext4 acl,user_xattr 1 1 #/dev/sda3 /home ext4 acl,user_xattr 1 2 /dev/md3 /home ext4 acl,user_xattr 1 2 proc /proc proc defaults 0 0 sysfs /sys sysfs noauto 0 0 debugfs /sys/kernel/debug debugfs noauto 0 0 usbfs /proc/bus/usb usbfs noauto 0 0 devpts /dev/pts devpts mode=0620,gid=5 0 0
Dann muss die /boot/grub/menu.lst so geändert werden, dass das Betriebssystem sowohl von dre alten Partition als auch dre neuen RAIDPartition gestartet werden kann. Dazu muss der erste Eintrag dupliziert und am Ende angehängt werden und sda2 bzw sda1 ind md2 bzw md1 geändert werden.
# Modified by YaST2. Last modification on Sun Jun 13 00:10:27 CEST 2010
# THIS FILE WILL BE PARTIALLY OVERWRITTEN by perl-Bootloader # Configure custom boot parameters for updated kernels in /etc/sysconfig/bootloader default 0 timeout 8 ##YaST - generic_mbr gfxmenu (hd0,1)/boot/message ##YaST - activate ###Don't change this comment - YaST2 identifier: Original name: linux### title openSUSE 11.2 - 2.6.31.5-0.1 root (hd0,1) kernel /boot/vmlinuz-2.6.31.5-0.1-default root=/dev/sda2 resume=/dev/sda1 splash=silent quiet showopts vga=0x314 initrd /boot/initrd-2.6.31.5-0.1-default ###Don't change this comment - YaST2 identifier: Original name: failsafe### title Failsafe -- openSUSE 11.2 - 2.6.31.5-0.1 root (hd0,1) kernel /boot/vmlinuz-2.6.31.5-0.1-default root=/dev/sda2 showopts apm=off noresume nosmp maxcpus=0 edd=off powersaved=off nohz=off highres=off processor.max_cstate=1 x11failsafe vga=0x314 initrd /boot/initrd-2.6.31.5-0.1-default ###Don't change this comment - YaST2 identifier: Original name: floppy### title Floppy rootnoverify (fd0) chainloader +1 ###Don't change this comment - YaST2 identifier: Original name: linux### title openSUSE 11.2 - 2.6.31.5-0.1 - RAID root (hd0,1) kernel /boot/vmlinuz-2.6.31.5-0.1-default root=/dev/md2 resume=/dev/md1 splash=silent quiet showopts vga=0x314 initrd /boot/initrd-2.6.31.5-0.1-default
Jetzt kann nach einem Reboot der letzte Menupunkt ausgewählt werden und und das System startet vom RAID. Falls was schiefgeht kann man immer noch wieder den ersten Menupunkt auswählen und von der OriginalsystemPartition booten.
Danach sollte man das halbe RAID System noch einmal prüfen ob swap sowie root und home Partition auf dem RAID liegen:
swapon -s
Filename Type Size Used Priority
/dev/md1 partition 1156536 0 -1
mount
/dev/md2 on / type ext4 (rw,acl,user_xattr)
proc on /proc type proc (rw) sysfs on /sys type sysfs (rw) debugfs on /sys/kernel/debug type debugfs (rw) udev on /dev type tmpfs (rw) devpts on /dev/pts type devpts (rw,mode=0620,gid=5) /dev/md3 on /home type ext4 (rw,acl,user_xattr) securityfs on /sys/kernel/security type securityfs (rw) none on /proc/fs/vmblock/mountPoint type vmblock (rw)
Nun erfolgt das Einbinden der OriginalPartitions in den RAID1 so dass es ein wirklicher RAID1 wird. Wenn dabei etwas schief geht besteht die grosse Gefahr, dass man seinen Backup zurückspielen muss. Deshalb sind die folgenden Schritte sehr sorgfältig vorzunehmen.
Alle Partitions auf /dev/sda müssen nun als RAIDpartitions
gekennzeichnet werden. (Die Nummern 1 2 3 bezeichnen die Partitionen,
die geändert werden sollen)
for i in 1 2 3; do sfdisk --change-id /dev/sda $i fd; done; sfdisk -R /dev/sda
DiePatritionen werde nun ins RAID eingebunden:
for i in 1 2 3; do mdadm /dev/md$i -a /dev/sda$i; done
Die laufende Plattensynchronisation kann man verfolgen und erst nach dem Ende der Synchronisation darf weitergemacht werden, da die grub EInträge nun nicht mehr stimmen.
watch cat /proc/mdstat
Personalities : [raid1] [raid0] [raid6] [raid5] [raid4]
md3 : active raid1 sda3[2] sdb3[1] 1983936 blocks [2/1] [_U] resync=DELAYED md2 : active raid1 sda2[2] sdb2[1] 5245120 blocks [2/1] [_U] [=>...................] recovery = 9.6% (504768/5245120) finish=2.8min speed=28042K/sec md1 : active raid1 sda1[0] sdb1[1] 1156544 blocks [2/2] [UU] unused devices: <none>
und sollte zum Schluss wie folgt aussehen:
Personalities : [raid1] [raid0] [raid6] [raid5] [raid4]
md3 : active raid1 sda3[0] sdb3[1] 1983936 blocks [2/2] [UU] md2 : active raid1 sda2[0] sdb2[1] 5245120 blocks [2/2] [UU] md1 : active raid1 sda1[0] sdb1[1] 1156544 blocks [2/2] [UU] unused devices: <none>
Zum Schluss muss noch das grub Bootmenu in /boot/grub/menu.lst angepasst werden sowie die bootloader auf beiden Platten erstellt werden.
Die /boot/grub/menu.lst muss am Kopf eine weitere zeile für fallback bekommen und die weiteren Einträge müssen von sda auf md umgestellt werden.Ausserdem ist ein weiterer Eintrag zu erstellen der im Ausfall der ersten Platte von der zweiten Platte bootet (root ist geändert). Wichtig ist auch dass der erste Eintrag geändert wird und dann dahinter noch einmal kopiert wirdund dort root geändert wird. Ansonsten stimmt die Zahl 1 nach dem fallback nicht.
# Modified by YaST2. Last modification on Sun Jun 13 00:10:27 CEST 2010
# THIS FILE WILL BE PARTIALLY OVERWRITTEN by perl-Bootloader # Configure custom boot parameters for updated kernels in /etc/sysconfig/bootloader default 0 # added for RAID fallback 1 timeout 8 ##YaST - generic_mbr gfxmenu (hd0,1)/boot/message ##YaST - activate ###Don't change this comment - YaST2 identifier: Original name: linux### title openSUSE 11.2 - 2.6.31.5-0.1 - RAID1 Disk 1 root (hd0,1) # kernel /boot/vmlinuz-2.6.31.5-0.1-default root=/dev/sda2 resume=/dev/sda1 splash=silent quiet showopts vga=0x314 kernel /boot/vmlinuz-2.6.31.5-0.1-default root=/dev/md2 resume=/dev/md1 splash=silent quiet showopts vga=0x314 initrd /boot/initrd-2.6.31.5-0.1-default # added for RAID title openSUSE 11.2 - 2.6.31.5-0.1 - RAID1 Disk 2 root (hd1,1) kernel /boot/vmlinuz-2.6.31.5-0.1-default root=/dev/md2 resume=/dev/md1 splash=silent quiet showopts vga=0x314 ###Don't change this comment - YaST2 identifier: Original name: failsafe### title Failsafe -- openSUSE 11.2 - 2.6.31.5-0.1 root (hd0,1) # kernel /boot/vmlinuz-2.6.31.5-0.1-default root=/dev/sda2 showopts apm=off noresume nosmp maxcpus=0 edd=off powersaved=off nohz=off highres=off processor.max_cstate=1 x11failsafe vga=0x314 kernel /boot/vmlinuz-2.6.31.5-0.1-default root=/dev/md2 showopts apm=off noresume nosmp maxcpus=0 edd=off powersaved=off nohz=off highres=off processor.max_cstate=1 x11failsafe vga=0x314 initrd /boot/initrd-2.6.31.5-0.1-default ###Don't change this comment - YaST2 identifier: Original name: floppy### title Floppy rootnoverify (fd0) chainloader +1
Nun muss die /boot/grub/devices.map noch erweiter werden um die neue Platte /dev/sdb:
(fd0) /dev/fd0
(hd0) /dev/sda (hd1) /dev/sdb Auf beiden Platten muss der grub Bootloader installiert werden.
grub grub grub> root (hd1,1) Filesystem type is ext2fs, partition type 0xfd grub> setup (hd1) Checking if "/boot/grub/stage1" exists... yes Checking if "/boot/grub/stage2" exists... yes Checking if "/boot/grub/e2fs_stage1_5" exists... yes Running "embed /boot/grub/e2fs_stage1_5 (hd1)"... 20 sectors are embedded. succeeded Running "install /boot/grub/stage1 (hd0) (hd1)1+20 p (hd1,1)/boot/grub/stage2 /boot/grub/menu.lst"... succeeded Done. Der letzte Schritt besteht darin, noch einmal die initrd neu zu bauen mkinitrd -f md Damit ist das System von einem nicht RAID System zu einem RAID1 System ungewandelt worden.
Damit man auch sofort eine eMail bekommt wenn eine Platte ausfällt muss noch die /etc/sysconfig/mdad.conf angepasst werden une eine gültige eMail konfiguriert werden. Denn leider nützt ein RAID1 nichts wenn manerst beim Ausfall der zweiten Platte mitbekommt dass schon viele Tage vorher die erste Platte ausgefallen ist.
|
|
| Last Updated ( Sonntag, 20 Juni 2010 ) |
| < Prev | Next > |
|---|
Who's Online
We have 17 guests onlineMost downloaded
collectNWData.sh (14589)tnm (1458)
SuSEfirewall2 (1149)
SuSEfirewall2-custom (757)
OPENVPN Server config (688)
Portfreischaltungsscript (681)
named.conf (662)
ddclient.conf (578)
localhost.zone (571)
main.cf (532)


