Good to Know Database

Raspbian Wheezy: Software RAID konfigurieren


Mit Hilfe von RAID (Redundant Array of Independent Disks) werden mehrere Festplatten beziehungsweise Partitionen zu einer virtuellen Einheit zusammengefasst. Dadurch können Sie einerseits größere Partitionen erzeugen als auf eine Festplatte passen würden und andererseits auch zusätzliche Sicherheits- und/oder Geschwindigkeitsvorteile nutzen.

Wenn Sie am Raspberry Pi angeschlossene USB-Festplatten oder USB-Sticks zu einem RAID-Verbund zusammenschließen wollen, sollten Sie sich vorher Gedanken über die Vor- und Nachteile machen. Falls Sie auf einen Geschwindigkeitsvorteil durch einen RAID0-Verbund spekulieren, sollten Sie bedenken, dass der USB-Controller auf dem Raspberry Pi der Flaschenhals ist und Sie hier keine besseren Werte erzielen können als mit einem einzelnen USB-Datenträger. Am Raspberry Pi ist ein Software RAID wenn überhaupt nur für eine höhere Datensicherheit sinnvoll. Sollte ein USB-Datenträger ausfallen, stehen Ihnen die Daten auf dem zweiten USB-Datenträger noch zur Verfügung.

Im folgenden Tutorial möchte ich Ihnen zeigen, wie Sie zwei USB-Datenträger (in diesem Beispiel zwei USB-Sticks) ohne einen speziellen RAID-Controller als RAID1-Verbund zusammenfassen können. Als Grundlage wird hier das derzeit aktuelle Raspbian Image vom 09.02.2013 (2013-02-09-wheezy-raspbian.zip) verwendet.

Datenträger vorbereiten

Bevor Sie einen Datenträger in einen RAID-Verbund aufnehmen können, müssen Sie auf diesem eine Partition erstellen und deren Partition-ID auf 0xfd (Linux raid autodetect) ändern. Bevor Sie damit loslegen, sollten Sie die USB-Datenträger mit Ihrem Raspberry Pi verbinden und sich mit dem folgenden Befehl einen Überblick verschaffen wie die Datenträger partitioniert sind.

pi@raspberrypi ~ $ lsblk
NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda           8:0    1   7.4G  0 disk
  sda1        8:1    1   7.4G  0 part
sdb           8:16   1   7.4G  0 disk
  sdb1        8:17   1   7.4G  0 part
mmcblk0     179:0    0   7.4G  0 disk
  mmcblk0p1 179:1    0    56M  0 part /boot
  mmcblk0p2 179:2    0   1.8G  0 part /

Wie Sie der Ausgabe entnehmen können, befinden sich hier auf den beiden USB-Datenträgern jeweils eine Partition (/dev/sda1 und /dev/sdb1). Diese Partitionen sollen jetzt mit den folgenden Befehlen gelöscht werden.

Hinweis: Die Daten auf den beiden USB-Datenträgern werden durch die folgenden Schritte ebenfalls gelöscht.

pi@raspberrypi ~ $ sudo parted /dev/sda "rm 1"
Information: You may need to update /etc/fstab.

pi@raspberrypi ~ $ sudo parted /dev/sdb "rm 1"
Information: You may need to update /etc/fstab.

Überprüfen Sie nach dem Löschen der Partitionen erneut ob sich noch Partitionen auf den beiden Datenträgern (/dev/sda und /dev/sdb) befinden.

pi@raspberrypi ~ $ lsblk
NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda           8:0    1   7.4G  0 disk
sdb           8:16   1   7.4G  0 disk
mmcblk0     179:0    0   7.4G  0 disk
  mmcblk0p1 179:1    0    56M  0 part /boot
  mmcblk0p2 179:2    0   1.8G  0 part /

Nachdem alle Partitionen gelöscht wurden, können sie mit den folgenden Befehlen eine MSDOS-Partitionstabelle auf den Datenträgern erstellen. Dies funktioniert allerdings nur bei Datenträgern die maximal 2TB Speicherplatz zur Verfügung stellen.

pi@raspberrypi ~ $ sudo parted /dev/sda "mklabel msdos"
Warning: The existing disk label on /dev/sda will be destroyed and all data on this disk will be lost. Do you want to continue?
Yes/No? yes
Information: You may need to update /etc/fstab.

pi@raspberrypi ~ $ sudo parted /dev/sdb "mklabel msdos"
Warning: The existing disk label on /dev/sdb will be destroyed and all data on this disk will be lost. Do you want to continue?
Yes/No? yes
Information: You may need to update /etc/fstab.

