Metadados de LVM ausentes, tentando recriar o raid 1 com o LVM

3

Eu tive um problema de energia na casa recentemente e tive problemas para montar meus discos do servidor de arquivos. Acontece que um dos dispositivos tinha se renomeado de sdb para sdd, e todos os metadados do LVM agora estão faltando. Usando pvscan, lvscan, vgscan, etc, todos mostram apenas a partição do sistema. Outra reinicialização e os dispositivos pareciam voltar ao que eram antes: sdb e sdc. Consegui remontar o ataque usando o mdadm, mas não consegui usar o vgcfgrestore para recriar minha configuração de lvm porque aparentemente o UUID do meu dispositivo de invasão foi alterado. Meu VG original foi chamado "vg0". Aqui está o resultado do vgcfgrestore:

  Couldn't find device with uuid 3fgedF-F7Dc-c300-svuP-b3Q3-qSnb-CukkLq.
  Cannot restore Volume Group vg0 with 1 PVs marked as missing.
  Restore failed.

Meu arquivo /etc/lvm/backup/vg0 mostra isso:

vg0 {
    id = "3JWsYl-FmEP-gpsa-7grO-VlLU-x7uC-EevgFc"
    seqno = 3
    format = "lvm2"         # informational
    status = ["RESIZEABLE", "READ", "WRITE"]
    flags = []
    extent_size = 8192      # 4 Megabytes
    max_lv = 0
    max_pv = 0
    metadata_copies = 0

    physical_volumes {

        pv0 {
            id = "3fgedF-F7Dc-c300-svuP-b3Q3-qSnb-CukkLq"
            device = "/dev/md0" # Hint only

            status = ["ALLOCATABLE"]
            flags = []
            dev_size = 3907028992   # 1.81935 Terabytes
            pe_start = 384
            pe_count = 476932   # 1.81935 Terabytes
        }
    }

    logical_volumes {

        data {
            id = "Sqjebo-rnKh-mgQH-a90E-Q0n7-idp1-1xPP56"
            status = ["READ", "WRITE", "VISIBLE"]
            flags = []
            segment_count = 1

            segment1 {
                start_extent = 0
                extent_count = 476932   # 1.81935 Terabytes

                type = "striped"
                stripe_count = 1    # linear

                stripes = [
                    "pv0", 0
                ]
            }
        }
    }
}

Portanto, o problema que parece ter é que o pv UUID não é mais válido, e nem tenho certeza agora do que usar. O ataque que consegui remontar com --scan nomeou automaticamente para /dev/md1 , mas até mesmo alterar isso no arquivo vg0 backup não teve efeito. Eu ainda não tenho certeza do que é o novo pv UUID.

# cat /proc/mdstat
Personalities : [raid1] 
md1 : active raid1 sdc1[1] sdb1[0]
      1953383488 blocks super 1.2 [2/2] [UU]
      bitmap: 0/15 pages [0KB], 65536KB chunk

unused devices: <none>

Mais uma vez, pvs, lvs e vgs mostram todos os meus volumes raiz / sistema e vg, nada do vg0. Alguma sugestão sobre os próximos passos? Ambas as unidades estão cheias de dados (a maioria dos quais é copiada), mas eu gostaria de dar os passos que puder para salvar os sistemas de arquivos.

EDITAR:

Exibindo a cabeça de ambos os discos (/ dev / md1 mostra lixo). Percebo que apenas um deles tem um rótulo LABELONE:

