zfs Problem

pom

Well-Known Member
Hallo,

ich habe folgendes zfs Setup durch einen Fehler erzeugt:

zroot DEGRADED 0 0 0
mirror-0 DEGRADED 0 0 0
gpt/disk0 ONLINE 0 0 0
1258502510117255584 OFFLINE 0 0 0 was /dev/gpt/disk2
gpt/disk1 ONLINE 0 0 0

disk1 habe ich ausersehen per "add" zu zroot hinzugefügt. Solle aber ein attach sein, um ein weiteres Mirrordevice für den mirror-0 zu haben.

Wie kann ich das Hinzufügen per "add" wieder rückgängig machen? Per "detach" geht es nicht (was auch so in der manpage beschrieben ist).

zpool detach zroot /dev/gpt/disk1
cannot detach /dev/gpt/disk1: only applicable to mirror and replacing vdevs


Gruss,
Peter
 
Einmal eingefügt, lassen sich normale vdev nicht mehr entfernen. Du musst den Pool neu erstellen.
 
Einmal eingefügt, lassen sich normale vdev nicht mehr entfernen. Du musst den Pool neu erstellen.

Hallo Yamagi,

kannst du mir einen Tip geben wie ich da am besten vorgehe?
Muss ich das ganze System neu aufsetzen und dann "meine Daten" neu reinspielen (welche Ordner neben /home wären das?).

Da habe ich mit einem Befehlt ja ziemlich in die Sch... gegriffen :-(

Gruß,
Peter
 
So wie ich das hier http://docs.oracle.com/cd/E19253-01/819-5461/gcfhe/index.html lese hat Yamagi nur "halb" recht. Bei Mirror lässt sich prinzipiell die Platte entfernen, jedoch nur, wenn es dann immer noch ein Mirror ist. Das ist bei dir leider nicht der Fall, dazu bräuchtest du jetzt noch eine weitere Platte.

Alternativ halt Komplettbackup des Systems (zfs send ?), Pool neu und dann wieder zurück mit den Daten.

ZFS ist leider, was das reorganisieren von Platten geht, leider nicht sehr flexibel. Das ist zwar ein ziemlich großer aber im Grunde verkraftbarer Nachteil.
 
@Nuke

Das ist interessant.

Wenn wir zu HD_01 über ein attach HD_02 dazupacken haben wir einen mirror und können jede beliebige Platte rausnehmen.
Wenn wir zu HD_01 über ein add HD_02 dazupacken, dann haben wir keinen Mirror, sondern einen großen Pool HD(HD_01+HD_02).
Wenn wir jetzt zu HD(HD_01+HD_02) über ein attach HD_03 dazupacken, dann meinst Du es gäb einen Mirror HD(HD_01+HD_02)|HD_03 und hier könnten wir jetzt HD_02 entfernen?

Habe ich das so richtig verstanden?
Ich stand vor einiger Zeit vor demselben Problem und sah keine andere Lösung, als den Pool platt zu machen und alles neu aufzusetzen.
 
na es ist letztlich ganz einfach (nur Hilft es in diesem Fall nicht weiter): aus einem ZFS Pool lassen sich keine vdevs entfernen. Einen Pool kann man sich als Stripe/Raid0 über eine Anzahl von vdevs vorstellen. Die vdevs können dann Mirrors, Raids oder auch einzelne Platten sein. Was möglich ist, ist aus einem Mirror eine Platte zu entfernen, weil dadurch keine Daten verloren gehen, nur redundanz. Was nicht geht ist ein vdev aus einem Pool entfernen, da ja schon Daten auf diesem liegen können.

Nun könnte man zwar zu der einzelnen Platte eine zweite als Mirror Device hinzufügen und hat damit quasi ein RAID 10. Also zwei Mirrors mit einem Stripe darüber - aber es lassen sich dann aus den beiden Mirrors nur jeweils eine Platte entfernen, ohne Daten zu verlieren. Letztlich gewinnt man damit nichts, denn man wird keinen der beiden Mirrors wieder los...
 
Wie gesagt, es steht ja so in der Doku:

You can use the zpool detach command to detach a device from a mirrored storage pool. For example:
# zpool detach zeepool c2t1d0



However, this operation fails if no other valid replicas of the data exist. For example:
# zpool detach newpool c1t2d0
cannot detach c1t2d0: only applicable to mirror and replacing vdevs
 
Man könnte es aber über den Mirror retten, wenn man den Pool auf einen Mirror erweitert, den Pool zieht und dafür eine einzelne passende Platte einsetzt - ein wenig durch den Kamin gekrochen, könnte aber hier und da hilfreich und schneller sein.
Wer hatte neulich nochmal irgendwas irgendwo gesichert? :D
 
Hallo,

nochmal als Zusammenfassung:

Wer hatte neulich nochmal irgendwas irgendwo gesichert?

Hatte tatsächlich am Mittwoch per USB eine 3. Platte als Mirror dran (resilvered) und damit ein noch "korrektes" System in Schrank. Die habe ich jetzt eingebaut und von dort wieder aufgesetzt. Den halben Tag "Datenverlust" kann ich verkraften. Ist mir lieber wie alles nochmal aufzusetzen.

Glück gehabt!

Danke für die Tips,
Peter
 
Was machst du denn jetzt genau?

Hintergrund: Mein Pool besteht aus einem Mirror mit 3 Platten. Eine Platte des Mirrors ist eine USB Platte, die ich nur ab und an dranhänge und warte bis alles synchronisiert ist. Dann hänge ich sie wieder ab und leg sie in den Schrank.

Diese Platte hatte kurz von dem "add" Befehl dran und synchr. aber schon wieder offline, sodass das geänderte ZFS Poolformat noch nicht da drauf war.

Daher habe ich alle Platten ausgebaut und diese USB Platte eingebaut.
Davon das System gestartet und die anderen beiden Platten eine nach der
anderen "geputzt" und dann wieder zum Mirror hinzugefügt (diesmal per attach!).

Die 2. Platte wird gerade synchronisiert (dauert jeweils ca. 6h).

Eine der dann 3 Platten baue ich dann wieder in den USB Rahmen ein.
Das hat sich jetzt schonmal bewährt, dass nicht immer alle Platten des
Mirrors online sind. Eigentlich war das mein Schutz wenn mal ein Blitz
o.ä. den Rechner schrottet. Hilft aber auch gegen Admin Fehler.

Gruß,
Peter
 
Danke für die Ausführung - Interessanter Ansatz. Der Datenverlust wird dann aber durch deine manuelle Interaktion (Motivation die Platte regelmäßig dranzuhängen) bestimmt - das wäre glaube ich schon nichts für mich :)

