[SOLVED] ZFS Replace

Haithabu84

Well-Known Member
Oct 19, 2016
119
4
58
32
Hallo,

habe mal eine kurze Frage. Musste jetzt einen Routine-Server komplett neu aufsetzen und habe mich für ein ZFS Mirror entschieden, bestehend aus zwei Enterprise SSDs. Ist ein Standalone-Node mit drei LXC-Containern.

Bin gerade meine Konfiguration am testen und wollte jetzt simulieren, was passiert wenn eine Festplatte einfach entfernt wird. Also sda entfernt und sdb funktionierte weiter.

Jetzt möchte ich die Platte sda natürlich wieder hinzufügen, also:

Code:
zpool replace rpool /dev/sda

da sagt er:

Code:
invalid vdev specification
use '-f' to override the following errors:
/dev/sda2 contains a filesystem of type 'vfat'

wenn ich stattdessen sda3 angebe:

Code:
invalid vdev specification
use '-f' to override the following errors:
/dev/sda3 is part of active pool 'rpool'

und wenn ich die ID aus 'zpool status' verwende, statt '/dev/sdax' dann sagt er das diese bereits ebenfalls Member des Pools wäre. Es findet aber kein Resilver statt und der Status bleibt weiterhin auf degraded.

Muss man wirklich die Platte komplett einen Replace unterziehen, also mit Formatierung oder kann man die nicht einfach wieder hinzufügen? Muss man den Resilver manuell anstarten?

Gruß
 
Ich glaube es müsste `zpool attach` verwendet werden - siehe `man zpool`

Hoffe das hilft!
 
Dann kommt dieser Fehler hier, er will auch unbedingt ein Device was er "austauschen" kann:

Code:
zpool attach -f rpool /dev/sda /dev/sda
invalid vdev specification
the following errors must be manually repaired:
/dev/sda3 is part of active pool 'rpool'
 
Habe die sda jetzt einfach mal an einem anderen Rechner komplett formatiert und dann bin ich nach diesem Workaround vorgegangen:

https://pve.proxmox.com/wiki/ZFS:_Tips_and_Tricks#Replacing_a_failed_disk_in_the_root_pool

Das funktioniert aber nicht und musste einige andere Schritte unternehmen. Mein weg war jetzt folgender:

Code:
zpool offline rpool /dev/sda     #Offline nehmen
zpool detach rpool /dev/sda    #Aus rpool entfernen
#Festplatte formatieren
sgdisk --replicate=/dev/sda /dev/sdb #Partitionen replizieren
sgdisk --randomize-guids /dev/sda  #random UID
zpool attach rpool "Label-im-rpool-von-sdb" "UUID-von-sda" #sda wieder dem pool hinzufügen

Ich wäre für anderweitige Vorschläge oder Tipps offen. Würde mich interessieren ob es da noch eine andere Best-Practice-Lösung gibt.

Wie kann man die Labels der Disk im Pool eigentlich ändern?
 
Ich habe das jetzt hier nochmal nachgestellt:
* nach dem entfernen der disk war sie im `zpool status` output als 'UNAVAIL' dargestellt.
* Danach habe ich sie mittels `zpool detach` entfernen müssen
* ich habe sie wieder in das System gesteckt
* `zpool attach rpool /dev/sdb /dev/sda`

der resilver hat direkt funktioniert (und nicht lange gedauert, da die daten ja noch vorhanden waren.

Hoffe das hilft fürs nächste mal!
 
  • Like
Reactions: Haithabu84
Ich habe das jetzt hier nochmal nachgestellt:
* nach dem entfernen der disk war sie im `zpool status` output als 'UNAVAIL' dargestellt.
* Danach habe ich sie mittels `zpool detach` entfernen müssen
* ich habe sie wieder in das System gesteckt
* `zpool attach rpool /dev/sdb /dev/sda`

der resilver hat direkt funktioniert (und nicht lange gedauert, da die daten ja noch vorhanden waren.

Hoffe das hilft fürs nächste mal!

Vielen Dank. So geht es natürlich auch.
 
Hinweis ggf. einfach nur an mich selbst, falls ich das nächste mal auf das Problem stoße:

Ich bin auch wie oben vorgegangen:
- Festplatte kaputt. Direkt so defekt, dass sie das System fast zum Absturz gebracht hat (alles sehr träge) und ZFS sie rausgeschmissen hat. Ich hab sie detached, sodass ich kein Mirror Device mehr hatte.
Neue Festplatte eingebaut, eingebaute Festplatte hatte ab Werk irgendwelche Partitionen drauf.

Dann wollte ich das Layout der bestehenden Festplatte auf die Neue Übertragen, insbesondere Partition-Layout, EFI-Partiton und Boot-Partition.
Ich habe hierzu leider keine vernünftigen Kommandos gefunden, also hab ich – vermutlich gegen jede Regel – einfach ein `dd` der bestehenden Festplatte auf die Neue durchgeführt, die ersten 5 GB und dann abgebrochen und reboot durchgeführt, um das Layout zu laden.

Dann wollte ich wie oben angegeben mit
Code:
zpool attach rpool /dev/path-to-old /dev/path-to-new
resilvern.

Das ist gescheitert mit
Code:
/dev/sda3 is part of active pool 'rpool'

Mir war klar warum, weil ich natürlich die Partition ID via `dd` mitkopiert habe.
Also habe ich die neue Ziel-Partition, die für ZFS relevant ist noch einmal überschrieben mit `dd if=/dev/zero of=/dev/sda3`, danach hat das resilver gelappt.
 
Last edited:
Dann wollte ich das Layout der bestehenden Festplatte auf die Neue Übertragen, insbesondere Partition-Layout, EFI-Partiton und Boot-Partition.
Ich habe hierzu leider keine vernünftigen Kommandos gefunden, also hab ich – vermutlich gegen jede Regel – einfach ein `dd` der bestehenden Festplatte auf die Neue durchgeführt, die ersten 5 GB und dann abgebrochen und reboot durchgeführt, um das Layout zu laden.
Siehe https://pve.proxmox.com/wiki/ZFS_on_Linux#_zfs_administration Abschnitt "Changing a failed bootable device". Da stehen alle Befehle.
 

About

The Proxmox community has been around for many years and offers help and support for Proxmox VE, Proxmox Backup Server, and Proxmox Mail Gateway.
We think our community is one of the best thanks to people like you!

Get your subscription!

The Proxmox team works very hard to make sure you are running the best software and getting stable updates and security enhancements, as well as quick enterprise support. Tens of thousands of happy customers have a Proxmox subscription. Get yours easily in our online shop.

Buy now!