ZFS Disc replacement?

FerienBSD

Well-Known Member
Hat jemand erfahrung wie man einen defekten Disc ersetzt mit ZFS?

Mein System:
HP DL380 G5
FreeBSD 8.1-RELEASE
ZFS 14

5 x 2TB in raidz1 eine davon ist defekt

root@168:/> zpool status
pool: storage01
state: ONLINE
status: One or more devices has experienced an unrecoverable error. An
attempt was made to correct the error. Applications are unaffected.
action: Determine if the device needs to be replaced, and clear the errors
using 'zpool clear' or replace the device with 'zpool replace'.
see: http://www.sun.com/msg/ZFS-8000-9P
scrub: none requested
config:

NAME STATE READ WRITE CKSUM
storage01 ONLINE 0 0 0
raidz1 ONLINE 0 0 0
label/zfsdisc01 ONLINE 0 0 0
label/zfsdisc02 ONLINE 42 0 0
label/zfsdisc03 ONLINE 0 0 0
label/zfsdisc04 ONLINE 0 0 0
label/zfsdisc05 ONLINE 0 0 0

errors: No known data errors

Aber im Messages kommt ständig das hier:

Aug 19 08:29:51 168 kernel: ciss1: *** Fatal drive error: SCSI port 2 ID 2
Aug 19 08:29:51 168 kernel: ciss1: FATAL I/O ERROR on logical drive 1 (), SCSI port 1 ID 2
Aug 19 08:29:51 168 kernel: (da3:ciss1:2:1:0): READ(10). CDB: 28 0 26 77 cd 80 0 0 80 0
Aug 19 08:29:51 168 kernel: (da3:ciss1:2:1:0): CAM status: SCSI Status Error
Aug 19 08:29:51 168 kernel: (da3:ciss1:2:1:0): SCSI status: Check Condition
Aug 19 08:29:51 168 kernel: (da3:ciss1:2:1:0): SCSI sense: MEDIUM ERROR csi:26,77,cd,80 asc:11,0 (Unrecovered read error)
Aug 19 08:29:52 168 kernel: ciss1: *** Fatal drive error: SCSI port 2 ID 2
Aug 19 08:29:52 168 kernel: ciss1: FATAL I/O ERROR on logical drive 1 (), SCSI port 1 ID 2
Aug 19 08:29:52 168 kernel: (da3:ciss1:2:1:0): READ(10). CDB: 28 0 26 77 cd 80 0 0 80 0
Aug 19 08:29:52 168 kernel: (da3:ciss1:2:1:0): CAM status: SCSI Status Error
Aug 19 08:29:52 168 kernel: (da3:ciss1:2:1:0): SCSI status: Check Condition
Aug 19 08:29:52 168 kernel: (da3:ciss1:2:1:0): SCSI sense: MEDIUM ERROR csi:26,77,cd,80 asc:11,0 (Unrecovered read error)
Aug 19 08:29:53 168 kernel: ciss1: *** Fatal drive error: SCSI port 2 ID 2
Aug 19 08:29:53 168 kernel: ciss1: FATAL I/O ERROR on logical drive 1 (), SCSI port 1 ID 2
Aug 19 08:29:53 168 kernel: (da3:ciss1:2:1:0): READ(10). CDB: 28 0 26 77 cd 80 0 0 80 0
Aug 19 08:29:53 168 kernel: (da3:ciss1:2:1:0): CAM status: SCSI Status Error
Aug 19 08:29:53 168 kernel: (da3:ciss1:2:1:0): SCSI status: Check Condition
Aug 19 08:29:53 168 kernel: (da3:ciss1:2:1:0): SCSI sense: MEDIUM ERROR csi:26,77,cd,80 asc:11,0 (Unrecovered read error)
Aug 19 08:29:54 168 kernel: ciss1: *** Fatal drive error: SCSI port 2 ID 2
Aug 19 08:29:54 168 kernel: ciss1: FATAL I/O ERROR on logical drive 1 (), SCSI port 1 ID 2
Aug 19 08:29:54 168 kernel: (da3:ciss1:2:1:0): READ(10). CDB: 28 0 26 77 cd 80 0 0 80 0
Aug 19 08:29:54 168 kernel: (da3:ciss1:2:1:0): CAM status: SCSI Status Error
Aug 19 08:29:54 168 kernel: (da3:ciss1:2:1:0): SCSI status: Check Condition
Aug 19 08:29:54 168 kernel: (da3:ciss1:2:1:0): SCSI sense: MEDIUM ERROR csi:26,77,cd,80 asc:11,0 (Unrecovered read error)
Aug 19 08:29:54 168 root: ZFS: vdev I/O failure, zpool=storage01 path=/dev/label/zfsdisc02 offset=330437427200 size=65536 error=5
Aug 19 08:29:54 168 kernel: ciss1: *** Fatal drive error: SCSI port 2 ID 2
Aug 19 08:29:54 168 kernel: ciss1: FATAL I/O ERROR on logical drive 1 (), SCSI port 1 ID 2
Aug 19 08:29:54 168 kernel: (da3:ciss1:2:1:0): READ(10). CDB: 28 0 26 77 cd 80 0 0 80 0
Aug 19 08:29:54 168 kernel: (da3:ciss1:2:1:0): CAM status: SCSI Status Error
Aug 19 08:29:54 168 kernel: (da3:ciss1:2:1:0): SCSI status: Check Condition
Aug 19 08:29:54 168 kernel: (da3:ciss1:2:1:0): SCSI sense: MEDIUM ERROR csi:26,77,cd,80 asc:11,0 (Unrecovered read error)





