Es gibt zwar viele gute Anleitungen (wie z.B. diese) zur Einrichtung eines Rootservers mit RAID-1, howtos, wie man dort noch LVM ins Spiel bringt, sind jedoch spärlich gesäht. Deswegen nun die rundum-sorglos copy&paste-Anleitung zur Einrichtung von
Debian Etch auf einem Rootserver mit Raid-1 und LVM
Der Hoster in diesem Beispiel ist Hetzner, das kann man aber auch auf andere Systeme übertragen. Ausgestattet ist die Kiste mit 2x160GB SATA Platten. Das Ziel ist, ein System aufzusetzen, dass die SATA-Platten im RAID-1 spiegelt und darauf ein LVM betreibt.
/etc/network/interfaces
Zunächst wird das default-System gebootet und die /etc/network/interfaces
gesichert. Die brauchen wir später.
Partitionierung
Da scheiden sich die Geister, vorgeschlagen wird folgende Aufteilung der Platten:
Device Boot Start End Blocks Id System /dev/sda1 * 1 125 1004031 fd Linux raid autodetect (/boot) /dev/sda2 126 19457 155284290 5 Extended /dev/sda5 126 369 1959898+ 82 Linux swap / Solaris /dev/sda6 370 613 1959898+ fd Linux raid autodetect (/) /dev/sda7 614 19457 151364398+ fd Linux raid autodetect (LVM)
Die auf /dev/sda
eingerichtete Partitionstabelle kann nun auf /dev/sdb
gespiegelt werden:
# sfdisk -d /dev/sda | sfdisk /dev/sdb
Jetzt muss ggf neu gebootet werden, weil der Kernel sonst noch mit der alten Partitionstabelle arbeitet. Danach kann man den
Swap einrichten
rescue:~# mkswap /dev/sda5 Setting up swapspace version 1, size = 2006929 kB no label, UUID=4d832cd1-cbde-4f74-998e-0f487475011c rescue:~# mkswap /dev/sdb6 Setting up swapspace version 1, size = 2006929 kB no label, UUID=41834d5c-f076-407a-a92e-b8f61d01f1a3
Die Swap-Partition ist nicht gespiegelt, über die Sinnhaftigkeit kann man streiten.
Raid erzeugen
/boot
mdadm -v --create /dev/md0 --level=mirror --raid-devices=2 /dev/sda1 /dev/sdb1
/
mdadm -v --create /dev/md1 --level=mirror --raid-devices=2 /dev/sda6 /dev/sdb6
(LVM)
mdadm -v --create /dev/md2 --level=mirror --raid-devices=2 /dev/sda7 /dev/sdb7
Am besten wartet man jetzt die 20 Minuten, bis das Raid synchronisiert ist:
watch cat /proc/mdstat
/boot und / formatieren
mkfs.ext3 /dev/md0 mkfs.ext3 /dev/md1
LVM anlegen
Zuerst wird /dev/md2
als physical volume angelegt:
pvcreate /dev/md2
Dann wird die Volumegroup „mainvg“ darauf erzeugt:
vgcreate mainvg /dev/md2
Jetzt die Volumes anlegen:
lvcreate -n usr -L 10G mainvg lvcreate -n var -L 30G mainvg lvcreate -n home -L 10G mainvg lvcreate -n backup -L 55G mainvg
Das ganze nochmal prüfen:
# pvscan PV /dev/md2 VG mainvg lvm2 [144.35 GB / 39.35 GB free] Total: 1 [144.35 GB] / in use: 1 [144.35 GB] / in no VG: 0 [0 ] # vgscan Reading all physical volumes. This may take a while... Found volume group "mainvg" using metadata type lvm2 # lvscan ACTIVE '/dev/mainvg/usr' [10.00 GB] inherit ACTIVE '/dev/mainvg/var' [30.00 GB] inherit ACTIVE '/dev/mainvg/home' [10.00 GB] inherit ACTIVE '/dev/mainvg/backup' [55.00 GB] inherit
/usr /var /home und /backup formatieren
mkfs.ext3 /dev/mainvg/usr mkfs.ext3 /dev/mainvg/var mkfs.ext3 /dev/mainvg/home mkfs.ext3 /dev/mainvg/backup
Mount
Damit ergibt sich folgendes Mountschema:
/dev/md0 /boot /dev/md1 / /dev/mainvg/usr /usr /dev/mainvg/var /var /dev/mainvg/home /home /dev/mainvg/backup /backup
Das wird im Rescue-System erstmal alles nach /mnt
gemountet.
rescue:~# mount /dev/md1 /mnt/ rescue:~# cd /mnt/ rescue:/mnt# mkdir etc rescue:/mnt# mkdir boot rescue:/mnt# mkdir var rescue:/mnt# mkdir usr rescue:/mnt# mkdir home rescue:/mnt# mkdir backup rescue:/mnt# mount /dev/md0 boot/ rescue:/mnt# mount /dev/mainvg/var var/ rescue:/mnt# mount /dev/mainvg/usr usr/ rescue:/mnt# mount /dev/mainvg/home home/ rescue:/mnt# mount /dev/mainvg/backup backup/
Kontrolle:
rescue:/mnt# mount proc on /proc type proc (rw) sysfs on /sys type sysfs (rw) devpts on /dev/pts type devpts (rw,gid=5,mode=620) tmpfs on /dev/shm type tmpfs (rw) usbfs on /proc/bus/usb type usbfs (rw) /dev/md1 on /mnt type ext3 (rw) /dev/md0 on /mnt/boot type ext3 (rw) /dev/mapper/mainvg-usr on /mnt/usr type ext3 (rw) /dev/mapper/mainvg-var on /mnt/var type ext3 (rw) /dev/mapper/mainvg-home on /mnt/home type ext3 (rw) /dev/mapper/mainvg-backup on /mnt/backup type ext3 (rw)
Ok, dann kann man ja eine /mnt/etc/fstab
mit folgendem Inhalt erzeugen:
proc /proc proc defaults 0 0 /dev/md0 /boot ext3 defaults 0 2 /dev/md1 / ext3 defaults,errors=remount-ro 0 1 /dev/mainvg/home /home ext3 defaults 0 2 /dev/mainvg/usr /usr ext3 defaults 0 2 /dev/mainvg/var /var ext3 defaults 0 2 /dev/mainvg/backup /backup ext3 defaults 0 2 /dev/sda5 none swap defaults,pri=1 0 0 /dev/sdb5 none swap defaults,pri=1 0 0
Das neue System ist jetz soweit, dass wir mit der
Installation des Basissystems
beginnen können. Zunächst sollten die apt-Sourcen auf dem Rescuesystem korrigiert werden
In der /etc/apt/sources.list
wird der Mirror von Hetzner eingetragen (das spart Traffickosten):
deb http://hetzner:download@download.hetzner.de/debian/mirror etch main deb-src http://hetzner:download@download.hetzner.de/debian/mirror etch contirb deb http://security.debian.org/ etch/updates main contrib non-free
Jetzt kann man apt aktualisieren und debootstrap installieren:
aptitude update && aptitude install debootstrap
debootstrap
ist das Tool der Wahl, wenn man aus dem Nichts debian installieren will. Wir wollen Debian etch in das Verzeichnis /mnt
installieren und tippen dafür:
debootstrap etch /mnt/ http://hetzner:download@download.hetzner.de/debian/mirror
Danach brauchen wir noch ein paar Mounts:
mount -t proc none /mnt/proc mount -o bind /dev /mnt/dev mount -o bind /sys /mnt/sys
So, jetzt kann man in das neue System chrooten:
chroot /mnt
Grundlegendes im neuen System
Als erstes das root-pwd setzen:
passwd
Die /etc/network/interfaces
von vorhin kann nun wieder hergestellt werden.
Dann müssen die Sourcen (/etc/apt/sources.list
) angepasst werden. Wir nehmen natürlich wieder den Hetzner-Mirror:
deb http://hetzner:download@download.hetzner.de/debian/mirror etch main deb-src http://hetzner:download@download.hetzner.de/debian/mirror etch contirb deb http://security.debian.org/ etch/updates main contrib non-free
Nach einem herzlichen
aptitude update
Ist alles in Butter. Dann kann ein wenig Software installiert werden, z.B. ssh, mdadm, ntpdate ect. Der knifflige Teil folgt in Form der
Kernel und Boot-Konfiguration
Das ist nur für Magier ab Stufe 9. Erstmal die /etc/fstab
in Ordnung bringen. Sie sollte ungefähr so aussehen:
proc /proc proc defaults 0 0 /dev/md0 /boot ext3 defaults 0 2 /dev/md1 / ext3 defaults,errors=remount-ro 0 1 /dev/mainvg/home /home ext3 defaults 0 2 /dev/mainvg/usr /usr ext3 defaults 0 2 /dev/mainvg/var /var ext3 defaults 0 2 /dev/mainvg/backup /backup ext3 defaults 0 2 /dev/sda5 none swap defaults,pri=1 0 0 /dev/sdb5 none swap defaults,pri=1 0 0
Ok, jetzt kommt der spannenden Teil.
Kernel & Grub
aptitude install kernel-image-2.6-k7 aptitude install grub
Nicht ungesehen übernehmen, hinterher sollte man nochmal mtab inspizieren!
grep -v rootfs /proc/mounts > /etc/mtab
Da unser /boot
unter /dev/md0
liegt, lassen wir grub-install
darauf los
grub-install --no-floppy /dev/md0
Dann grub Konsole starten:
grub --no-floppy
/boot
liegt auf (hd0,0)
(d.h. sda1/sdb1), also liegt der Kernel hier: (hd0,0)/vmlinuz-2.6.18-4-k7
. Deswegen sagen wir in der grub shell:
root (hd0,0) setup (hd0) root (hd1,0) setup (hd1) quit
Dann noch die /boot/grub/menu.lst
updaten:
timeout 2 # which config to boot from default 0 fallback 0 # using boot partition from 1st disk title Linux (hd0,0) kernel (hd0,0)/vmlinuz-2.6.18-4-k7 root=/dev/md1 initrd (hd0,0)/initrd.img-2.6.18-4-k7 # using boot partition from 2nd disk title Linux (hd1,0) kernel (hd1,0)/vmlinuz-2.6.18-4-k7 root=/dev/md1 initrd (hd1,0)/initrd.img-2.6.18-4-k7
Obacht: das Root-Filesystem liegt auf dem array md1
, deswegen root=/dev/md1
!
Dann kann die chroot-Umgebung mit
exit
verlassen werden. Dann kann man vor dem Altar niederknien und sogleich laut und deutlich
reboot
aussprechen und hoffen, dass die Scheisskiste endlich bootet. Falls nicht hilft LARA.
Fertig?
Das System sieht jetzt so aus:
Filesystem Size Used Avail Use% Mounted on /dev/md1 1.9G 98M 1.7G 6% / tmpfs 506M 0 506M 0% /lib/init/rw udev 10M 72K 10M 1% /dev tmpfs 506M 4.0K 506M 1% /dev/shm /dev/md0 965M 24M 893M 3% /boot /dev/mapper/mainvg-home 9.9G 33M 9.4G 1% /home /dev/mapper/mainvg-usr 9.9G 128M 9.3G 2% /usr /dev/mapper/mainvg-var 30G 134M 28G 1% /var /dev/mapper/mainvg-backup 55G 33M 52G 1% /backup
Im LVM stehen eta 145 GB zur Verfügung. Knapp 40 Sind davon noch frei.
# pvdisplay --- Physical volume --- PV Name /dev/md2 VG Name mainvg PV Size 144.35 GB / not usable 0 # vgdisplay --- Volume group --- VG Name mainvg VG Size 144.35 GB Alloc PE / Size 26880 / 105.00 GB Free PE / Size 10074 / 39.35 GB # lvdisplay --- Logical volume --- LV Name /dev/mainvg/usr VG Name mainvg LV Size 10.00 GB --- Logical volume --- LV Name /dev/mainvg/var VG Name mainvg LV Size 30.00 GB --- Logical volume --- LV Name /dev/mainvg/home VG Name mainvg LV Size 10.00 GB --- Logical volume --- LV Name /dev/mainvg/backup VG Name mainvg LV Size 55.00 GB
Damit haben wir ein funktionierendes Grundsystem.
Aus dem Rescue-System auf die Host-Platten zugreifen
Wenn man im unwahrscheinlichen Falle eines Falles vom Rescue-System Gebrauch machen möche, kann man die Partitionen so mounten:
/etc/init.d/lvm stop mdrun /etc/init.d/lvm start mount /dev/md1 /mnt/ mount /dev/md0 /mnt/boot/ mount /dev/mainvg/usr /mnt/usr/ mount /dev/mainvg/var /mnt/var/ mount /dev/mainvg/backup /mnt/backup/ mount /dev/mainvg/home /mnt/home/ chroot /mnt
Credits
Geholfen bei der Einrichtung des Servers haben mir diese beiden Tutorials:
- Debian Sarge auf Hetzner DS3000 mit RAID1 auf VIA Chipsatz
- Raid1 auf Hetzner Dedicated Server DS5000
Über Feedback freue ich mich natürlich.