Torsten Förtsch
IT System Development & Security
Kaum macht man's richtig, schon geht's, ;-)

>> Home >> Tipps & Tricks >> SW RAID >> SWAP

Swap-Space auf einer RAID Partition

Wozu brauche ich eigentlich Swap-Space auf einem RAID. Eigentlich könnte man doch mehrere Swap-Partitionen anlegen und sie mit gleicher Priorität dem Kernel bekanntgeben. Damit erreicht man praktisch auch Striping (RAID0). Der Kernel wird die Partitionen parallel benutzen.

Problematisch wird es erst, wenn eine Platte ausfällt. Das führt mit Striping wahrscheinlich zum System-Crash mit eventuellem Datenverlust auch in nicht betroffenen Partitionen.

Daher liegt mein Swap-Space auf einem RAID1.

Partitionierung

Während der Installation hatte ich schon einige RAID Partitionen angelegt, so dass die neue Partition /dev/md4 heißen wird. RAID1 kann mit 2 Platten starten. Da alle meine Platten gleich partitioniert sind, entschloß ich mich, für /boot und swap ein RAID1 mit je 3 Platten zu benutzen.

Voraussetzung dafür sind 3 (mindestens 2) gleich große Partitionen auf unterschiedlichen Platten. Der Partitionstyp sollte auf 0xfd gesetzt werden, damit der Kernel beim Booten versucht, aus diesen Partitionen ein RAID zu bilden. Gemeinsam mit dem persistenten Superblock kann man so praktisch auf Konfigurationsdateien verzichten. Meine 3 Platten sind alle gleich partitioniert. Hier /dev/sdb:

pelmen:/ # fdisk -l /dev/sdb

Disk /dev/sdb: 160.0 GB, 160041885696 bytes
255 heads, 63 sectors/track, 19457 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1         392     3148708+  fd  Linux raid autodetect
/dev/sdb2             720       19456   150504952+   f  W95 Ext'd (LBA)
/dev/sdb3             393         719     2626627+  fd  Linux raid autodetect
/dev/sdb5             720        1306     4715046   fd  Linux raid autodetect
/dev/sdb6            1307        3265    15735636   fd  Linux raid autodetect
/dev/sdb7            3266       19456   130054176   fd  Linux raid autodetect

Partition table entries are not in disk order

RAID Partition erzeugen

Zum Anlegen eines RAIDs benutzt man am besten mdadm aus dem Paket mdadm-1.9.0-3. Alternativ kann mkraid aus raidtools-1.00.3-231 benutzt werden. Die man-page zu mdadm pries es aber als den Raidtools überlegen an und ich habe ihr geglaubt.

Der Befehl

mdadm -C /dev/md4 -l raid1 -n 3 /dev/sd{a,b,c}5

erzeugt eine RAID-Partition aus den physikalischen Partitionen /dev/sda5, /dev/sda5 und /dev/sda5. Zur Kontrolle schaut man am Besten nochmal nach, was dabei heraus kam:

pelmen:/ # mdadm -D /dev/md4
/dev/md4:
        Version : 00.90.01
  Creation Time : Wed Apr 13 12:10:54 2005
     Raid Level : raid1
     Array Size : 4714944 (4.50 GiB 4.83 GB)
    Device Size : 4714944 (4.50 GiB 4.83 GB)
   Raid Devices : 3
  Total Devices : 3
Preferred Minor : 4
    Persistence : Superblock is persistent

    Update Time : Wed Apr 13 12:23:32 2005
          State : clean
 Active Devices : 3
Working Devices : 3
 Failed Devices : 0
  Spare Devices : 0

           UUID : b52abcf7:ab77beb4:a182a40f:60b0e5ab
         Events : 0.12

    Number   Major   Minor   RaidDevice State
       0       8        5        0      active sync   /dev/sda5
       1       8       21        1      active sync   /dev/sdb5
       2       8       37        2      active sync   /dev/sdc5

Gut, er hat alle 3 Partitionen benutzt. Wichtig ist weiterhin die Zeile Superblock is persistent. Damit steht am Ende jeder Partition nochmal der RAID-Superblock. So erkennt der Kernel ohne weitere Konfigurationsdateien das RAID während des Starts.

Swap-Space erzeugen und einbinden

Zuerst muss die RAID-Partition nun als Swap-Space formatiert werden.

mkswap /dev/md4

Linux kennt 2 Swap-Space-Formate. Man sollte unbedingt Version 1 nehmen. Das ist das jüngere Format. Das ältere kann nicht mehr als die ersten 128 MByte einer als Swap-Space benutzen. Dieses Format wird allerdings als Standard automatisch erzeugt. Auch von den anderen Parametern zu mkswap lässt man besser die Finger. Auf modernen Systemen ist mkswap in der Lage sich die nötigen Informationen selbst zusammen zu klauben.

Jetzt binden wir den neuen Swap-Space testweise ein:

swapon /dev/md4

und kontrollieren das Ergebnis:

pelmen:/ # free
             total       used       free     shared    buffers     cached
Mem:       2055660    1281180     774480          0       2196     849444
-/+ buffers/cache:     429540    1626120
Swap:      4714936          0    4714936

Hinter Swap: standen vorher nur Nullen, also hat der Kernel den neuen Swap-Space verstanden. Jetzt muss noch eine Zeile in /etc/fstab eingefügt werden, damit es beim nächsten Reboot automatisch erkannt wird. Also schalten wir den Swap-Space erstmal wieder aus:

swapoff /dev/md4

und fügen folgende Zeile zur Fstab hinzu:

/dev/md4             swap                 swap       pri=42                0 0

Die Priorität (42) wird von Suse als Standard benutzt. Wahrscheinlich hat dort einer Per Anhalter durch die Galaxis gelesen.

So nun sollte der Swap-Space auf dem RAID auch einen Reboot überstehen.

Letzte Aktualisierung: 03.08.2008