ZFS raidz1 Festplatten werden nicht erkannt

froozen

Neuling
Thread Starter
Mitglied seit
13.04.2013
Beiträge
7
Hallo zusammen,

in den letzten Tagen habe ich mich entschieden mein Softwareraid mit mdadm einzustampfen und lieber auf ZFS zu bauen.
Meine Erfahrungen mit ZFS sind praktisch noch nicht vorhanden, allerdings habe ich mich ausgiebig mit den Vor- und Nachteilen beschäftigt.

Wie das immer so ist wenn man eine neue Technik einsetzt unterlaufen einem schon mal Fehler und man stößt auf vermeintlich unlösbare Probleme. So ist es mir nun gestern ergangen.

Ich habe einen ZFS-Pool als raidz1 mit 4x1TB aufgesetzt. Als Betriebssystem kommt ein Ubuntu Server 12.04.2 LTS zum Einsatz welches auf einer separaten Festplatte installiert ist. Außerdem ist noch eine weitere bislang ungenutzte Platte im System.
Nach dem ich den Pool erstellt habe konnte ich auf diesen auch zugreifen. Nach einem Reboot nicht mehr.
Ein Blick in fdisk -l und zfspool status brachte mich zu dem Schluss, dass nach einem Reboot die Systemplatte von /dev/sda* nach /dev/sde* "gewandert" ist. Die zusätzliche Platte befand sich nun statt auf /dev/sdb auf /dev/sdf. Wieso das so ist habe ich bislang nicht klären können. Laut Status des zfspools waren /dev/sdc und /dev/sdd online und die anderen beide Platten eben nicht.
Die große Frage die sich mir nun stellt ist:
Wie kann ich meinen zfspool händisch und konsistent wieder zusammen bauen? Wo sind die Informationen hinterlegt welche Platten zu einem zfspool gehören?

Gruß
alex
 
Wenn Du diese Anzeige nicht sehen willst, registriere Dich und/oder logge Dich ein.
Also ich kann jetzt nur für FreeBSD und Solaris mit ZFS sprechen, aber mit

zpool import -f DEINPOOLNAME

in die Console eintragen, sollte dann wieder alles bei dir laufen. Damit wird das importieren erzwungen, auch wenn die Festplatten z.B. eine andere Reihenfolge haben, oder du einen neuen PC hast etc. Was nutzt du genau - ZFSonLinux oder ZFSfuse?
 
Danke für die schnelle Antwort.
Ich nutze ZFSonLinux.

Gruß Alex
 
Und klappt der Parameter denn bei dir? Geht zpool import oder musst du etwas anderes verwenden?
 
Hallo,
nein, leider funktioniert dieser Parameter nicht.

cannot import 'storage': a pool with that name is already created/imported,
and no additional pools with that name were found


Was ich allerdings beobachtet habe, an meinem System:
Hin und wieder haut mein Server die Blockdevices durcheinander was dann dazu führt das mein ZPool nicht mehr hoch kommt. Nach einen oder zwei Reboots funktioniert das dann allerdings.

Als Lösung habe ich nun zwei Ideen:
1. eine Udev-Regel
2. die Devices vom ZPool nicht mit den Device-Namen (/dev/sd?) sondern mit Disklabels dem ZPool zuweisen.
Hier denke ich sollte ein replace zum Erfolg führen.

Wenn ich so weit bin werde ich berichten.
Für weitere Vorschläge bin ich natürlich offen.

Gruß
Alex
 
Zuletzt bearbeitet:
Bei der erstellung von Raid Konfigurationen wird häufig vergessen das nur der admin das Raid selbst erstellen kann( es sei denn Benutzer XYZ hat die gleichen Rechter oder gesetzt bekommen) .Beim Raid muss man aber auch aufpassen und genauestens angeben wer darauf berechtigt ist drauf zuzugreifen und wer nicht. Für Testzwecke oder wenn es so gewollt ist reicht eigentlich aus :

sudo chroot -R user /dateisystem

Also Im Beispiel :

sudo chroot -R foo /bar


Wollte das nur mal so am Rande anmerken.
 
Hallo zusammen,

ich habs hinbekommen!
Da ein import mit zpool import -f MEINPOOL nicht funktionierte habe ich nach viel googeln und schlussendlich einem Gespräch mit einem Kollegen folgendes probiert:

