GästebuchIhr Eintrag in unser Gästebuch KontaktNehmen Sie Kontakt mit den Autoren auf ArchivAlle Unixwerk- Artikel seit 2003
10. Oktober 2003

Plattenspiegel unter Linux anlegen (Software-Raid1 und LVM)

Inhalt

  1. Einbau der Platten
  2. Installation der «lvm»- und «raidtools»
  3. Kernel-Konfiguration anpassen
  4. Anlegen der Partitionen
  5. Raid-Devices anlegen
  6. Logical Volumes anlegen
  7. Dateisysteme anlegen
  8. Umkopieren der Dateien (optional)
  9. «/etc/fstab» anpassen
  10. 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:

Auf allen gängigen Linux-Distributionen sind diese Pakete verfügbar. Vielleicht sind sie bei Ihnen sogar schon installiert. Falls nicht, ist jetzt der Zeitpunkt dies nachzuholen.

 

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
                                                                                

                                   cfdisk 2.12

                               Disk Drive: /dev/hda
                        Size: 123522416640 bytes, 123.5 GB
              Heads: 255   Sectors per Track: 63   Cylinders: 15017

     Name        Flags      Part Type  FS Type          [Label]        Size (MB)
  ------------------------------------------------------------------------------
     hda1        Boot        Primary   Linux raid autodetect            22726.46  
     hda2                    Primary   Linux raid autodetect              518.20
     hda3                    Primary   Linux raid autodetect           100274.39









      [Bootable]  [ Delete ]  [  Help  ]  [Maximize]  [ Print  ]
      [  Quit  ]  [  Type  ]  [ Units  ]  [ Write  ]

                  Toggle bootable flag of the current partition

 linux# cfdisk /dev/hdc
                                                                                

                                   cfdisk 2.12

                               Disk Drive: /dev/hdc
                        Size: 123522416640 bytes, 123.5 GB
              Heads: 255   Sectors per Track: 63   Cylinders: 15017

     Name        Flags      Part Type  FS Type          [Label]        Size (MB)
  ------------------------------------------------------------------------------
     hdc1        Boot        Primary   Linux raid autodetect            22726.46  
     hdc2                    Primary   Linux raid autodetect              518.20
     hdc3                    Primary   Linux raid autodetect           100274.39









      [Bootable]  [ Delete ]  [  Help  ]  [Maximize]  [ Print  ]
      [  Quit  ]  [  Type  ]  [ Units  ]  [ Write  ]

                  Toggle bootable flag of the current partition

 

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.