
Ich versuche, ein Chaos auf einem Ubuntu 12.04 LTS-Serversystem mit ZFS zu beseitigen. Hier ist, was der Zpool-Status anzeigt:
pool: TB2
state: UNAVAIL
status: One or more devices could not be used because the label is missing
or invalid. There are insufficient replicas for the pool to continue
functioning.
action: Destroy and re-create the pool from
a backup source.
see: http://zfsonlinux.org/msg/ZFS-8000-5E
scan: none requested
config:
NAME STATE READ WRITE CKSUM
TB2 UNAVAIL 0 0 0 insufficient replicas
sdd ONLINE 0 0 0
sde ONLINE 0 0 0
sdf ONLINE 0 0 0
sdg ONLINE 0 0 0
sdh ONLINE 0 0 0
sdi ONLINE 0 0 0
sdj ONLINE 0 0 0
sds ONLINE 0 0 0
sdt UNAVAIL 0 0 0
pool: TB4
state: DEGRADED
status: One or more devices could not be used because the label is missing or
invalid. Sufficient replicas exist for the pool to continue
functioning in a degraded state.
action: Replace the device using 'zpool replace'.
see: http://zfsonlinux.org/msg/ZFS-8000-4J
scan: resilvered 2.52T in 16h41m with 0 errors on Tue Feb 6 09:27:46 2018
config:
NAME STATE READ WRITE CKSUM
TB4 DEGRADED 0 0 0
raidz2-0 DEGRADED 0 0 0
ata-Hitachi_HDS724040ALE640_PK1331PAG9MBVS ONLINE 0 0 0
ata-Hitachi_HDS724040ALE640_PK2311PAG8G71M ONLINE 0 0 0
ata-Hitachi_HDS724040ALE640_PK1331PAGH0LHV ONLINE 0 0 0
ata-Hitachi_HDS724040ALE640_PK2331PAG8MV3T ONLINE 0 0 0
spare-4 DEGRADED 0 0 0
ata-Hitachi_HDS724040ALE640_PK2311PAG614MM UNAVAIL 0 0 0
ata-Hitachi_HDS724040ALE640_PK1331PAGH0EAV ONLINE 0 0 0
ata-Hitachi_HDS724040ALE640_PK2331PAGH2XRW ONLINE 0 0 0
ata-Hitachi_HDS724040ALE640_PK1331PAG7TGDS ONLINE 0 0 0
ata-Hitachi_HDS724040ALE640_PK1331PAGG3K0V ONLINE 0 0 0
ata-Hitachi_HDS724040ALE640_PK2311PAG59PYM ONLINE 0 0 0
spares
ata-Hitachi_HDS724040ALE640_PK1331PAGH0EAV INUSE currently in use
errors: No known data errors
Ich möchte zwei Dinge tun: 1. Das fehlerhafte Laufwerk im Pool TB4 ersetzen. Ich weiß, wie das geht. 2. Pool TB2 vollständig zerstören und neu erstellen.
Normalerweise würde ich einfach ein zpool destroy TB2 ausführen und von vorne beginnen. Der vorherige Administrator hat jedoch sd*-Namen für TB2 und Festplatten-IDs für TB4 verwendet. Beim Betrachten von /dev/disk/by-id habe ich festgestellt, dass zwei der TB4-Laufwerke (...71M und ...EAV) symbolisch mit /dev/sdj bzw. /dev/sds verknüpft sind. Aber diese sdj und sds sind beide als Teil des TB2-Pools aufgeführt. Ich befürchte, dass ein zpool destroy TB2 die Laufwerke im TB4-Pool beschädigt, da in der Dokumentation steht, dass destroy auf die Mitgliedsfestplatten schreibt. Gibt es eine Möglichkeit, ZFS dazu zu bringen, TB2 einfach zu vergessen, ohne tatsächlich zu schreiben?
Ich habe den vorherigen Administrator gefragt, warum er zwei verschiedene Methoden verwendet hat (/dev/sd* und by-id). Er sagte, dass die Zuweisung von Laufwerksbuchstaben zu bestimmten Festplatten von Boot zu Boot nicht wiederholbar schien, also hat er beim Erstellen von TB4 by-id verwendet. Ich vermute, dass diese Verflechtung von TB2 und TB4 ein Ergebnis davon ist.
Mein aktueller Gedanke ist, Folgendes zu tun:
- die Maschine abschalten
- Ziehen Sie alle Laufwerke.
- Neustart.
- zpool zerstören -f TB2
- TB4-Laufwerke herunterfahren und neu installieren
- Formatieren Sie die TB2-Laufwerke auf einem anderen Computer neu
- Installieren Sie die TB2-Laufwerke neu und erstellen Sie einen neuen Pool mit Datenträger-IDs (nicht sd*).
Ist das sinnvoll? Gibt es einen einfacheren Weg?
Vielen Dank an jeden, der mir aus diesem Schlamassel heraushelfen kann.
Michael
Antwort1
Ihre vorgeschlagene Methode scheint zu funktionieren. Sie ist jedoch auch unnötig komplex. Stattdessen würde ich Folgendes vorschlagen:
zpool export TB2
. Dadurch werden alle mit dem Pool verbundenen Ressourcen ausgehängt, und Ihr System versucht nicht, sie erneut auszuhängen (und möglicherweise auf sie zu schreiben), es sei denn, Sie führen eszpool import
zuerst aus.- Reparieren Sie TB4. (Oder Sie können dies später tun.)
zpool create <new pool> ...
(Referenzieren Sie die Datenträger nach ID, um erneute Überschneidungen zu vermeiden). Möglicherweise müssen Sie die Erstellung erzwingen, da möglicherweise festgestellt wird, dass diese Datenträger von einem nicht importierten Pool verwendet wurden.
Wenn Sie einen Probelauf des Verfahrens durchführen möchten, können Sie meiner Meinung nach einige Volumes auf TB4 erstellen ( zfs create -V 5gb TB4/volume1
) und daraus zwei „verschachtelte Pools“ zpool create testpool1 ...
mit einem überlappenden Volume erstellen ( ). Alles andere sollte genauso funktionieren wie oben.