zpool export MEINPOOL
(hierfür müssen die Laufwerke nicht einmal vorhanden sein)

und im zweiten Schritt

zpool import
(hierbei rödelte der Server kurz auf den Platten rum und zeigte mir dann meinen Pool mit allen Laufwerken an und gab mir den Hinweis das ich diesen nun auch importieren könne.)

mit
zpool import -f MEINPOOL
war mein RAIDZ sofort wieder online. Das resilvering war nach nicht mal einer Sekunde fertig.

Was nun jedoch anders ist; die Laufwerke werden nun nach ihren ID's benamst (ata-ST31000340NS_9QJ5EWFA). Somit kann es mir nun in Zukunft egal sein ob mein Server die Platten nach einem Reboot neu würfelt.

An dieser Stelle noch mal danke für die Hilfe.

Gruß
Alex
 
Stimm erst exportieren, hatte ich ganz verpeilt, wie will man was noch halb aktives denn auch importieren, meine Variante war auf z.B. auf einen Rechnerwechsel ohne vorher sauber zu exportieren alles wieder zu importieren.
 
Ich erwäge auch meinen 3Ware Controller in Rente zu schicken. Dazu habe ich eine Frage: Wenn ich ZFS nutzen möchte fürchte ich auch, dass die Vertauschung der Blockdevices dazu führen könnte, dass mein Diskpool in einen inkonsistenten Zustand überführt wird. Wie ist es dir gelungen, die Disks anhand ihrer ID zu referenzieren. Sonst kenne ich da auch nur den Kniff mit den udev-Rules, die ich aber teilweise als ein etwas müßiges Unterfangen empfinde.

Viele Grüße
 
Als ich meinen ZPool gebaut habe, habe ich auch nur auf die Pfade unter /dev zu den Blockdevices angegeben. Das Funktionierte ja auch erst mal bis mein System die Platten neu gewürfelt hat.
das referenzieren anhand der ID's hat das ZFS selbst getan (schlaues ZFS!).
Mit dem Befehl zpool import ohne Parameter durchsucht das System alle Platten nach möglichen Membern von x vielen ZPool's.
Hier tauchten bei mir erstmalig die ID's der Platten auf.
Beim Anlegen eines ZPools musst du aber nicht zwingend die Pfade zu den Blockdevices angeben. Du kannst auch die Pfade zu den ID's oder den Part-Labels nehmen. Sie müssen nur eindeutig sein.

Gruß
Alex
 
Verstehe ich dich richtig, wenn ich vermute, dass ich unter diesen Umständen sogar die physikalischen Ports angeben kann?

also effektiv soetwas wie:
Code:
lrwxrwxrwx 1 root root   9 Apr 16 10:10 pci-0000:00:1f.2-scsi-0:0:0:0 -> ../../sda
lrwxrwxrwx 1 root root  10 Apr 16 10:10 pci-0000:00:1f.2-scsi-0:0:0:0-part1 -> ../../sda1
lrwxrwxrwx 1 root root  10 Apr 16 10:10 pci-0000:00:1f.2-scsi-0:0:0:0-part2 -> ../../sda2
lrwxrwxrwx 1 root root   9 Apr 16 10:10 pci-0000:00:1f.2-scsi-1:0:0:0 -> ../../sr0

Somit ließe sich dann im Falle eines Hardwaredefektes auch irgendwie recht gut herausfinden welches Laufwerk einen mitbekommen hat. Die Pfade ändern sich tatsächlich nicht, es sei denn man wechselt die Disk zwischen den Ports.

Vielen Dank für die Antwort erstmal - mit mdraid habe ich mit RAID 1 sehr gute und mit RAID 5 eher schlechte Erfahrungen gemacht, ich denke der Schritt zu ZFS wird da einige Abhilfe schaffen. :)
 
