VG restaurado mudou de volume

VG restaurado mudou de volume

Estou recuperando um PV em um RAID 1 mdadm com um único VG contendo vários LVs.

Os dispositivos subjacentes têm vários setores defeituosos (um apenas alguns, o outro realmente muitos) e um erro de digitação bobo tornou necessário restaurar a configuração do LVM navegando pelos dispositivos. Felizmente encontrei e a configuração restaurada se parece com a original.

O único problema é que os volumes lógicos não possuem sistema de arquivos válido. Com e2sl descobri que um dos superblocos do meu destino fs está no volume lógico errado. Infelizmente, não tenho ideia de como corrigir ou contornar esse problema.

root@rescue ~/e2sl # ./ext2-superblock -d /dev/vg0/tmp  | grep 131072000
Found: block 20711426 (cyl 1369, head 192, sector 50), 131072000 blocks, 129988776 free blocks, 4096 block size, (null)
root@rescue ~/e2sl # ./ext2-superblock -d /dev/vg0/home | grep 131072000
Found: block 2048 (cyl 0, head 32, sector 32), 131072000 blocks, 129988776 free blocks, 4096 block size, (null)
Found: block 526336 (cyl 34, head 194, sector 34), 131072000 blocks, 129988776 free blocks, 4096 block size, (null)
Found: block 1050624 (cyl 69, head 116, sector 36), 131072000 blocks, 129988776 free blocks, 4096 block size, (null)
Found: block 1574912 (cyl 104, head 38, sector 38), 131072000 blocks, 129988776 free blocks, 4096 block size, (null)
Found: block 2099200 (cyl 138, head 200, sector 40), 131072000 blocks, 129988776 free blocks, 4096 block size, (null)
Found: block 6293504 (cyl 416, head 56, sector 56), 131072000 blocks, 129988776 free blocks, 4096 block size, (null)
Found: block 6817792 (cyl 450, head 218, sector 58), 131072000 blocks, 129988776 free blocks, 4096 block size, (null)
Found: block 12584960 (cyl 832, head 81, sector 17), 131072000 blocks, 129988776 free blocks, 4096 block size, (null)
Found: block 20973568 (cyl 1387, head 33, sector 49), 131072000 blocks, 129988776 free blocks, 4096 block size, (null)
Found: block 32507904 (cyl 2149, head 238, sector 30), 131072000 blocks, 129988776 free blocks, 4096 block size, (null)
Found: block 63440896 (cyl 4195, head 198, sector 22), 131072000 blocks, 129988776 free blocks, 4096 block size, (null)
Found: block 89655296 (cyl 5929, head 139, sector 59), 131072000 blocks, 129988776 free blocks, 4096 block size, (null)
^C

Estou me sentindo a apenas um centímetro de acessar meu(s) sistema(s) de arquivos novamente para recuperar alguns dados sem backup.

Configuração do LVM:

root@rescue ~ # pvs
  PV         VG   Fmt  Attr PSize PFree
  /dev/md1   vg0  lvm2 a--  2.71t 767.52g

root@rescue ~ # vgs
  VG   #PV #LV #SN Attr   VSize VFree
  vg0    1   5   0 wz--n- 2.71t 767.52g

root@rescue ~ # lvs
  LV        VG   Attr     LSize   Pool Origin Data%  Move Log Copy%  Convert
  backup    vg0  -wi-a--- 500.00g
  container vg0  -wi-a--- 500.00g
  home      vg0  -wi-a--- 500.00g
  root      vg0  -wi-a--- 500.00g
  tmp       vg0  -wi-a---  10.00g

Configuração VG:

# Generated by LVM2 version 2.02.95(2) (2012-03-06): Sun Oct 13 23:56:33 2013

contents = "Text Format Volume Group"
version = 1

description = "Created *after* executing 'vgs'"

