Zwei verwickelte ZFS-Pools?

312
Michael

Ich versuche, ein Chaos auf einem Ubuntu 12.04 LTS-Serversystem mithilfe von ZFS zu beseitigen. Der Zpool-Status zeigt Folgendes:

 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. Ersetzen Sie das fehlerhafte Laufwerk in Pool TB4. Das weiß ich, wie es geht. 2. Pool TB2 vollständig zerstören und neu erstellen.

Normalerweise würde ich einfach einen zpool zerstören und TB2 von vorne beginnen. Der vorherige Administrator verwendete jedoch sd * -Namen für TB2 und Platten-IDs für TB4. Beim Betrachten von / dev / disk / by-id entdeckte ich, dass zwei der TB4-Laufwerke (... 71M und ... EAV) jeweils mit / dev / sdj und / dev / sds verknüpft sind. Diese sdj und sds werden jedoch beide als Teil des TB2-Pools aufgeführt. Ich befürchte, dass ein TB2 mit zpool destroy die Laufwerke im TB4-Pool beschädigt, da die Dokumente besagen, dass die Schreibvorgänge von destroy auf die Mitgliedsdatenträger geschrieben werden. 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 Zuordnung von Laufwerksbuchstaben zu bestimmten Festplatten von Boot zu Boot nicht wiederholbar schien. Als er TB4 erstellte, benutzte er by-id. Ich denke, diese Verschränkung von TB2 und TB4 ist ein Ergebnis davon.

Mein aktueller Gedanke ist dies zu tun:

  1. Maschine ausschalten
  2. Ziehen Sie alle Laufwerke.
  3. Starten Sie neu.
  4. zpool zerstöre -f TB2
  5. Fahren Sie die TB4-Laufwerke herunter und installieren Sie sie erneut
  6. Formatieren Sie die TB2-Laufwerke auf einem anderen Computer neu
  7. Installieren Sie die TB2-Laufwerke erneut und erstellen Sie einen neuen Pool unter Verwendung der Datenträger-IDs (nicht sd *).

Ist das vernünftig? Gibt es einen einfacheren Weg?

Danke an alle, die mir aus diesem Schlamassel helfen können.

Michael

1
Warum nicht einfach TB2 "exportieren" und dann korrekt erstellen? Pools werden beim Herunterfahren trotzdem exportiert. In einem Pool, der derzeit "nicht verfügbar" ist, sollte dies keine Festplattenänderungen verursachen. Daniel B vor 5 Jahren 0

1 Antwort auf die Frage

0
Dan

Ihre vorgeschlagene Methode scheint zu funktionieren. Es ist jedoch auch unnötig komplex. Stattdessen würde ich vorschlagen:

  1. zpool export TB2. Dadurch werden alle mit dem Pool verknüpften Ressourcen aufgehoben, und Ihr System versucht nicht, sie erneut bereitzustellen (und möglicherweise auf sie zu schreiben), wenn Sie nicht zpool importzuerst ausgeführt werden.
  2. TB4 reparieren. (Oder Sie können das später tun.)
  3. zpool create <new pool> ...(Verweise auf die Festplatten nach ID, um erneutes Überlappen zu vermeiden). Möglicherweise müssen Sie das Erstellen erzwingen, da diese Festplatten möglicherweise von einem nicht importierten Pool verwendet werden.

Wenn Sie einen Testlauf der Prozedur durchführen möchten, können Sie meiner Meinung nach einige Volumes auf TB4 ( zfs create -V 5gb TB4/volume1) erstellen und aus diesen (zwei) verschachtelte Pools zpool create testpool1 ...mit einem überlappenden Volume erstellen . Alles andere sollte wie oben funktionieren.