Como recuperar o volume lógico excluído com lvremove

12

Estou no CentOS 5.5 e estou executando o Xen. Eu tenho um grupo de grande volume que eu crio volumes lógicos no uso de lvcreate. Hoje pedi a uma cliente que cancelasse a conta dela e depois mudasse de idéia uma hora depois. Infelizmente eu já tinha removido o LVM da sua imagem Xen. (apenas usando um padrão lvremove). Não houve nenhuma outra atividade de LVM neste disco desde então (nada mais foi adicionado ou excluído). É possível "desfazer" um lvremove ou recuperar o volume lógico? Se sim, como eu faria isso?

    
por John P 17.01.2011 / 15:29

5 respostas

12

O LVM faz backup dos metadados para /etc/lvm/backup e /etc/lvm/archive . Na parte superior de cada arquivo, ele informará o horário / dados quando o arquivo foi gerado. Portanto, é provável que você tenha uma cópia dos metadados mais antigos, como era antes de excluir o LV. Acredito que o backup seja automático sempre que os metadados forem alterados.

Os itens a seguir podem ser perigosos e destrutivos , portanto, tenha muito cuidado e, se possível, tenha um backup completo.

O comando para restaurar esses backups de metadados de volume é vgcfgrestore . Certifique-se de fazer uma cópia atual da configuração de trabalho existente usando o comando vgcfgbackup com o sinalizador -f para especificar um arquivo diferente para a saída, para que você não altere nenhum arquivo que esteja no / etc / lvm / backup ou pastas / etc / lvm / archive. Certifique-se de diferenciar a configuração atual com a configuração que deseja restaurar para verificar se as únicas alterações que você está prestes a aplicar são para recriar o LV excluído recentemente. Ter um backup completo dos seus dados provavelmente não é uma má ideia também. Você também pode considerar entrar em contato com o fornecedor de Linux para obter suporte / orientação se estiver em um contrato de suporte antes de continuar, já que nunca precisei fazer isso sozinho.

Boa sorte.

    
por 17.01.2011 / 16:43
16

"Poderia ser mais específico, por favor, encontrando o EFROM e o ETO do arquivo de backup? Todo o lv tem um" start_extend "do 0 no meu arquivo de backup, então estou um pouco perdido :) - user186975 Aug 24 ' 13 às 17:06 "

Ok, serei muito específico ... com a maneira mais simples de recuperar um volume lógico.

Exemplo:

1 - Eu removi meu volume lógico!

$ sudo lvremove /dev/vg1/debian.root

2 - A primeira coisa a fazer é procurar o arquivo em /etc/lvm/archive/vg1_(xxxxx).vg. Eu posso fazer isso, apenas olhando a data em que eu removi o volume lógico!

$ sudo ls -l /etc/lvm/archive |more

3- Eu achei!

-rw------- 1 root root 16255 Mar 20 14:29 vg1_00223-235991429.vg
-rw------- 1 root root 16665 Mar 20 16:49 vg1_00224-748876387.vg
-rw------- 1 root root 17074 Mar 20 16:49 vg1_00225-931666169.vg
-rw------- 1 root root 17482 Mar 20 16:50 vg1_00226-1238302012.vg
-rw------- 1 root root 18081 **Mar 20 21:57 vg1_00227-2048533959.vg**

Data em que eu fiz o lvremove !!! ... foi há alguns minutos ..

4 - Vamos ver o arquivo!

$ sudo head /etc/lvm/archive/vg1_00227-2048533959.vg
*# Generated by LVM2 version 2.02.95(2) (2012-03-06): Thu Mar 20 21:57:58 2014
contents = "Text Format Volume Group"
version = 1
description = **"Created *before* executing 'lvremove /dev/vg1/debian.root'"**
creation_host = "server"    # Linux server 3.8.0-35-generic #50-Ubuntu SMP Tue Dec 3 01:24:59 UTC 2013 x86_64
creation_time = 1395363478  # Thu Mar 20 21:57:58 2014*

5 - Faça um teste antes de recuperá-lo!

$ sudo vgcfgrestore vg1 --test -f /etc/lvm/archive/vg1_00227-2048533959.vg
Test mode: Metadata will NOT be updated and volumes will not be
(de)activated.   **Restored volume group vg1**

6 - Ok, agora repita a linha de comando, sem o (--test)

