Zwei verschränkte ZFS-Pools?

Zwei verschränkte ZFS-Pools?

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:

  1. die Maschine abschalten
  2. Ziehen Sie alle Laufwerke.
  3. Neustart.
  4. zpool zerstören -f TB2
  5. TB4-Laufwerke herunterfahren und neu installieren
  6. Formatieren Sie die TB2-Laufwerke auf einem anderen Computer neu
  7. 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:

  1. 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 es zpool importzuerst aus.
  2. Reparieren Sie TB4. (Oder Sie können dies später tun.)
  3. 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.

verwandte Informationen