Gruß
Markus
 
Das ist wirklich eine interessante Idee, aber ich bekomme dabei intuitiv Bauchschmerzen. Kann nicht wirklich erfassen, woran das nun liegt, aber irgendwie stößt mich da was.
Hast du diese Idee selbst gehabt? Oder gibt es damit Erfahrungen und weitere Information?
 
Ich denke sinnvoller wäre es, auf der USB Platte einen separaten Pool zu erstellen und dann mittels zfs send/recv eine Kopie deines mirrors darauf zu machen. Hat einen großen Vorteil: es wird nur kopiert, was noch nicht auf dem zweiten Pool ist. Dagegen wird bei einem Rebuild der Platte immer die komplette Platte neu bespielt, was Zeit kostet. Booten könntest du auch von dem Pool auf der USB Platte...

Just my 2 cents. Deine Lösung klappt natürlich auch so super.
 
Also seit ZFS Split beherrscht ist für Pools aus Mirrors das Hinzufügen neuer Platten zu allen Mirrors und anschließend die neuen Platten in einen neuen Pool abzuspalten die mit Abstand schnellste Methode einen Pool zu duplizieren. Ein Problem an dieser Methode ist, dass du zwei Sätze Backupplatten brauchst, weil sonst ausgerechnet während des Backups keine Kopie mehr existiert. Meistens ist es in der Praxis sinnvoller die Änderungen als Replicationstream zu übertragen.
 
Ein Problem an dieser Methode ist, dass du zwei Sätze Backupplatten brauchst, weil sonst ausgerechnet während des Backups keine Kopie mehr existiert.

Also bitte, zum einen gehe ich doch davon aus, daß das erste, was man in totaler Panik macht, ein Backup ist und wenn man schon den Pool verfuckelt hat, kann man dann auch Mut zur Lücke haben. ;)
 
Das ist wirklich eine interessante Idee, aber ich bekomme dabei intuitiv Bauchschmerzen. Kann nicht wirklich erfassen, woran das nun liegt, aber irgendwie stößt mich da was.
Hast du diese Idee selbst gehabt? Oder gibt es damit Erfahrungen und weitere Information?

Mach ich seit langem so, ohne irgendwelche Probleme.
 
Zurück
Oben