como posso reintegrar um pv perdido e encontrado em um LVM vg?

como posso reintegrar um pv perdido e encontrado em um LVM vg?

Recentemente perdi um RAID que era um volume físico de um dos meus grupos de volumes LVM do Linux. Acabei fazendo um vgreduce --removemissinge continuei com o trabalho de restaurar os dados.

Bom, hoje encontrei aquele RAID (estava escondido, não pergunte).

# pvdisplay -m /dev/md2
  WARNING: Volume group mg20 is not consistent
  "/dev/md2" is a new physical volume of "499.87 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/md2
  VG Name               
  PV Size               499.87 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               SUXIe9-B4xG-Qlbz-5cSd-f1dh-cRQh-vOF4qz

mg20não é consistente porque o PV perdido e encontrado /dev/md2provavelmente contém cópias do antigo catálogo de volumes lógicos que menciona o sistema de arquivos existente /dev/md2.

Como faço para me reintegrar /dev/md2e mg20preservar o sistema de arquivos que nele reside? (e me poupo do incômodo de restaurar seu conteúdo) Um fator simplificador é que /dev/md2continha apenas um LV e que o LV estava inteiramente contido em /dev/md2.

Responder1

eu descobriamaneira de recuperar o ataque. Os sistemas LVM modernos fazem backups da configuração do VG com bastante frequência. Você pode ver uma lista de seus backups e os comandos que os acionaram usando vgcfgrestore --list. Eu escolhi aquele de antes vgreduce --removemissinge encontrei estes bits relevantes dentro dele:

pv8 {
        id = "SUXIe9-B4xG-Qlbz-5cSd-f1dh-cRQh-vOF4qz"
        device = "unknown device"       # Hint only

        status = ["ALLOCATABLE"]
        flags = ["MISSING"]
        dev_size = 1048312832   # 499.875 Gigabytes
        pe_start = 2048
        pe_count = 127967       # 499.871 Gigabytes
}

e

homes18 {
        id = "d7yt43-PMTv-XnsH-qAff-3d5A-ilB6-eQB0Jy"
        status = ["READ", "WRITE", "VISIBLE"]
        flags = []
        segment_count = 1

        segment1 {
                start_extent = 0
                extent_count = 89600    # 350 Gigabytes

                type = "striped"
                stripe_count = 1        # linear

                stripes = [
                        "pv8", 0
                ]
        }
}

Então criei uma cópia desse arquivo e removi "MISSING"do arquivo flags =. Eu também configurei o device = "/dev/md2", embora isso provavelmente não fosse necessário. Realizei um vgcfgrestore -f /etc/lvm/archive/mg20_synthetic-2015.vg mg20e agora meu mg20/homes18 está de volta e passa um fsck.

Para ser honesto, não estou muito satisfeito com isso como resposta. É um pouco exagerado restaurar TODA a configuração.

Acho que uma resposta real pode envolver lvcreate -Z n, mas estou com preguiça de realizar os experimentos necessários para verificar isso.

informação relacionada