Debian Etch auf einem Rootserver mit Raid-1 und LVM

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:

Über Feedback freue ich mich natürlich.

Zum nächsten Teil: FTP-Backup: Speicherplatz nutzen »

6 Antworten auf „Debian Etch auf einem Rootserver mit Raid-1 und LVM“

  1. Bisher hatte ich die hotzeltopf Seite in den Bookmarks – nun kam ich dank dist-upgrade an die Grenze und landete hier.

    Danke, Bookmark geändert.

  2. Hallo,

    zu einer meiner Anleitungen gab es den Hinweis, dass man den SWAP auch auf ein Array legen sollte, falls z.b. der Kernel gerade swapt während eine Platte aussteigt.

    Der Vorschlag macht in meinen Augen Sinn, das nur so als Nachtrag (ich bin zu faul meine Anleitung zu aktualisieren 😉 ).

    Gruß

    Andre Hotzler

  3. Hallo,

    erst einmal vielen Dank für die ausführliche Anleitung. Eine Sache gibt es, die nicht klar war.
    Nach dem „Altar niederknien“ und aus der Kirche zurückkommen, stellte ich fest daß sich nichts mehr an dem Server tat.

    Die LVMs wurden allesamt ignoriert und nicht eingebunden. Kein Volume wurde erkannt und ergo auch kein Log erzeugt, aus dem man lesen konnte.

    Am Sonntag sieht man das auch nicht, da keiner einem eine LARA bringt.

    Im Teil „Grundlegendes im neuen System“ sollte man unbedingt noch das LVM2 Paket installieren:
    # apt-get install LVM2

    Da die Bootsektoren alle korrekt eingebaut waren funktionierte dann alles zur besten Zufriedenheit.

    Grüße
    Frank

  4. Hi,

    von mir auch noch einmal ein Danke für diese sehr gute Einstiegsanleitung.

    Allerdings hatte mir das Rescue System arge Probleme bereitet, da ich das ganze auf einem lokalem Server durchgeführt habe. (lies sich aber über eine Erstinstallation umgehen.)

    Es ist übrigens sehr schwer etwas über diese Rescue-Systeme heraus zu bekommen. Erst nach Dutzenden Google-Outputs wusste ich, was so ein Rescue-System ist.

    MfG
    Niels

Kommentare sind geschlossen.