[root@host ~]# head /dev/sdb1
üN+©Ûüþy {Gyì˧Rjedi:1RUYܯÜ1á×iSû«nZsH$ÊWYuQÿÿÿÿÿÿÿÿ>4þÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿvg0 {
id = "IwXCM3-LnxU-Oguo-PXiN-nXwq-VFaU-ZmgySs"
seqno = 1
format = "lvm2"
status = ["RESIZEABLE", "READ", "WRITE"]
flags = []
extent_size = 8192
max_lv = 0
max_pv = 0
metadata_copies = 0
[root@host ~]# head /dev/sdc1
LABELONEp­u+ LVM2 0013fgedFF7Dcc300svuPb3Q3qSnbCukkLqÁÑðüN+©Ûüþy {Gyì˧Rjedi:1RUYܯÜÒÆûPFlO!H$ÊWYuQÿÿÿÿÿÿÿÿ
ª9Úþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿþÿvg0 {
id = "IwXCM3-LnxU-Oguo-PXiN-nXwq-VFaU-ZmgySs"
seqno = 1
format = "lvm2"
status = ["RESIZEABLE", "READ", "WRITE"]
flags = []
extent_size = 8192
max_lv = 0
max_pv = 0
metadata_copies = 0

Então, agora, a pergunta de 50 cent: como faço para recuperar os rótulos do LVM sem danificar o sistema de arquivos subjacente?

ATUALIZAÇÃO:

Então, basicamente, consegui executar vgcfgrestore com êxito para uma cópia válida de minha configuração de backup lvm usando um novo UUID de PV e montei / dev / md0 com essa unidade, mas agora recebo uma mensagem dizendo que PV é menor que o espaço alocado. Basicamente, está relatando que minhas extensões físicas caíram de 476932 para 476900. O tamanho do disco não mudou e verifiquei que o PV realmente tem o número correto de extensões disponíveis: (veja a última linha)

[root@host /]# pvs -v --segments /dev/md0
    Using physical volume(s) on command line.
    Wiping cache of LVM-capable devices
    Wiping internal VG cache
  Device /dev/md0 has size of 3906766976 sectors which is smaller than corresponding PV size of 3907028992 sectors. Was device resized?
  One or more devices used as PVs in VG vg0 have changed sizes.
  PV         VG   Fmt  Attr PSize PFree Start SSize  LV   Start Type   PE Ranges
  /dev/md0   vg0  lvm2 a--u 1.82t    0      0 476932 data     0 linear /dev/md0:0-476931

A última linha mostra que está relatando extensões de 0-476931, que é o tamanho correto. Eu pensei que talvez os cabeçalhos do LVM em si possam consumir algum espaço, mas este não é um volume novo, ele vem sendo usado há anos sem nenhum problema e nunca foi redimensionado. O volume está sendo exibido como suspenso:

  LV Status              suspended
  # open                 0

Eu tentei estender meu PV com um thumbdrive USB (não achei que funcionaria, e não funcionou) pensando que se eu pudesse montar esse sistema de arquivos temporariamente eu poderia copiar os dados e criar o ataque inteiro zero, mas é claro que não foi eficaz. Quaisquer pensamentos sobre possíveis próximos passos para salvar os dados?

    
por Tim S. 02.07.2017 / 01:04

2 respostas

1

Primeiro: head não é a melhor ferramenta para exibir dados binários. Experimente od ou hexdump (algo como hexdump -C -n 4096 /dev/XYZ )

Segundo: Isso não tem nada a ver com o id do md - o LVM está usando seus próprios ids escritos em cabeçalhos de Volume Físico (PV).

Terceiro: Seria benéfico postar um tarball produzido por lvmdump -sm (que contém, por exemplo, / var / log / messages - portanto, você pode querer rever sua saída.)

Algumas ideias:

Esses são os dois únicos discos que existem?

Meu primeiro foi que parece que o md foi remontado incorretamente - por exemplo, usando o dispositivo errado substituindo um dos seus dispositivos:

Você está tentando restaurar a vg0 com "UUID" "3JWsYl-FmEP-gpsa-7gr-VlLU-x7uC-EevgFc":

vg0 {
    id = "3JWsYl-FmEP-gpsa-7grO-VlLU-x7uC-EevgFc"

Mas nas pernas do dispositivo md há vg0 com diferentes "UUID"

vg0 {
    id = "IwXCM3-LnxU-Oguo-PXiN-nXwq-VFaU-ZmgySs"

Mas o PV parece ter o código correto:

    pv0 {
        id = "3fgedF-F7Dc-c300-svuP-b3Q3-qSnb-CukkLq"

vs. 3fgedFF7Dcc300svuPb3Q3qSnbCukkLq em uma das pernas.

Suponho que haja algo mais tarde na área de metadados. Por exemplo: este é um vg clonado e você alterou seu id depois?

Na segunda olhada, parece que uma das pernas é deslocada para poucos bytes (ou uma parte do dispositivo foi substituída por zeros? É por isso que od / hexdump deve ser usado). Então md não pode ver nada além de lixo - como os dados em ambos os discos diferem.

Você estava manipulando partições de alguma forma? Kernel atualizado? Você está olhando para os discos na máquina diferente? Isso pode ser um problema de alinhamento.

Uma das pernas parece ter o cabeçalho correto do PV. O LVM não o vê, pois está olhando para o md que retorna lixo. E o LVM não olha para as pernas do md.

Soluções possíveis

Uma solução possível é desmontar o md em pernas separadas (lembre-se: não zere o superbloco!) e deixe o LVM olhar para as pernas: execute o pvscan nas partições - se a perna estiver correta, uma delas pode ficar bem .

Seus metadados mostram que há apenas um LV linear com apenas um segmento abrangendo todo o disco - isso pode ser útil. Qual sistema de arquivos estava no dispositivo? Se você tem / etc / lvm / backup, eu acho que você tem / etc / fstab também. Como outra solução possível é encontrar um início de FS e usar o dmsetup diretamente para criar um mapeamento: link .

Por fim, tente manter os dispositivos originais somente para leitura.

    
por 19.07.2017 / 20:52
0

Então acabei descobrindo o problema sozinho. Eu li em algum lugar que versões realmente antigas de mdadm usavam menos metadados, e versões mais novas usavam mais. Desde que eu estava mudando de um sistema Ubuntu 10.10 para um CentOS 6.9 (mesmo tendo sido montado com sucesso no CentOS 6.9 por algumas semanas), imaginei que isso explicaria porque o dispositivo /dev/md0 era menor que o PV original. Uma vez eu iniciei o backup do sistema Ubuntu 10.10, montei o ataque e executei vgcfgrestore no grupo de volume original, o ataque foi montado corretamente e meus dados estavam novamente disponíveis.

Então, basicamente, sistemas de arquivos de raid construídos em versões realmente antigas do mdadm não devem ser montados diretamente em distribuições mais novas do Linux.

    
por 27.08.2017 / 17:21