Plattenspiegel unter Linux anlegen (Software-Raid1 und LVM)
Inhalt
- Einbau der Platten
- Installation der «lvm»- und «raidtools»
- Kernel-Konfiguration anpassen
- Anlegen der Partitionen
- Raid-Devices anlegen
- Logical Volumes anlegen
- Dateisysteme anlegen
- Umkopieren der Dateien (optional)
- «/etc/fstab» anpassen
- LILO-Konfiguration anpassen
Dieses Dokument beschreibt das Anlegen einer Plattenspiegelung (SW) auf einem bestehenden (ungespiegelten) System.
I. Einbau der Platten
Alles beginnt mit dem Einbau der Platten. Sinnvollerweise werden die beiden Spiegel-Platten an verschiedene
IDE-Kanäle gehängt; dies erhöht einerseits die Performance und andererseits die Verfügbarkeit, da Fehler auf einem
IDE-Kanal (z.B. auch ein defektes Kabel) sich nicht auf beide Spiegel-Kopien auswirken.
Unser Beispiel geht von jeweils einer Platte als Master auf beiden Kanälen (hda
und hdc) aus. Software-Raid eignet sich aber auch für SCSI-Platten.
II. Installation der «lvm»- und «raidtools»
Sie benötigen spezielle Befehle zur Verwaltung von Raid- und LVM-Devices. Diese müssen installiert werden:
- raidtools, zur Zeit Version 1.00.3
- lvm, zur Zeit Version 1.0.7
III. Kernel-Konfiguration anpassen
Voraussetzung für den Einsatz der «lvm»- und «raidtools» sind Treiber im Kernel. Folgende Punkte müssen in der Kernel-Konfiguration angewählt werden:
Kernel-Konfiguration (Ausschnitt):
Multi-device support (RAID and LVM) ---> +-+-------------------------------------------------------------------------+-+ | | [*] Multiple devices driver support (RAID and LVM) | | | | <*> RAID support | | | | <*> Linear (append) mode | | | | < > RAID-0 (striping) mode | | | | <*> RAID-1 (mirroring) mode | | | | < > RAID-4/RAID-5 mode | | | | < > Multipath I/O support | | | | <*> Logical volume manager (LVM) support | | |
IV. Anlegen der Partitionen
Zunächst werden auf den Platten ganz normale PC-Partitionen angelegt. Dabei bleibt es den eigenen Vorstellungen überlassen, wieviele Partitionen man anlegen will. Unser Beispiel geht von 3 Partitionen aus, eine System-, eine Swap- und eine LVM-Partition. Alle Partitionen werden auf den Typ fd gesetzt. Dieser Typ ist für Linux-Software-Raid reserviert.
Falls Sie aber Ihr System nicht umkopieren möchten, können Sie auch die gesamte Platte verwenden (ohne sie überhaupt zu partitionieren). Wichtig ist, dass beide für die Spiegelung vorgesehenen Platten identisch partitioniert werden.
linux# cfdisk /dev/hda
linux# cfdisk /dev/hdc
|
V. Raid-Devices anlegen
Nun können die Raid-Devices angelegt werden. Dazu legen wir eine kleine Tabelle im Verzeichnis /etc an:
linux# vi /etc/raidtab |
mit folgendem Inhalt:
/etc/raidtab
raiddev /dev/md0
raid-level 1
nr-raid-disks 2
nr-spare-disks 0
persistent-superblock 1
chunk-size 4
device /dev/hda1
raid-disk 0
device /dev/hdc1
raid-disk 1
raiddev /dev/md1
raid-level 1
nr-raid-disks 2
nr-spare-disks 0
persistent-superblock 1
chunk-size 4
device /dev/hda2
raid-disk 0
device /dev/hdc2
raid-disk 1
raiddev /dev/md2
raid-level 1
nr-raid-disks 2
nr-spare-disks 0
persistent-superblock 1
chunk-size 4
device /dev/hda3
raid-disk 0
device /dev/hdc3
raid-disk 1
|
Nach Anlegen dieser Datei, können die Raids initialisiert werden; dafür muss nacheinander für jedes Raid-Array der Befehl mkraid abgesetzt werden:
linux# mkraid /dev/md0 linux# mkraid /dev/md1 linux# mkraid /dev/md2 |
VI. Logical Volumes anlegen
Zunächst machen Sie aus der für den LVM vorgesehenen Partition md2 ein "Physical Volume" im Sinne des LVM:
linux# pvcreate /dev/md2 |
Nun legen Sie eine oder mehrere "Volume Groups" an:
linux# vgcreate datavg /dev/md2 |
In der VG können dann die "Logical Volumes" angelegt werden, z.B.:
linux# lvcreate -L 8G -n home datavg
lvcreate -- rounding size up to physical extent boundary
lvcreate -- doing automatic backup of "datavg"
lvcreate -- logical volume "/dev/datavg/data" successfully created
linux# lvcreate -L 15G -n img datavg
lvcreate -- rounding size up to physical extent boundary
lvcreate -- doing automatic backup of "datavg"
lvcreate -- logical volume "/dev/datavg/img" successfully created
.
.
.
|
VII. Dateisysteme anlegen
In den LVs können alle von Linux unterstützten Dateisysteme ganz normal angelegt werden (ext2, ext3, xfs, jfs, reiserfs). Ich empfehle ext3 oder xfs (mit xfs_growfs lässt sich ein Dateisystem nach Vergrößerung des LVs schnell nachziehen; dabei bleibt alles online -- seit Kernel 2.4.25 ist kein Patchen mehr nötig!). Beispielsweise:
linux# mkfs.ext3 /dev/datavg/img
mke2fs 1.34 (25-Jul-2003)
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
32768 inodes, 131072 blocks
6553 blocks (5.00%) reserved for the super user
First data block=1
16 block groups
8192 blocks per group, 8192 fragments per group
2048 inodes per group
Superblock backups stored on blocks:
8193, 24577, 40961, 57345, 73729
Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 26 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
.
.
.
|
Gegebenenfalls wird nun auch auf /dev/md0 ein Dateisystem angelegt (vgl. IV) und auf /dev/md1 der swap-Bereich eingerichtet:
linux# mkfs.ext3 /dev/md0 linux# mkswap /dev/md1 |
VIII. Umkopieren der Dateien (optional)
Dies ist nötig, falls Sie das komplette System auf Raid1 umstellen möchten; dann muss das z.Zt laufende System auf das neu angelegte Device /dev/md0 kopiert werden. Im folgenden Beispiel wird davon ausgegangen, dass alle zur Zeit eingehängten Dateisysteme auf das neue Raid-Device migriert werden sollen. Falls Sie Dateisysteme davon ausschließen möchten, hängen Sie diese jetzt ab (umount) oder benutzen Sie die Option --exclude des tar-Befehls:
linux# mkdir /.root linux# mount -t ext3 /dev/md0 /.root linux# cd / && tar --exclude /proc -cpf - * | ( cd /.root && tar xvpf - ) linux# mkdir /.root/proc /.root/images /.root/data ... |
Denken Sie daran (letzte Zeile) alle Mount-Points, die nicht mitkopiert werden, anzulegen.
IX. «/etc/fstab» anpassen
Falls Sie nur zwei neue Platten als Raid1 definiert haben (und das System also bleibt, wo es ist) fügen Sie einfach jeweils einen Eintrag der Form
/dev/datavg/data /data ext3 defaults 1 2 |
zur Datei /etc/fstab hinzu (vgl. IV).
Andernfalls müssen alle neuen Partitionen in die fstab eingetragen werden -- und zwar in die neue: die liegt zur Zeit unter /.root/etc/fstab! So sieht's aus:
/.root/etc/fstab
/dev/md0 / ext3 defaults 1 1 /dev/md1 swap swap defaults 0 0 none /dev/pts devpts gid=5,mode=620 0 0 none /proc proc defaults 0 0 # # LVM controlled slices: # /dev/datavg/data /data ext3 defaults 1 2 /dev/datavg/img /images ext3 defaults 1 2 |
X. LILO-Konfiguration anpassen (optional)
Für den nächsten Schritt, das Neuschreiben des Linux Loaders, das nötig ist, sofern Sie Punkt VIII durchgeführt haben, booten Sie das System am besten gleich richtig von den Raid-Platten¹. Zur Not tut es aber auch ein
linux# chroot /.root |
Die LILO-Konfiguration, so wie sie zur Zeit existiert, kann kann als Basis für die Änderungen genutzt werden. Eine Zeile der Form "boot=/dev/hda" kann gelöscht werden (stört aber auch nicht weiter). Ein Eintrag der Form
/etc/lilo.conf (Ausschnitt)
# Linux bootable partition config begins image = /vmlinuz root = /dev/md0 label = Linux read-only # Linux bootable partition config ends |
muss den bisherigen image-Eintrag ersetzen.
Nun muss der LILO nur noch auf die beiden Platten geschrieben werden:
linux# lilo -b /dev/hda Added Linux * linux# lilo -b /dev/hdc Warning: /dev/hdc is not on the first disk Warning: The boot sector and map file are on different disks. Added Linux * |
So gelangt der Linux Loader in den Master-Boot-Record beider Platten und das System bootet beim Ausfall einer Platte von der anderen.
| ¹ | Hierzu gibt es mehrere Möglichkeiten: Booten Sie beispielsweise von der Installations/Rettungs-CD die neue Raid-Partition.
Dazu können Sie am LILO-Prompt eine Zeile der Form
Linux root=/dev/md0 noinitrd rw eingeben. Eine weitere Möglichkeit wäre die obige lilo.conf temporär auch auf das alte
/etc zu
schreiben, lilo -b /dev/hda aufzurufen und dann das System neu zu starten.
|
unixwerk