Für die redundante Anordnung von Speicher unter Freunden von Pinguinen hat sich das Linux-Software RAID etabliert. Implementieren lassen sich damit beispielsweise:
* RAID-0 (//"**Striping**", keine Redundanz, dient zur Beschleunigung//)
* RAID-1 (//"**Mirroring**", Sicherung der Daten auf **x** Festplatten//)
* RAID-5 (//Lesitung und Parität, Striping und verteilen von Prüfsummen auf Medien, ein Medium darf ausfallen//)
Dieser Artikel ist noch nicht fertigestellt. Er wird in nächster Zeit noch vervollständigt.
======Motivation======
Die Motivation hinter dem Projekt war es, einfach mal auszuprobieren, ob sich wirklich mit Diskettenlaufwerken RAIDs aufbauen lassen. Mir war bewusst, dass beim Linux-Software RAID der Devicetype des Geräts weitesgehend egal war - um eben sowohl mit IDE- als auch mit SCSI/SATA/SAS-Geräten RAIDs aufbauen zu können. Aber mit Floppys?
======Fakten======
* 7 USB-Diskettenlaufwerke
* Bis zu **145 kb/s** Durchsatz
* RAID-5 Redundanz, ein Laufwerk kann ausfallen
======Vorgehensweise======
Für dieses Projekt habe ich eine kleine Debian Linux VM angelegt. Auf dieser werden im folgenden ein Software-RAID implementiert und diverse Programme zum Datenaustausch eingerichtet.
=====Hardware=====
{{ :projekte:FDDRAID_HW.jpg?100|FDD RAID-Hardware}}
Auf eBay habe ich für dieses Experiment einige USB-Diskettenlaufwerke ersteigert. Letztendlich habe ich 7 Geräte zusammengetrommelt. Da mein Notebook aber keine 7 USB Ports hat, habe ich zwei kleine 4-Port USB 2.0 Hubs zur Anbindung der Diskettenlaufwerke benutzt.
[PC]
|
STROM---[HUB]---Floppy
| |\---Floppy
STROM---[HUB]---Floppy
| | \---Floppy
| | ---Floppy
| \-----Floppy
Floppy
=====Vorbereitung=====
Bevor das RAID angelegt wird, ist es wichtig, dass alle USB-Floppys erkannt wurden:
vm-debian:~# dmesg
[ 1989.711037] scsi 1:0:0:0: Direct-Access NEC USB UF000x 1.50 PQ: 0 ANSI: 0 CCS
[ 1993.646018] sd 1:0:0:0: [sdb] Attached SCSI removable disk
...
[ 1997.708672] scsi 2:0:0:0: Direct-Access NEC USB UF000x 1.60 PQ: 0 ANSI: 0 CCS
[ 1998.364916] sd 2:0:0:0: [sdc] Attached SCSI removable disk
...
[ 2008.259838] scsi 3:0:0:0: Direct-Access NEC USB UF000x 1.50 PQ: 0 ANSI: 0 CCS
[ 2009.113761] sd 3:0:0:0: [sdd] Attached SCSI removable disk
...
[ 2022.827853] scsi 4:0:0:0: Direct-Access SMSC USB FDC 2.10 PQ: 0 ANSI: 0 CCS
[ 2025.579417] sd 4:0:0:0: [sde] Attached SCSI removable disk
...
[ 2041.259219] scsi 5:0:0:0: Direct-Access Y-E DATA USB-FDU 3.04 PQ: 0 ANSI: 0 CCS
[ 2041.324987] sd 5:0:0:0: [sdf] Attached SCSI removable disk
...
[ 2051.777417] scsi 6:0:0:0: Direct-Access Y-E DATA USB-FDU 4.01 PQ: 0 ANSI: 0 CCS
[ 2053.234643] sd 6:0:0:0: [sdg] Attached SCSI removable disk
...
[ 2779.199789] scsi 7:0:0:0: Direct-Access CITIZEN X1DE-USB 1001 PQ: 0 ANSI: 0 CCS
[ 2779.669255] sd 7:0:0:0: [sdh] Attached SCSI removable disk
{{ :projekte:FDDRAID_Devices.jpg?100|Erkannte USB-Geräte}}
Ich habe die USB-Geräte an den Rechner angeschlossen und mittels passender Funktion in VMWare Workstation durchgereicht.
Wichtig ist es auch, die Disketten für die Verwendung im RAID vorzubereiten. Hierfür werden sie überschrieben, um vorherige Inhalte zu entfernen. Normalerweise werden Medien zur Verwendung in einem Software-RAID formatiert. Doch mit Floppys funktioniert das leider nicht - sie lassen sich zwar partionieren, doch mdadm lehnt die Verwendung der Partition mit der Begründung "too small" ab.
vm-debian:~# dd if=/dev/zero of=/dev/sdb
dd: Schreiben in /dev/sdb: Auf dem Gerät ist kein Speicherplatz mehr verfügbar
2881+0 Datensätze ein
2880+0 Datensätze aus
1474560 Bytes (1,5 MB) kopiert, 175,175 s, 8,4 kB/s
vm-debian:~#
vm-debian:~# dd if=/dev/zero of=/dev/sdc
dd: Schreiben in /dev/sdc: Auf dem Gerät ist kein Speicherplatz mehr verfügbar
2881+0 Datensätze ein
2880+0 Datensätze aus
1474560 Bytes (1,5 MB) kopiert, 173,893 s, 8,5 kB/s
vm-debian:~#
vm-debian:~# dd if=/dev/zero of=/dev/sdd
dd: Schreiben in /dev/sdd: Auf dem Gerät ist kein Speicherplatz mehr verfügbar
2881+0 Datensätze ein
2880+0 Datensätze aus
1474560 Bytes (1,5 MB) kopiert, 172,846 s, 8,5 kB/s
vm-debian:~#
vm-debian:~# dd if=/dev/zero of=/dev/sde
dd: Schreiben in /dev/sde: Auf dem Gerät ist kein Speicherplatz mehr verfügbar
2881+0 Datensätze ein
2880+0 Datensätze aus
1474560 Bytes (1,5 MB) kopiert, 172,337 s, 8,6 kB/s
vm-debian:~#
vm-debian:~# dd if=/dev/zero of=/dev/sdf
dd: Schreiben in /dev/sdf: Auf dem Gerät ist kein Speicherplatz mehr verfügbar
2881+0 Datensätze ein
2880+0 Datensätze aus
1474560 Bytes (1,5 MB) kopiert, 152,831 s, 9,6 kB/s
vm-debian:~#
vm-debian:~# dd if=/dev/zero of=/dev/sdg
dd: Schreiben in /dev/sdg: Auf dem Gerät ist kein Speicherplatz mehr verfügbar
2881+0 Datensätze ein
2880+0 Datensätze aus
1474560 Bytes (1,5 MB) kopiert, 162,811 s, 9,1 kB/s
vm-debian:~#
vm-debian:~# dd if=/dev/zero of=/dev/sdh
dd: Schreiben in /dev/sdh: Auf dem Gerät ist kein Speicherplatz mehr verfügbar
2881+0 Datensätze ein
2880+0 Datensätze aus
1474560 Bytes (1,5 MB) kopiert, 248,928 s, 5,9 kB/s
=====Implementation des Software-RAIDs=====
Software-RAIDs müssen vom Kernel unterstützt werden - die meisten Distributionen haben diesen Support schon seit Jahren kernelseitig aktiviert. Bei "Eigenbau-Distributionen", wie beispielsweise CRUX oder Gentoo, muss das allerdings beim "Kernelbau" berücksichtigt werden. Interessant sind hier die folgenden Einstellungen bei der Kernelkonfiguration:
[*] Multiple devices driver support (RAID and LVM)
RAID support
Linear (append) mode
RAID-0 (striping) mode
RAID-1 (mirroring) mode
RAID-10 (mirrored striping) mode (EXPERIMENTAL)
RAID-4/RAID-5/RAID-6 mode
...
Für die Verwaltung und Implementation von Software-RAIDs wird unter Linux das Toolkit **mdadm** benötigt - unter Debian gibt es hierfür ein gleichnamiges Paket:
vm-debian:~# apt-get install mdadm
Paketlisten werden gelesen... Fertig
Abhängigkeitsbaum wird aufgebaut
Lese Status-Informationen ein... Fertig
...
Ein Software RAID-5 wird mit dem folgendem Befehl auf den vorbereiteten Medien erstellt:
vm-debian:~# mdadm --create /dev/md0 --level=5 --raid-devices=7 /dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdf /dev/sdg /dev/sdh
mdadm: array md0 started.
Der Befehl benötigt bei den alten Floppys einiges an Zeit - besonders am Ende ist ein lustiges Rattern auf allen Geräten zu sehen. ;-)
======Test======
=====Speedtest=====
Zeit für einen kleinen Speedtest - mittels hdparm wird das folgende Kommando abgesetzt:
vm-debian:/# hdparm -tT /dev/md0
/dev/md0:
Timing cached reads: 2 MB in 16.03 seconds = 127.74 kB/sec
Timing buffered disk reads: 2 MB in 14.04 seconds = 145.87 kB/sec
=====Samba=====
Doch wie sieht es im Umgang mit Dateien aus? Für diesen Zweck wird Samba installiert, um eine Windows-Netzwerkfreigabe zu erstellen:
vm-debian:/# apt-get install samba
Paketlisten werden gelesen... Fertig
Abhängigkeitsbaum wird aufgebaut
Lese Status-Informationen ein... Fertig
Die folgenden zusätzlichen Pakete werden installiert:
samba-common
Vorgeschlagene Pakete:
openbsd-inetd inet-superserver smbldap-tools ldb-tools
Die folgenden NEUEN Pakete werden installiert:
samba samba-common
0 aktualisiert, 2 neu installiert, 0 zu entfernen und 46 nicht aktualisiert.
Es müssen 7711kB an Archiven heruntergeladen werden.
Nach dieser Operation werden 21,2MB Plattenplatz zusätzlich benutzt.
Möchten Sie fortfahren [J/n]? j
...
Fertig.
Starting Samba daemons: nmbd smbd.
Für Samba wird nun folgender Inhalt in die Konfigurationsdatei geschrieben:
[global]
workgroup = WORKGROUP
server string = %h server
obey pam restrictions = Yes
passdb backend = tdbsam
pam password change = Yes
passwd program = /usr/bin/passwd %u
passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
unix password sync = Yes
syslog = 0
log file = /var/log/samba/log.%m
max log size = 1000
dns proxy = No
panic action = /usr/share/samba/panic-action %d
[FDDRAID]
path = /mnt/test
read only = No
create mask = 0664
directory mask = 0775
guest ok = Yes
Der folgende Befehl verifiziert die Konfiguration und zeigt ggf. Fehler auf:
vm-debian:/# testparm
Load smb config files from /etc/samba/smb.conf
Processing section "[FDDRAID]"
Loaded services file OK.
Server role: ROLE_STANDALONE
Press enter to see a dump of your service definitions
{{ :projekte:FDDRAID_Netzlaufwerk.jpg?100|Netzlaufwerk}}
Nach mounten des RAID-Arrays und einem Neustart des Samba-Dienstes steht die Netzwerkfreigabe zur Verfügung:
vm-debian:/# mount /dev/md0 /mnt/test -o sync
vm-debian:/# /etc/init.d/samba restart
Stopping Samba daemons: nmbd smbd.
Starting Samba daemons: nmbd smbd.
Inbesondere der Schalter "**-o sync**" ist wichtig - er sorgt dafür, dass I/O-Zugriffe nicht gecachet, sondern direkt auf das Gerät geschrieben werden. Das ist wichtig, da sonst die Daten einfach in den RAM der VM geladen werden und dann nach und nach auf die Floppys. Das verfälscht den Durchsatz.
Bevor das Volume gemountet werden kann, benötigt noch ein Benutzer ein Samba-Passwort zur Authentifizierung - für diesen Testzweck tuts auch root:
vm-debian:/# smbpasswd -a root
New SMB password:
Retype new SMB password:
====Test-Übertragung====
{{ :projekte:FDDRAID_SambaIO.jpg?100|Testübertragung mit Samba}}
Im Kurztest mit Samba komme ich leider nicht über **10,3 kb/s** hinaus. Wenn man die Ergebnisse mit hdparm vergleicht, muss das entweder an Samba oder an der RAID-Konfiguration liegen.
======Internetverweise======
* Artikel im Ubuntuusers-Wiki bezüglich Software-RAIDs: http://wiki.ubuntuusers.de/Samba_Server/smb.conf