Ich habe es nicht probiert aber das sollte gehen.
Ob der Pfad so clever ist bezweifle ich mal. Wenn du eine Platte aus deinem Pool mit einer anderen, z.B. deiner Systemplatte tauscht, dann passt diese zuordnung nicht mehr da diese ja ausschließlich an dem Port hängt. Das was mein ZPool da gemacht mit den ID's ist schon ne colle Nummer. Ich habe in der Bezeichnung den Plattentyp und die Seriennummer. Somit kann ich meine Platten nun an jedem Port in jeder beliebigen Reihnfolge betreiben und mein ZPool kommt immer konsistent zu stande. Sollte mal eine Platte ausfallen lässt diese sich anhand der Seriennummer eindeutig identifizieren.
Die Pfade machen in meinen Augen nur Sinn wenn du die Platten in einem Plattenkabinet betreibst. Hier kannst du dann im Fehlerfall schnell den richtigen Port finden.


Bei mir sieht das nun so aus:

Code:
  pool: storage
 state: ONLINE
  scan: resilvered 11K in 0h0m with 0 errors on Mon Apr 15 14:41:51 2013
config:

        NAME                                            STATE     READ WRITE CKSUM
        storage                                         ONLINE       0     0     0
          raidz1-0                                      ONLINE       0     0     0
            ata-ST31000340NS_9QJ5EWFA                   ONLINE       0     0     0
            ata-ST31000340NS_9QJ6LGRJ                   ONLINE       0     0     0
            ata-ST31000528AS_9VP6C67X                   ONLINE       0     0     0
            ata-Hitachi_HDS721010CLA332_JP2940HQ2M72JH  ONLINE       0     0     0

errors: No known data errors
 
Absolut berechtigter Einwand: Da die Seriennummer nach dem Wechsel (der defekten Disk) ohnehin geändert ist. Mein Gedanke war in diesem Zusammenhang: Ich verwende einen N36L (also einen HP Microserver), der 4 Harddisk Bays über einen Multilane Anschluss zur Verfügung stellt. Hier sind die Schächte durch nummeriert, sodass die Identifikation der Disk über diese Portnummer am einfachsten wäre.

Fragwürdig bleibt dann natürlich, in wieweit ZFS es mag, wenn ein bekanntes Volume einfach durch ein anderes ersetzt wird. In dem Fall der ID wird der Identifier definitiv geänder und ist so gewissermaßen unique. Sehr gut, dann freue ich mich die 18 Watt Schleuder endlich auf meinem Server zu verbannen. Ich werde vorher aber ein paar Tests mit virtuellen Volumes in einer VM machen, sodass die Umsetzung dann wirklich straight forward ist.
 
Du musst nicht unbedingt mit einer VM testen. Du kannst mit dd if=/dev/zero of=/PFAD zu DATEI/file.dd bs=1G count=1 z.B. 4 Dateien erzeugen und damit einen ZPool erstellen und dann den Fehlerfall durchspielen.
 
Es geht einfacher. Man kann bei dem Import mit der "zpool import -d verzeichnis" ein Verzeichnis angeben, in dem die jeweiligen Platten liegen z.B. /dev oder besser /dev/disk/by-id. Vorsicht in diesem Zusammenhang vor Sabayon Linux 11. Dieses Linux hat derzeit die Angewohnheit, das Pools nach einem Neustart nicht mehr eingebunden werden und die Daten darauf nicht mehr oder niemehr zugreifbar sind. Habe dazu auch schon im ZFS Stammtisch geschrieben. Das Sabayon Team sagt labidar, es würde an ZFSonLinux liegen. Dem ist aber nicht so! Manjaro Linux und z.B. Fedora machen es richtig. Dort stimmt auch "zpool iostat" was bei Sabayon auch fehlerhaft it.

PS: Die Option "zpool import -d" geht auch mit Zpools aus Dateien! Die Reihenfolge ist egal, da ZFS weis auf welcher Platte was liegt. Kurz die Platten müssen nur vorhanden sein.
 
Zuletzt bearbeitet:
Hardwareluxx setzt keine externen Werbe- und Tracking-Cookies ein. Auf unserer Webseite finden Sie nur noch Cookies nach berechtigtem Interesse (Art. 6 Abs. 1 Satz 1 lit. f DSGVO) oder eigene funktionelle Cookies. Durch die Nutzung unserer Webseite erklären Sie sich damit einverstanden, dass wir diese Cookies setzen. Mehr Informationen und Möglichkeiten zur Einstellung unserer Cookies finden Sie in unserer Datenschutzerklärung.


Zurück
Oben Unten refresh