creation_host = "rescue"        # Linux rescue 3.10.12 #29 SMP Mon Sep 23 13:18:39 CEST 2013 x86_64
creation_time = 1381701393      # Sun Oct 13 23:56:33 2013

vg0 {
    id = "7p0Aiw-pBpd-rn6Y-geFb-jyZe-gide-Anc9ag"
    seqno = 19
    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 = "GBIwI4-AxBa-6faf-aLfB-UZiP-iSS9-FaOrhH"
                    device = "/dev/md1"     # Hint only

                    status = ["ALLOCATABLE"]
                    flags = []
                    dev_size = 5824875134   # 2.71242 Terabytes
                    pe_start = 384
                    pe_count = 711044       # 2.71242 Terabytes
            }
    }

    logical_volumes {

            root {
                    id = "1e3gvq-IJnX-Aimz-ziiY-zucE-soCO-YU2ayp"
                    status = ["READ", "WRITE", "VISIBLE"]
                    flags = []
                    segment_count = 1

                    segment1 {
                            start_extent = 0
                            extent_count = 128000   # 500 Gigabytes

                            type = "striped"
                            stripe_count = 1        # linear

                            stripes = [
                                    "pv0", 0
                            ]
                    }
            }
            tmp {
                    id = "px8JAy-JnkP-Amry-uHtf-lCUB-rfdx-Z8y11y"
                    status = ["READ", "WRITE", "VISIBLE"]
                    flags = []
                    segment_count = 1

                    segment1 {
                            start_extent = 0
                            extent_count = 2560     # 10 Gigabytes

                            type = "striped"
                            stripe_count = 1        # linear

                            stripes = [
                                    "pv0", 128000
                            ]
                    }
            }

            home {
                    id = "e0AZbd-22Ss-RLrF-TgvF-CSDN-Nw6w-Gj7dal"
                    status = ["READ", "WRITE", "VISIBLE"]
                    flags = []
                    segment_count = 1

                    segment1 {
                            start_extent = 0
                            extent_count = 128000   # 500 Gigabytes

                            type = "striped"
                            stripe_count = 1        # linear

                            stripes = [
                                    "pv0", 130560
                            ]
                    }
            }

            backup {
                    id = "ZXNcbK-gYKj-LJfm-f193-Ozsi-Rm3Y-kZL37c"
                    status = ["READ", "WRITE", "VISIBLE"]
                    flags = []
                    creation_host = "new.bountin.net"
                    creation_time = 1341852222      # 2012-07-09 18:43:42 +0200
                    segment_count = 1

                    segment1 {
                            start_extent = 0
                            extent_count = 128000   # 500 Gigabytes

                            type = "striped"
                            stripe_count = 1        # linear

                            stripes = [
                                    "pv0", 258560
                            ]
                    }
            }

         container {
                    id = "X9wheh-3ADB-Fiau-j7SR-pcH9-hXne-K2NVAc"
                    status = ["READ", "WRITE", "VISIBLE"]
                    flags = []
                    creation_host = "new.bountin.net"
                    creation_time = 1341852988      # 2012-07-09 18:56:28 +0200
                    segment_count = 1

                    segment1 {
                            start_extent = 0
                            extent_count = 128000   # 500 Gigabytes

                            type = "striped"
                            stripe_count = 1        # linear

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

Responder1

Para quem tem um problema semelhante:

Usei o e2sl [1] para encontrar candidatos para os sistemas de arquivos diretamente de um dos dispositivos RAID e montei o sistema de arquivos usando um dispositivo de loop [2] ignorando o LVM e o RAID de software. Tive que mexer um pouco no deslocamento (a posição do superbloco tem um deslocamento de 1 KB até o início da partição!), mas no final consegui.

A partir daí o resgate foi muito fácil: montar o loopdevice em um ponto de montagem e tudo estava lá para ser copiado.

[1]http://schumann.cx/e2sl/

[2] monte --loop e veja o losstup

informação relacionada