Die neue Platte ist bereit und im System eingebaut.

Wäre dankebar um einige praxitips, denn ich möchte, wenns geht einen crash der Daten um jeden Preis verhindern versuchen...

Danke schonmal ;)
 
Zuletzt bearbeitet:
'zpool replace [pool] [device] [new device]'
also z.B.
da0s0a des Pools 'swimmingpool' ist im Arsch und du willst sie durch da0s01a ersetzen bruellste

'zpool replace swimmingpool da0s0a da0s1a'

Im Zweifel ist bei sowas auch die -f Option dein Freund.

Dann kannste evtl. noch bestehende Fehler die durch die kaputte Platte loswerden durch ein 'zpool clear [poolname]'
und mit einem 'zpool scrub [poolname]' kannste dann nochmal nen scrub machen um zu sehen, dass der reparierte Pool tut.

Wenn die Platte, die du ausgetauscht hast am selben Controllerport ersetzt wurde reicht ein 'zpool replace [poolname] [device]'
 
Danke für die Hilfe. Das habe ich soweit mal in meinem disaster recovery Plan aufgenommen.
Leider weiss ich noch nicht wie ich die defekte Platte genau identifiziere, möchte ja nicht eine falsche rausziehen.

Die neue steckt jetzt schonmal im RAID Storage und schnurrt vor sich hin... Die neue Platte heisst /dev/da10

Sobald ich genügend Infos zusammen habe und mir einigermassen sicher bin wie das gehen soll, beginne ich Schritt für Schritt...
 
Moin,

bringe dein Backup _vor_ der Aktion auf Vorderman ;-) Aber blinkt die Platte nicht im Ihrem Drivecage? Wenn nicht dann boote die Kiste mal neu und gehe ins Controllerbios, dort kannst du jede Platte aus wählen und de ausgewählte Platte blinkt dann im Cage (bei mir blau). Dann schreibe dir alle Platten auf und versuche dann die Biosnamen mit den BSD Daten abzugleiche, so bekommst du raus welche das ist. Im Idealfall sagt dir schon der cciss welche Platte tot ist.

Gruß ré
 
Zwei Fragen noch...

1. Muss ich die defekte Platte vor dem replace auf offline schalten?

2. das mit dem identifizieren ist nicht mal so einfach... ciss sagt mir nicht welche... es soll ja da3 sein die defekt ist aber im Compaq SmartArray 6400 Bios haben die Platten noch keinen sichtbaren Namen..
Hat da jemand noch eine Idee?

Danke!
 
zu 1; Ja. besser ist es.

Vielleicht steckst du, um zukünftige Konfusion mit Plätzen zu vermeiden, die neue Platte genau dahin, wo die alte war.
dann: siehe oben post MuffiXXL ...
warte bis der Pool fertig resilvered ist.
(zpool status zeigt: resilvering .. etc. )
Das ganze funktioniert normalerweise anstandslos gut, also keine Panik ;)
Und dann ist gut.

All das ist übrigens ziemlich einfach in den entsprechenden manpages detailliert beschrieben.

Noch 'ne Randbemerkung:
Es hört sich so an, als ob da eine Menge Platten und die entsprechenden Kabel verbaut sind.
Schau doch mal, ob die Kabel alle richtig stecken, da löst sich manchmal was. Spart evtl. die andere Prozedur.
 
