como posso reintegrar um lost e found pv em um LVM vg?

0

Recentemente, perdi um RAID que era um volume físico de um dos meus grupos de volumes LVM do Linux. Acabei fazendo um vgreduce --removemissing e continuei com o negócio de restaurar os dados.

Bem, hoje eu descobri que o 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

mg20 não é consistente porque o PV% perdido e perdido /dev/md2 provavelmente contém cópias do antigo catálogo de volumes lógicos que menciona o sistema de arquivos que vive em /dev/md2 .

Como eu reintegro o /dev/md2 no mg20 e preservo o sistema de arquivos que mora nele? (e poupe-me do incômodo de restaurar seu conteúdo) Um fator simplificador é que /dev/md2 continha apenas um LV e que LV estava totalmente contido em /dev/md2 .

    
por Mutant Bob 11.03.2015 / 19:03

1 resposta

0

Eu descobri uma maneira de recuperar o ataque. Sistemas modernos de LVM fazem backups da configuração de VG com bastante frequência. Você pode ver uma lista de seus backups e os comandos que os acionaram usando vgcfgrestore --list . Eu escolhi o de antes quando eu fiz o vgreduce --removemissing e encontrei esses 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 flags = . Eu também defino o device = "/dev/md2" , embora isso provavelmente não fosse necessário. Eu executei um vgcfgrestore -f /etc/lvm/archive/mg20_synthetic-2015.vg mg20 e 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 a configuração INTEIRA.

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

    
por 18.03.2015 / 16:30