Este documento foi traduzido usando tecnologia de tradução automática de máquina. Sempre trabalhamos para apresentar traduções precisas, mas não oferecemos nenhuma garantia em relação à integridade, precisão ou confiabilidade do conteúdo traduzido. Em caso de qualquer discrepância, a versão original em inglês prevalecerá e constituirá o texto official.

Esta é uma documentação não divulgada para SUSE® Storage 1.12 (Dev).

Recuperar Dados de Volume de uma Única Réplica

Cada réplica de um volume Longhorn contém todos os dados do volume.

Se todo o cluster Kubernetes ou o sistema Longhorn ficar offline, os seguintes passos podem ser usados para recuperar os dados do volume.

  1. Identifique o volume.

    O Longhorn utiliza os discos no nó para armazenar os dados da réplica.

    Por padrão, os dados são armazenados no diretório especificado pela configuração Default Data Path.

    Mais discos podem ser adicionados a um nó, seja usando a interface do Longhorn ou utilizando um rótulo e anotação do nó.

    Você pode manter uma cópia do caminho desses discos ou usar o seguinte comando para encontrar os discos que foram utilizados pelo Longhorn. Por exemplo:

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

    O resultado acima mostra que o caminho /var/lib/longhorn foi utilizado pelo Longhorn para armazenar dados.

  2. Verifique o caminho encontrado no passo 1 para ver se ele contém os dados.

    Os dados serão armazenados no diretório /replicas, por exemplo:

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

    O padrão de nomenclatura do diretório é:

     <volume_name>-<8 bytes UUID>

    Portanto, no exemplo acima, há dois volumes armazenados aqui, que são pvc-06b4a8a8-b51d-42c6-a8cc-d8c8d6bc65bc e pvc-71a266e0-5db5-44e5-a2a3-e5471b007cc9.

    O nome do volume corresponde ao nome do PV do Kubernetes.

  3. Use o comando lsof para garantir que ninguém esteja usando o volume atualmente, por exemplo.

    # 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

    O resultado acima mostra que o diretório de dados ainda está sendo utilizado, então não prossiga para o próximo passo. Se não estiver sendo utilizado, o comando lsof deve retornar um resultado vazio.

  4. Verifique o tamanho do volume que você deseja restaurar usando o seguinte comando dentro do diretório:

    # 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":""}

    A partir do resultado acima, você pode ver que o tamanho do volume é 1073741824 (1 GiB). Observe o tamanho.

  5. Para exportar o conteúdo do volume, siga as instruções abaixo que correspondem ao seu ambiente.

    • Docker (RKE1)

      Para exportar o conteúdo do volume em um ambiente Docker, use o seguinte comando para criar um contêiner de volume Longhorn de réplica única:

      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>

      Por exemplo, com base nas informações acima, o comando deve ser:

      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)

      Para exportar o conteúdo do volume em ambientes RKE2 ou K3s, você precisa criar um manifesto de pod estático. Esse manifesto inicia o Longhorn Engine e expõe o volume.

      Crie um arquivo chamado longhorn-recovery.yaml no diretório /var/lib/rancher/rke2/agent/pod-manifests/ com o seguinte conteúdo:

      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

      Substitua os seguintes espaços reservados no manifesto:

    • <current-version>: A versão do SUSE Storage que você está usando.

    • <volume-name>: O nome do volume que você deseja recuperar.

    • <host-path-to-replica>: O caminho para o diretório de réplica que você encontrou na Etapa 1.

    • <volume-size-in-bytes>: O tamanho do volume em bytes.

      Resultado: Agora você deve ter um dispositivo de bloco criado em /dev/longhorn/<volume_name> para este dispositivo, como /dev/longhorn/pvc-06b4a8a8-b51d-42c6-a8cc-d8c8d6bc65bc para o exemplo acima. Agora você pode montar o dispositivo de bloco para acessar os dados.

Para evitar alterações acidentais no conteúdo do volume, é recomendado usar mount -o ro para montar o diretório como readonly.

Depois que você terminar de acessar o conteúdo do volume, use docker stop para parar o contêiner. Para RKE2, limpe os recursos removendo o arquivo de manifesto de pod estático sudo rm /var/lib/rancher/rke2/agent/pod-manifests/longhorn-recovery.yaml.