Wenn Sie Festplatten mit mehr als 2TB verwenden wollen, müssen Sie anstelle der MSDOS-Partitionstabelle eine GUID Partition Table (kurz GPT) anlegen. Dazu verwenden Sie einfach die folgenden Befehle.

pi@raspberrypi ~ $ sudo parted /dev/sda "mklabel gpt"
Warning: The existing disk label on /dev/sda will be destroyed and all data on this disk will be lost. Do you want to continue?
Yes/No? yes
Information: You may need to update /etc/fstab.

pi@raspberrypi ~ $ sudo parted /dev/sdb "mklabel gpt"
Warning: The existing disk label on /dev/sdb will be destroyed and all data on this disk will be lost. Do you want to continue?
Yes/No? yes
Information: You may need to update /etc/fstab.

Anschließend wird auf jedem USB-Datenträger eine neue Partition erstellt, welche den gesamten zur Verfügung stehenden Speicherplatz nutzt.

pi@raspberrypi ~ $ sudo parted /dev/sda "mkpart primary ext4 1M -1"
Information: You may need to update /etc/fstab.

pi@raspberrypi ~ $ sudo parted /dev/sdb "mkpart primary ext4 1M -1"
Information: You may need to update /etc/fstab.

Als nächstes wird die Partition-ID 0xfd für beide Partitionen gesetzt.

pi@raspberrypi ~ $ sudo parted /dev/sda "set 1 raid on"
Information: You may need to update /etc/fstab.

pi@raspberrypi ~ $ sudo parted /dev/sdb "set 1 raid on"
Information: You may need to update /etc/fstab.

Das Ergebnis können Sie wie folgt überprüfen.

pi@raspberrypi ~ $ sudo parted -s /dev/sda print
Model: Generic STORAGE DEVICE (scsi)
Disk /dev/sda: 7948MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start   End     Size    Type     File system  Flags
 1      1049kB  7948MB  7947MB  primary  fat32        raid

pi@raspberrypi ~ $ sudo parted -s /dev/sdb print
Model: Generic STORAGE DEVICE (scsi)
Disk /dev/sdb: 7948MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start   End     Size    Type     File system  Flags
 1      1049kB  7948MB  7947MB  primary  fat32        raid

mdadm installieren

Für die Verwaltung eines RAID-Verbundes müssen Sie das Paket mdadm installieren. Zuvor wird aber noch die lokale Paketdatenbank aktualisiert.

pi@raspberrypi ~ $ sudo apt-get update
pi@raspberrypi ~ $ sudo apt-get install mdadm

Während der Installation werden Sie aufgefordert sich zu entscheiden ob die konfigurierten RAID-Arrays bereits beim Booten verfügbar sein sollen, weil sich zum Beispiel das Root-Dateisystem auf einem RAID-Verbund befindet, oder nicht. Bestätigen Sie hier einfach die Standardeinstellung all.

RAID1-Verbund erstellen

Die beiden zuvor erstellten Partitionen /dev/sda1 und /dev/sdb1 können Sie jetzt mit dem folgenden Befehl zu einem RAID1-Verbund /dev/md0 zusammenfügen.

pi@raspberrypi ~ $ sudo mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sda1 /dev/sdb1
mdadm: Note: this array has metadata at the start and
    may not be suitable as a boot device.  If you plan to
    store '/boot' on this device please ensure that
    your boot-loader understands md/v1.x metadata, or use
    --metadata=0.90
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

Danach sollte lsblk die folgende Ausgabe liefern.

pi@raspberrypi ~ $ lsblk
NAME        MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
sda           8:0    1   7.4G  0 disk  
  sda1        8:1    1   7.4G  0 part  
    md0       9:0    0   7.4G  0 raid1
sdb           8:16   1   7.4G  0 disk  
  sdb1        8:17   1   7.4G  0 part  
    md0       9:0    0   7.4G  0 raid1
mmcblk0     179:0    0   7.4G  0 disk  
  mmcblk0p1 179:1    0    56M  0 part  /boot
  mmcblk0p2 179:2    0   1.8G  0 part  /

Erstellen Sie jetzt ein Dateisystem auf dem neuen RAID1-Verbund damit Sie später auch Dateien darauf ablegen können.

pi@raspberrypi ~ $ sudo mkfs -t ext4 /dev/md0
mke2fs 1.42.5 (29-Jul-2012)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
484800 inodes, 1939184 blocks
96959 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=1988100096
60 block groups
32768 blocks per group, 32768 fragments per group
8080 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632

Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