$ sudo vgcfgrestore vg1 -f /etc/lvm/archive/vg1_00227-2048533959.vg
**Restored volume group vg1**

7 - Confira!

$ sudo lvscan |grep debian
ACTIVE            '/dev/vg1/debian.root' [7,81 GiB] inherit

8 - Se a lógica não estava ativa, faça isso!

$ sudo lvchange -a y /dev/vg1/debian.root 

É tudo

Espero que isso possa ajudar outras pessoas que estão procurando por essa solução!

    
por 21.03.2014 / 03:24
4

A coisa mais fácil de recuperar de lvremove (assumindo que você não escreveu nas extensões em que o LV estava residindo) é:

Basta encontrar o backup de seus metadados em / etc / lvm / archive e descobrir

a) em que extensões o LV residia em (EFROM, ETO)
b) em quais PVs seu VE estava residindo e que se estende naquele PV que estava usando (PFROM, PTO)

Depois de ter essa informação, você cria um novo LV do mesmo tamanho exato no mesmo PV estende sem limpar os primeiros 8kB do LV:

lvcreate --extents EFROM-ETO --zero n --name customer007 YOUR-VG-NAME /dev/yourpv:PFROM-PTO
    
por 02.03.2013 / 17:16
2

Eu tive uma situação semelhante. Eu tinha todos os PVs contendo os LVs desejados, mas meu VG mostrava PVs ausentes e 0 LVs. Eu me recuperei fazendo o seguinte:

  1. Torne-se root
  2. Execute pvs para coletar UUIDs para todas as unidades.
  3. Revise os arquivos em / etc / lvm / archive até encontrar um que liste todos os mesmos UUIDs.
  4. Faça uma cópia de trabalho do arquivo de configuração arquivado e comece a editar.
  5. Na seção physical_volumes , defina as linhas device = para corresponder ao dispositivo / UUIDs atual informado por pvs , limpe os "MISSING" flags e remova todas as seções pvN que realmente estavam faltando.
  6. Na seção logical_volumes , remova todas as listagens que tivessem faixas nas seções pvN que não existiam mais.
  7. Foi isso, então eu corri

    vgcfgrestore --test vg -f /root/dangerously_edited.vg

  8. Quando isso funcionou, eu corri novamente sem a opção --test .

Consegui minha situação particular estendendo o VG com PVs sdg e sdh. Então eu criei um novo LV, especificando /dev/sdg /dev/sdh na linha de comando para que eu soubesse que o novo LV estava nessas unidades. Então mudei apenas essas unidades para uma nova máquina. A máquina antiga ficou muito chateada com as unidades que faltavam, e quando as forcei, elas também removeram TODOS os LVs. Que pena.

Da próxima vez, é claro, criarei um novo VG para evitar esse problema.

    
por 23.07.2015 / 19:32
1

(Como foi respondido pelo thermoman anteriormente) a maneira mais fácil de recriar um volume LVM deletado é criando-o com lvcreate sem zerar e certificando-se de que ele estará na mesma posição no disco. (O comando da resposta do thermoman não funcionou.)

Verifique o tamanho e a posição do volume lógico excluído como estavam antes da exclusão lendo os arquivos em / etc / lvm / archive. O tamanho do volume está em extent_count da segment1 (ou soma de valores segment*/extent_count se tiver várias extensões). A posição está na seção stripes após o alias do volume físico (por exemplo, pv0 ).

Por exemplo, a seção de volume pode ter esta aparência:

    physical_volumes {
            pv0 {
                    device = "/dev/somedisk" # Hint only
                    ...
            }
    }

    logical_volumes {
            ...
            example {
                    ...
                    segment_count = 1

                    segment1 {
                            start_extent = 0
                            extent_count = 1024     # 4 Gigabytes

                            type = "striped"
                            stripe_count = 1        # linear

                            stripes = [
                                    "pv0", 30720
                            ]
                    }
            }
            ...
    }

O tamanho deste volume example foi 1024 e foi localizado em / dev / somedisk a partir da extensão 30720.

Calcule a última extensão como start + size -1 = 30720 + 1024 - 1 = 31743. Para recriar o volume seguinte:

lvcreate --extents 1024 --zero n --name example vgname /dev/somedisk:30720-31743
    
por 29.01.2017 / 15:37

Tags