|
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. |
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.
-
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 Pathangegeben 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/longhornvon Longhorn verwendet wurde, um Daten zu speichern. -
Überprüfen Sie den in Schritt 1 gefundenen Pfad, um zu sehen, ob er die Daten enthält.
Die Daten werden im Verzeichnis
/replicasgespeichert, 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-d8c8d6bc65bcundpvc-71a266e0-5db5-44e5-a2a3-e5471b007cc9.Der Volumenname entspricht dem Kubernetes-PV-Namen.
-
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
lsofein leeres Ergebnis zurückgeben. -
Ü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. -
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.yamlim 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: NeverErsetzen 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-d8c8d6bc65bcim 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 rozu verwenden, um das Verzeichnis alsreadonlyeinzuhä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.