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