Wenn Sie einen RAID-Verbund wie hier neu angelegt haben, dauert es einige Zeit, bis Sie das Array mit dem vollen Datendurchsatz benutzen können. Das liegt daran, dass im Hintergrund die Laufwerke zum ersten Mal gespiegelt und gegebenenfalls auch die Prüfsummen zum ersten Mal berechnet werden. Wenn Sie den aktuellen Status des RAID-Verbundes abfragen wollen, stehen Ihnen mehrere Möglichkeiten zur Verfügung.

Mit dem folgenden Befehl können Sie zum Beispiel jederzeit den Status des RAID-Verbundes überprüfen.

pi@raspberrypi ~ $ cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sdb1[1] sda1[0]
      7756736 blocks super 1.2 [2/2] [UU]
      [>....................]  resync =  1.7% (137024/7756736) finish=126.7min speed=1001K/sec

unused devices: <none>

Der Befehl mdadm mit der Option --detail zeigt neben dem aktuellen Status noch zusätzliche Informationen zum RAID-Verbund an.

pi@raspberrypi ~ $ sudo mdadm --detail /dev/md0
/dev/md0:
        Version : 1.2
  Creation Time : Sat Apr 20 10:10:33 2013
     Raid Level : raid1
     Array Size : 7756736 (7.40 GiB 7.94 GB)
  Used Dev Size : 7756736 (7.40 GiB 7.94 GB)
   Raid Devices : 2
  Total Devices : 2
    Persistence : Superblock is persistent

    Update Time : Sat Apr 20 10:10:58 2013
          State : active, resyncing
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0

  Resync Status : 2% complete

           Name : raspberrypi:0  (local to host raspberrypi)
           UUID : 150bea51:bf23eb06:f11b480c:69904997
         Events : 1

    Number   Major   Minor   RaidDevice State
       0       8        1        0      active sync   /dev/sda1
       1       8       17        1      active sync   /dev/sdb1

RAID-Verbund einhängen

Auch wenn der RAID-Verbund erst noch fertig synchronisiert wird kann man diesen bereits mounten. Um das neue Dateisystem manuell einzuhängen kann man wie üblich den Befehl mount verwenden.

pi@raspberrypi ~ $ sudo mount /dev/md0 /mnt

Soll das Dateisystem automatisch beim Systemstart eingehängt werden kann man dieses auch in die /etc/fstab eintragen. Öffnen Sie diese dazu mit einem Editor.

pi@raspberrypi ~ $ sudo vi /etc/fstab

Fügen Sie am Ende der Datei die folgende Zeile ein. Diese sorgt dafür, dass das ext4-Dateisystem auf dem RAID-Verbund /dev/md0 unter dem Pfad /data eingehängt wird.

/dev/md0        /data           ext4    defaults          0       0

Sollte das Verzeichnis /data noch nicht existieren, legen Sie dieses noch mit dem folgenden Befehl an.

pi@raspberrypi ~ $ sudo mkdir /data

Ob der Eintrag in der /etc/fstab funktioniert und das Dateisystem eingehängt wird können Sie mit dem folgenden Befehl überprüfen.

pi@raspberrypi ~ $ sudo mount -a

Wenn Sie einen Blick auf den Mountpoint /data werfen, werden Sie feststellen, dass nur der Benutzer root in dieses Verzeichnis schreiben darf.

pi@raspberrypi ~ $ ls -lad /data
drwxr-xr-x 3 root root 4096 Apr 20 10:10 /data

Damit Sie als normaler Benutzer (standardmäßig als Benutzer pi) auch in dieses Verzeichnis schreiben können, müssen Sie den Eigentümer, die Gruppenzugehörigkeit und vor allem die Zugriffsrechte anpassen.

pi@raspberrypi ~ $ sudo chown pi:users /data
pi@raspberrypi ~ $ sudo chmod 0775 /data

Anschließend sollten die Zugriffsrechte wie folgt aussehen und Sie sollten Dateien und Verzeichnisse unter /data erstellen können.

pi@raspberrypi ~ $ ls -lad /data
drwxrwxr-x 3 pi users 4096 Apr 20 10:10 /data


Dieser Eintrag wurde am 21.04.2013 erstellt und zuletzt am 25.09.2016 bearbeitet.

Direkter Link zu dieser Seite: http://www.gtkdb.de/index_36_2187.html

[ Zur Startseite ]   [ Zur Kategorie ]


Valid XHTML 1.0 Transitional Valid CSS Valid Atom 1.0

© 2004-2018 by Georg Kainzbauer