zu 1; Ja. besser ist es.
Danke ;)

Vielleicht steckst du, um zukünftige Konfusion mit Plätzen zu vermeiden, die neue Platte genau dahin, wo die alte war.
dann: siehe oben post MuffiXXL ...
warte bis der Pool fertig resilvered ist.
(zpool status zeigt: resilvering .. etc. )
Das ganze funktioniert normalerweise anstandslos gut, also keine Panik ;)
Und dann ist gut.
Werde ich versuchen so zu machen, muss eben erst rausfinden welche platte es physikalisch ist. Es sind insgesamt 12 solche Platten in einem MSA20 Storage Cage.


All das ist übrigens ziemlich einfach in den entsprechenden manpages detailliert beschrieben.
Schon so, möchte aber einfach auf nummer sicher gehen, kann nicht pröbeln wie sonst ;)

Noch 'ne Randbemerkung:
Es hört sich so an, als ob da eine Menge Platten und die entsprechenden Kabel verbaut sind.
Schau doch mal, ob die Kabel alle richtig stecken, da löst sich manchmal was. Spart evtl. die andere Prozedur.
Nur ein Kabel zum Server resp. Controller SmartArray 6400. Die Platten sind in einem MSA20 Cabinet. Aber Danke für den Hinweis.
 
"einen crash der Daten um jeden Preis verhindern versuchen"
Kein Backup? Mutig...

Also...Backup machen (zumindest der wichtigen Daten), dann:

Zuerst die neue Platte mit einem Label versehen (weil das bisher eben auch schon so gemacht wurde und zudem Vorteile bringt):

glabel label yournewdisc /dev/da10

zpool offline storage01 label/zfsdisc02
zpool replace storage01 label/zfsdisc02 label/yournewdisc
zpool online storage01 label/yournewdisc

Resilver abwarten...fertig. Alte Disk ausbauen.

Bzw.: Wenn du das ganze im selben Slot austauschen willst, dann machst du den Plattentausch und das glabel auf die selbe Adresse (da3), nachdem die neue Platte drin ist, bevor du dann das "zpool replace" durchführst.

Das mit dem Überprüfen der Kabel ist auch wichtig...war bei mir schon mehrmals der eigentliche Grund für Probleme während die Platte eigentlich fehlerfrei war. Und damit meine ich jetzt nicht nur kucken, ob es steckt, sondern wirklich mal Stecker ziehen und neu aufstecken.

Wg. Identifizierung der Platte: Nachdem du die Platte Offline genommen hast, schiebst du einfach ein paar Gigabyte Daten auf den Pool...alle Platten müssten dann mit ihren Aktivitäts-LEDs blinken...bis auf die Platte, welche du offline genommen hast.
 
Zuletzt bearbeitet:
Moin Leute,

das MSA20 ist ein externes Festplattengehäuse, da gibt es keine Kabel(bis auf das Kabel vom Controller zur MSA20).

Gruß ré

P.S. wie hoch ist deine Schreibrate mit welchem Protokoll?
 
Ersetze Kabel durch Steckverbindung...die an der Backplane dann eben :-)
Evtl. hilft schon ein simples "offline" - "rausnehmen der fehlerhaften Platte" - "einsetzen der gleichen Platte" - "online" (resilver und scrub).
 
Dann ein kleiner Tipp fuer die Zukunft...
Label die Platten mit ner Art Seriennummer und schreib die sichtbar auf die Platte oder schreib auf die Platte als welches Device sie angesprochen wird.... dann findest du in Zukunft gleich welche Kaputt ist ;-)

Was du zur Not auch tun kannst ist die neue Platte resilvern lassen und dann ausprobieren :P Schoen wird das aber nicht, kann ich dir gleich sagen.
 
Ersetze Kabel durch Steckverbindung...die an der Backplane dann eben :-)
Evtl. hilft schon ein simples "offline" - "rausnehmen der fehlerhaften Platte" - "einsetzen der gleichen Platte" - "online" (resilver und scrub).

Werde mich hüten an der Hardware zu rütteln, die anderen Platten funktionieren ja, sobald die defekte ersetzt ist kann ich mit dieser dann einen Garantieersatz anfordern, dann erhalte ich eine Neue ;)
Auch versuchen die "defekte" wider zu reanimieren werde ich in diesem Umfeld unterlassen, das Risiko dass etwas schief geht ist mir momentan einfach zu hoch.. ;-) Aber generell hast Du recht in anderen Arrays habe ich das desöfteren so gemacht, aber irgendwann stirbt die Platte meistens dann doch noch. Wenn die Garantie abgelaufen wäre würde ich mir das überlegen ...

