Festplatte unter Linux identifizieren und im laufenden Betrieb ausbauen

Meist überwacht man Festplatten mittels SMART auf Basis ihrer Devicekennung (z.B. /dev/sda). Wenn aber dann tatsächlich eine Platte beginnt, Fehler anzuzeigen, ist es ratsam, diese rechtzeitig zu tauschen - doch die Buchstabencodes der Device Kennung müssen nicht mit den physischen SATA-Anschlüssen übereinstimmen.

Um den zugehörigen SATA Anschluss am Mainboard zu finden, ruft man mit lshw die komplette Hardwarekennung auf und sucht nach dem Eintrag des SATA Controllers, in meinem Fall:

[...]
*-storage
description: SATA controller
product: SB700/SB800 SATA Controller [AHCI mode]
[...]

In dessen Gefolge finden sich die einzelnen Festplatten, nummeriert mit 0 beginnend, z.B.

           *-disk:0
                description: ATA Disk
                product: ST380815AS
                vendor: Seagate
                physical id: 0
                bus info: scsi@2:0.0.0
                logical name: /dev/sda
                version: 3.AA
                serial: 6QZ1M1RB
                size: 74GiB (80GB)
                capabilities: partitioned partitioned:dos
                configuration: ansiversion=5 signature=0009da43
              *-volume:0
                   description: EXT4 volume
                   vendor: Linux
[...]

Der Eintrag verrät uns , dass an meinem ersten SATA Anschluss (disk:0) eine Seagate Festplatte (mit Modell und Seriennummer zu Identifikation) hängt, die im System als /dev/sda erkannt ist, und 80 GB Speicher hat.

Wenn, wie in meinem Fall also /dev/sdc Fehler meldet, sucht man im Output von lshw nach der Device Kennung und findet so die Disc-Nummer am Controller (Achtung: lshw beginnt bei 0 zu zählen, während SATA-Ports meist bei 1 beginnen!)

In meinem Fall hängt sdc an disc:2, also SATA Port 3 - Ein Blick ins Gehäuse gibt mir hier noch Sicherheit, dass dem tatsächlich so ist. Oft ist das aber nicht möglich - daher diese Anleitung.

(Achtung: Ich kann gerade nicht garantieren, wie lshw die Nummerierung durchführt, wenn auf der Platine SATA Anschlüsse ausgelassen werden. Es beim Hantieren mit Festplatten im laufenden Betrieb IMMER äußerste Vorsicht geboten. Alle Handgriffe sollten immer 2-mal verifiziert werden!)

Zum Ausbau der Festplatte im laufenden Betrieb sollte diese in einem Wechselrahmen eingebaut sein - das verhinder Kurzschlüsse und andere Probleme mit den Steckern. Außerdem muss der SATA Controller und das Betriebssystem hot-swap-fähig sein, was aber bei modernen Geräten und Distributionen der Fall sein sollte.

Auf jeden Fall muss darf die Platte nicht gemountet sein! Wenn sie Teil eines Raids ist sollte sie auch geordnet aus diesem entfernt werden, z.B. mit

mdadm --manage /dev/md0 --fail /dev/sdc1
mdadm --manage /dev/md0 --remove /dev/sdc1

Dabei wird die Platte für den Software-Raid Controller als fehlerhaft markiert und dann entfernt.

Außerdem habe ich zur Sicherheit die Platte heruntergefahren, bevor ich ihr gewaltsam den Stecker gezogen habe - doch davor holen wir uns die scsi-host Nummer:

ls -al /sys/block/sdc
[...] /sys/block/sdc -> ../devices/pci0000:00/0000:00:11.0/host4/target4:0:0/4:0:0:0/block/sdc

... es ist in diesem Fall die Nummer 4!
Jetzt können wir die Platte herunterfahren

echo 1 > /sys/block/sdc/device/delete

Das machte es bei mir allerdings auch notwendig, einen Re-Scan manuell durchzuführen, wofür wir die scsi-host Nummer von vorhin brauchen:

echo "0 0 0" > /sys/class/scsi_host/host4/scan

(Achtung: Hier kann es passieren, dass die Laufwerksbuchstaben sich ändern. Bei mir war es der Fall, weil ich die Platte nicht ordnugnsgemäß aus dem Raid entfernt hatte und der Kernel daher den Buchstaben noch reserviert hatte, obwohl die Platte schon ausgebaut war.)

Quellen:
http://www.howtoforge.com/replacing_hard_disks_in_a_raid1_array
http://forums.whirlpool.net.au/archive/1041574