Benutzer-Werkzeuge

Webseiten-Werkzeuge


projekte:usb-floppy_raid

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

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

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)
    <M>   RAID support
    <M>     Linear (append) mode
    <M>     RAID-0 (striping) mode
    <M>     RAID-1 (mirroring) mode
    <M>     RAID-10 (mirrored striping) mode (EXPERIMENTAL)
    <M>     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

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

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

projekte/usb-floppy_raid.txt · Zuletzt geändert: 2010/12/16 13:58 von christian