Da meine erste gebrauchte 2,5″ 8 GB Festplatte an der Slug relativ schnell den Geist aufgegeben hat, habe ich eine neue Platte gekauft. Da ich früher mit Western Digital eigentlich immer zufrieden war, kaufte ich eine fertige WD Elements 160GB Platte (2,5″). Ursprünglich wollte ich eine andere Platte mit nur 4200 U/min und dazu ein Raidsonic ICYBox Gehäuse. Natürlich hatte der Händler beides Samstag abends nicht vorrätig. Da von Linux Support nichts auf der Schachtel stand, habe ich mich versichert, dass ich die Platte auch zurückgeben kann, wenn sie mit Linux den Dienst verweigert.
Zuhause angekommen habe ich die Platte an die SLUG angeschlossen und die Firmware neu geflasht. Danach bootet der Debian Installer. Der Installer hat die Platte problemlos erkannt und ich konnte LVM bequem konfigurieren. Somit erstmal Erleicherung. Da Etch 4.01 einen Fehler im Installer hat, musste ich die Installation im Expert Mode durchführen.
Nach der Installation lief Debian problemlos, ich konnte allerdings keine Änderungen an den Logical Volumes vornehmen. Auch der SWAP Space war nicht verfügbar. dmesg lieferte dann den Grund:
scsi1 : SCSI emulation for USB Mass Storage devices
usbcore: registered new interface driver usb-storage
USB Mass Storage support registered.
usb-storage: device found at 4
usb-storage: waiting for device to settle before scanning
usb-storage: device scan complete
scsi 0:0:0:0: Direct-Access WD 1600BEVExternal 1.02 PQ: 0 ANSI: 0
sd 0:0:0:0: [sda] 312581808 512-byte hardware sectors (160042 MB)
sd 0:0:0:0: [sda] Write Protect is on
sd 0:0:0:0: [sda] Mode Sense: 12 a1 9e af
sd 0:0:0:0: [sda] Assuming drive cache: write through
sd 0:0:0:0: [sda] 312581808 512-byte hardware sectors (160042 MB)
sd 0:0:0:0: [sda] Write Protect is on
sd 0:0:0:0: [sda] Mode Sense: 12 a1 9e af
sd 0:0:0:0: [sda] Assuming drive cache: write through
sda:<7>usb-storage: device scan complete
Der USB Controller erkennt die Platte, vermutlich auf Grund des falschen Mode Sense, als Schreibgeschützt. Ein Kollege hatte bei einer Western Digital Platte exakt das gleiche Phänomen an der SLUG. Vermutlich ist das Problem auf die Kombination aus NSLU2 Kontroller, USB Kontroller der Platte und der Festplatte selbst zurückzuführen. Denn bei der Installation konnte ich die Platte beschreiben, an einem anderen Linux Rechner wurde sie auch korrekt erkannt.
Fehlerbehebung:
Wird nicht von der Platte gebootet, reicht es oft schon aus, die Festplatte einfach ein paar Mal ein- und auszustecken. Einfacher ist es mit hdparm den Schreibschutz zu entfernen.
hdparm -r0 /dev/sda*
hdparm -Z
Der Parameter -r0 entfernt den Schreibschutz, -Z speichert die Daten. Um dies zu automatisieren dürfe es kein Problem sein, eine entsprechende udev Rule zu erzeugen. Da ich aber von dieser Platte boote, würde udev hier nicht greifen. Daher habe ich einen angepassten Kernel gebaut, und im betroffenen USB Treiber den Check einfach auskommentiert. Die Stelle im SourceCode findet sich unter http://www.mail-archive.com/linux-usb-users@lists.sourceforge.net/msg16109.html
Es genügt in drivers/usb/storage/scsiglue.c die folgende if Bedingung auszukommentieren um den Schreibschutz komplett auszuschalten:
/*if (us->flags & US_FL_NO_WP_DETECT)*/
sdev->skip_ms_page_3f = 1;
Nach 9 Stunden kompilieren (Anleitung zum SLUG Kernel bau: http://www.nslu2-linux.org/wiki/Debian/BuildImage ) war das Paket fertig und funktioniert einwandfrei. Der aktuelle 2.6.18 Kernel mit dem Treiberpatch und den Kernelmodulen liegt unter: http://www.marc-bauer.de/files/linux-image-2.6.18-5-ixp4xx_2.6.18.dfsg.1-13etch4_arm.deb
DMesg nach dem Kernel Patch:
usb-storage: device found at 4
usb-storage: waiting for device to settle before scanning
Vendor: WD Model: 1600BEVExternal Rev: 1.02
Type: Direct-Access ANSI SCSI revision: 00
usb-storage: device scan complete
SCSI device sda: 312581808 512-byte hdwr sectors (160042 MB)
sda: assuming Write Enabled
sda: assuming drive cache: write through