Dieses Dokument wurde mithilfe automatisierter maschineller Übersetzungstechnologie übersetzt. Wir bemühen uns um korrekte Übersetzungen, übernehmen jedoch keine Gewähr für die Vollständigkeit, Richtigkeit oder Zuverlässigkeit der übersetzten Inhalte. Im Falle von Abweichungen ist die englische Originalversion maßgebend und stellt den verbindlichen Text dar.

Dies ist eine unveröffentlichte Dokumentation für SUSE® Storage 1.12 (Dev).

Volumendaten von einer einzelnen Replik abrufen

Jede Replik eines Longhorn-Volumes enthält die vollständigen Daten für das Volume.

Wenn der gesamte Kubernetes-Cluster oder das Longhorn-System offline geht, können die folgenden Schritte verwendet werden, um die Daten des Volumes abzurufen.

  1. Identifizieren Sie das Volume.

    Longhorn verwendet die Festplatten des Knotens, um die Daten der Replik zu speichern.

    Standardmäßig werden die Daten im Verzeichnis gespeichert, das durch die Einstellung Default Data Path angegeben ist.

    Weitere Festplatten können zu einem Knoten hinzugefügt werden, entweder über die Longhorn-Benutzeroberfläche oder durch Verwendung von einem Knotenslabel und einer Annotation.

    Sie können entweder eine Kopie des Pfades dieser Festplatten aufbewahren oder den folgenden Befehl verwenden, um die Festplatten zu finden, die von Longhorn verwendet wurden. Beispiel:

     # find / -name longhorn-disk.cfg
     /var/lib/longhorn/longhorn-disk.cfg

    Das obige Ergebnis zeigt, dass der Pfad /var/lib/longhorn von Longhorn verwendet wurde, um Daten zu speichern.

  2. Überprüfen Sie den in Schritt 1 gefundenen Pfad, um zu sehen, ob er die Daten enthält.

    Die Daten werden im Verzeichnis /replicas gespeichert, zum Beispiel:

     # ls /var/lib/longhorn/replicas/
     pvc-06b4a8a8-b51d-42c6-a8cc-d8c8d6bc65bc-d890efb2
     pvc-71a266e0-5db5-44e5-a2a3-e5471b007cc9-fe160a2c

    Das Verzeichnisbenennungsschema ist:

     <volume_name>-<8 bytes UUID>

    Im obigen Beispiel sind hier zwei Volumes gespeichert, nämlich pvc-06b4a8a8-b51d-42c6-a8cc-d8c8d6bc65bc und pvc-71a266e0-5db5-44e5-a2a3-e5471b007cc9.

    Der Volumenname entspricht dem Kubernetes-PV-Namen.

  3. Verwenden Sie den Befehl lsof, um sicherzustellen, dass derzeit niemand das Volume verwendet, z.B.

    # lsof pvc-06b4a8a8-b51d-42c6-a8cc-d8c8d6bc65bc-d890efb2/
    COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF   NODE NAME
    longhorn 14464 root  cwd    DIR    8,0     4096 541456 pvc-06b4a8a8-b51d-42c6-a8cc-d8c8d6bc65bc-d890efb2

    Das obige Ergebnis zeigt, dass das Datenverzeichnis noch verwendet wird, also fahren Sie nicht mit dem nächsten Schritt fort. Wenn es nicht verwendet wird, sollte der Befehl lsof ein leeres Ergebnis zurückgeben.

  4. Überprüfen Sie die Volumengröße des Volumes, das Sie wiederherstellen möchten, mit dem folgenden Befehl im Verzeichnis:

    # cat pvc-06b4a8a8-b51d-42c6-a8cc-d8c8d6bc65bc-d890efb2/volume.meta
     {"Size":1073741824,"Head":"volume-head-000.img","Dirty":true,"Rebuilding":false,"Parent":"","SectorSize":512,"BackingFileName":""}

    Aus dem obigen Ergebnis können Sie sehen, dass die Volumengröße 1073741824 (1 GiB) beträgt. Beachten Sie die Größe.

  5. Um den Inhalt des Volumes zu exportieren, folgen Sie den Anweisungen unten, die Ihrer Umgebung entsprechen.

    • Docker (RKE1)

      Um den Inhalt des Volumes in einer Docker-Umgebung zu exportieren, verwenden Sie den folgenden Befehl, um einen Longhorn-Volume-Container mit einer einzelnen Replik zu erstellen:

      docker run -v /dev:/host/dev -v /proc:/host/proc -v <data_path>:/volume --privileged longhornio/longhorn-engine:v{patch-version} launch-simple-longhorn <volume_name> <volume_size>

      Zum Beispiel sollte der Befehl basierend auf den obigen Informationen wie folgt aussehen:

      docker run -v /dev:/host/dev -v /proc:/host/proc -v /var/lib/longhorn/replicas/pvc-06b4a8a8-b51d-42c6-a8cc-d8c8d6bc65bc-d890efb2:/volume --privileged longhornio/longhorn-engine:v{patch-version} launch-simple-longhorn pvc-06b4a8a8-b51d-42c6-a8cc-d8c8d6bc65bc 1073741824
    • Containerd (RKE2/K3s)

      Um den Inhalt des Volumes in RKE2- oder K3s-Umgebungen zu exportieren, müssen Sie ein statisches Pod-Manifest erstellen. Dieses Manifest startet die Longhorn Engine und stellt das Volume bereit.

      Erstellen Sie eine Datei mit dem Namen longhorn-recovery.yaml im Verzeichnis /var/lib/rancher/rke2/agent/pod-manifests/ mit folgendem Inhalt:

      apiVersion: v1
      kind: Pod
      metadata:
        name: longhorn-recovery
        namespace: longhorn-system
      spec:
        nodeName: <node-where-the-replica-is-located>
        hostPID: true
        containers:
        - name: engine
          image: longhornio/longhorn-engine:v<current-version>
          securityContext:
            privileged: true
          command: ["launch-simple-longhorn"]
          args: ["<volume-name>", "<volume-size-in-bytes>"]
          volumeMounts:
          - name: dev
            mountPath: /host/dev
          - name: proc
            mountPath: /host/proc
          - name: data
            mountPath: /volume
        volumes:
        - name: dev
          hostPath:
            path: /dev
        - name: proc
          hostPath:
            path: /proc
        - name: data
          hostPath:
            path: <host-path-to-replica>
        restartPolicy: Never

      Ersetzen Sie die folgenden Platzhalter im Manifest:

    • <current-version>: Die Version von SUSE Storage, die Sie verwenden.

    • <volume-name>: Der Name des Volumes, das Sie wiederherstellen möchten.

    • <host-path-to-replica>: Der Pfad zum Replikverzeichnis, das Sie in Schritt 1 gefunden haben.

    • <volume-size-in-bytes>: Die Größe des Volumes in Bytes.

      Ergebnis: Jetzt sollten Sie ein Blockgerät auf /dev/longhorn/<volume_name> für dieses Gerät erstellt haben, wie /dev/longhorn/pvc-06b4a8a8-b51d-42c6-a8cc-d8c8d6bc65bc im obigen Beispiel. Jetzt können Sie das Blockgerät einhängen, um Zugriff auf die Daten zu erhalten.

Um eine versehentliche Änderung des Inhalts des Volumes zu vermeiden, wird empfohlen, mount -o ro zu verwenden, um das Verzeichnis als readonly einzuhängen.

Nachdem Sie den Zugriff auf den Inhalt des Volumes beendet haben, verwenden Sie docker stop, um den Container zu beenden. Für RKE2 bereinigen Sie die Ressourcen, indem Sie die Datei des statischen Pod-Manifests sudo rm /var/lib/rancher/rke2/agent/pod-manifests/longhorn-recovery.yaml entfernen.