Die wird dann vermutlich online Spare oder sowas...
 
Dann ein kleiner Tipp fuer die Zukunft...
Label die Platten mit ner Art Seriennummer und schreib die sichtbar auf die Platte oder schreib auf die Platte als welches Device sie angesprochen wird.... dann findest du in Zukunft gleich welche Kaputt ist ;-)
Das ist ein ganz guter Tipp, Danke. Habe das angefange zu machen bei den neueren MSA20... Danke!

Was du zur Not auch tun kannst ist die neue Platte resilvern lassen und dann ausprobieren :P Schoen wird das aber nicht, kann ich dir gleich sagen.
Was meinst Du mit das wird nicht schön?
 
mit zpool iostat -v

Gruß ré

Danke... ;)

zpool iostat -v
capacity operations bandwidth
pool used avail read write read write
------------------- ----- ----- ----- ----- ----- -----
storage01 4.52T 4.55T 63 3 7.36M 10.3K
raidz1 4.52T 4.55T 63 3 7.36M 10.3K
label/zfsdisc01 - - 28 1 1.53M 2.87K
label/zfsdisc02 - - 28 1 1.52M 2.93K
label/zfsdisc03 - - 28 1 1.53M 2.86K
label/zfsdisc04 - - 28 1 1.53M 2.86K
label/zfsdisc05 - - 28 1 1.53M 2.86K
------------------- ----- ----- ----- ----- ----- -----
 
http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/filesystems-zfs.html

sollte in dem Zusammenhang vielleicht noch erwähnt werden. Da fand ich eigentlich alles, was ich brauchte.

Die Platten zu identifizieren kann in echte Arbeit ausarten.
Vielleicht hilft smartctl, denn damit kannst du die (interne) Serien-Nummer jeder Platte auslesen und vielleicht findest du dann diese irgendwo aufgeklebt.
Ansonsten fällt mir ataidle ein, womit die Platten getrennt schlafen geschickt werden können. Dazu ist sicher sinnvoll, vorher den zpool offline zu nehmen.
Alleine zum Finden der gestörten Platte sollte es aber auch Online ohne Probleme funktionieren, ist aber vielleicht nicht nötig?
 
smartctl ist schön und gut, der schnellere Weg die Seriennummer auszulesen geht über diskinfo.
Code:
diskinfo -v /dev/ada0 | grep ident

Den Tipp, die Seriennummer (sollte auf jeder Markenplatte stehen) in das label/gptlabel aufzunehmen, kann ich nur unterstreichen.
 
Kleiner Zwischenstatus:

Nachdem ich 98% aller Daten auf dem neuen Backupdevice backupen konnte, habe ich die fehlerhafte Platte Offline gesetzt und den Replace initiiert. Das resilvern läuft nun schon seit ca. 12Std. und wird noch weitere 15-20 Std. dauern.

Im Grossen Ganzen sieht es sehr gut aus, auch die Lesezugriffe funktionieren ohne Probleme. Sobald Resilver und Scrub fertig sind mache ich erneut einen Backup und berichte nochmals kurz hier.

An dieser Stelle schonmal ein grosses Dankeschön an alle die mir geholfen haben!
 
So, es ist erfolgreich vollbracht! Nun ist auch dieses kleine pool wieder intakt und Backup perfekt.


*********************** schnipp *********************************************
pool: storage01
state: ONLINE
scrub: resilver completed after 33h22m with 0 errors on Thu Aug 25 07:44:05 2011
config:

NAME STATE READ WRITE CKSUM
storage01 ONLINE 0 0 0
raidz1 ONLINE 0 0 0
label/zfsdisc01 ONLINE 0 0 0 547M resilvered
label/zfsdisc10 ONLINE 0 0 0 868G resilvered
label/zfsdisc03 ONLINE 0 0 0 549M resilvered
label/zfsdisc04 ONLINE 0 0 0 548M resilvered
label/zfsdisc05 ONLINE 0 0 0 548M resilvered

errors: No known data errors
*********************** schnipp *********************************************


Danke Euch, habe mich wesentlich sicherer gefühlt dank Eurer Unterstützung!
 
Zurück
Oben