Como recuperar dados - do Software RAID1 - o MBR é perdido nas duas unidades

1

Estou tentando recuperar o array raid1, ambos os discos são drives flash NVMe.

Eu fiz uma coisa realmente estúpida no final do dia longo e ruim - apagou os primeiros 512 bytes de cada drive NVMe - a intenção era desativar o boot loader. Descobri que eu apaguei dados de partição, bem como informações de RAID. Eu fiz backups daqueles 512 bytes - mas adivinhe - eu fiz eles para os mesmos discos, então eles estão inacessíveis agora.

Eu fiz cópias dos discos com o dd para outro disco, e comecei a tentar recuperar os dados - testdisk, que encontrou todas as partições:

Disk /dev/nvme0n1 - 512 GB / 476 GiB - CHS 488386 64 32
Current partition structure:
    Partition                  Start        End    Size in sectors

1 * Linux RAID               1   0  1 32737  63 32   67045376 [rescue:0]
2 P Linux RAID           32769   0  1 33280  63 32    1048576 [rescue:1]
3 P Linux RAID           33281   0  1 488257  63 32  931792896 [rescue:2]

Eu escrevi esses dados de partição para ambos os discos, fiz uma reinicialização, mas somente a partição / boot - primeiro um - foi recuperada. Eu tentei montar partição raiz (terceiro) com mdadm, mas falhou com

[Sun May 27 11:30:40 2018] md: nvme0n1p3 does not have a valid v1.2 superblock, not importing!
[Sun May 27 11:30:45 2018] md: nvme0n1p3 does not have a valid v1.2 superblock, not importing!
[Sun May 27 13:45:32 2018] md: nvme1n1p1 does not have a valid v1.2 superblock, not importing!
[Sun May 27 13:45:32 2018] md: nvme0n1p1 does not have a valid v1.2 superblock, not importing!
[Sun May 27 13:45:32 2018] md: nvme1n1p3 does not have a valid v1.2 superblock, not importing!
[Sun May 27 13:45:32 2018] md: nvme0n1p3 does not have a valid v1.2 superblock, not importing!

Meu plano era de alguma forma montar a partição raiz de um dos discos, obter o backup do setor e restaurar tudo.

Mas não consigo montar / dev / nvme1n1p3, ele falha

# mount /dev/nvme0n1p3  /mnt/arr2
mount: unknown filesystem type 'linux_raid_member'

# mount /dev/nvme0n1p3  /mnt/arr2 -t ext4
mount: /dev/nvme0n1p3 is already mounted or /mnt/arr2 busy

O que pode ser feito para obter acesso aos arquivos em / dev / nvme0n1p3?

ATUALIZAÇÃO: Graças ao conselho de Peter Zhabin, eu tentei recuperar o sistema de arquivos em uma das unidades, / dev / nvme1n1, com as partições recuperadas com a ajuda do testdisk:

Eu tirei o offset de outro servidor com discos e particionamentos similares (mas não exatos):

 losetup --find --show --read-only --offset $((262144*512)) /dev/nvme1n1p3 

O Fsck reclamou do particionamento incorreto (ou superbloco) e forneceu estatísticas de FS que parecem muito próximas do que estava na unidade:

 fsck.ext3 -n -v /dev/loop1

    e2fsck 1.43.3 (04-Sep-2016)
    Warning: skipping journal recovery because doing a read-only filesystem check.
    The filesystem size (according to the superblock) is 116473936 blocks
    The physical size of the device is 116441344 blocks
    Either the superblock or the partition table is likely to be corrupt!
    Abort? no

    /dev/loop1 contains a file system with errors, check forced.
    Pass 1: Checking inodes, blocks, and sizes
    Inode 26881053 extent tree (at level 2) could be narrower.  Fix? no

    Pass 2: Checking directory structure
    Pass 3: Checking directory connectivity
    Pass 4: Checking reference counts
    Pass 5: Checking group summary information
    Free blocks count wrong (20689291, counted=20689278).
    Fix? no

    Free inodes count wrong (25426857, counted=25426852).
    Fix? no


         3695703 inodes used (12.69%, out of 29122560)
           30256 non-contiguous files (0.8%)
             442 non-contiguous directories (0.0%)
                 # of inodes with ind/dind/tind blocks: 0/0/0
                 Extent depth histogram: 3616322/1294/3
        95784645 blocks used (82.24%, out of 116473936)
               0 bad blocks
              29 large files

         3510238 regular files
          107220 directories
               2 character device files
               0 block device files
              53 fifos
            1248 links
           78147 symbolic links (77987 fast symbolic links)
              39 sockets
    ------------
         3696947 files

No entanto, não consegui montar o sistema de arquivos:

 root@rescue /mnt/backups # mount -o ro /dev/loop1 /mnt/reco/
 mount: wrong fs type, bad option, bad superblock on /dev/loop1,
   missing codepage or helper program, or other error

O que pode ser feito a seguir? Parece que os dados estão tão próximos ...

    
por qurashi 27.05.2018 / 16:33

1 resposta

0

Ok, finalmente consegui restaurar o MBR. Como mencionei acima, eu tinha feito o backup dos MBRs de ambas as unidades RAID - para as unidades em si. Foi feito com a ajuda do comando dd:

dd if=/dev/nvme0n1 bs=512 count=1 of=nvme0n1.bootsector.backup
dd if=/dev/nvme1n1 bs=512 count=1 of=nvme1n1.bootsector.backup 

Eu pensei que seria possível procurar por arquivos de backup MBR nas imagens da unidade. Eu salvei os setores do MBR no servidor similar ao arquivo mbrb.backup, e ele tinha a string:

 "GRUB
#dd if=/dev/sdb of=mbrb.backup bs=512 count=1
#strings -t d mbr.backup | grep -4 -iE 'GRUB' | grep -4 'Geom' | grep -4 'Hard Disk' | grep -4 'Read' | grep -4 'Error'
392 GRUB
398 Geom
403 Hard Disk
413 Read
418  Error
Geom
#strings -t d /dev/nvme1n1 | grep -4 -iE 'GRUB' | grep -4 'Geom' | grep -4 'Hard Disk' | grep -4 'Read' | grep -4 'Error'
HardDisk
34368320904 GRUB
34368320910 Geom
34368320915 Hard Disk
34368320925 Read
34368320930  Error

34702932360 GRUB
34702932366 Geom
34702932371 Hard Disk
34702932381 Read
34702932386  Error

and some more results....
Read
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type 'warranty'.
34368320904/512
67125626

dd if=/dev/nvme1n1 of=recovery_file.34368320904 bs=512 skip=67125626 count=2
Error"

Como eu não consegui encontrar a string com bytes nulos na imagem de 512Gb, fiz uma pesquisa no grep que procurava por strings individuais, como esta no MBR de trabalho:

 dd if=recovery_file.475173835144 of=/dev/nvme1n1 bs=521 count=1

Eu comecei a procurar por essa string em raw drive:

Disk /dev/nvme1n1 - 512 GB / 476 GiB - CHS 488386 64 32
Current partition structure:
 Partition                  Start        End    Size in sectors

 1 P Linux RAID               1   0  1 32768  63 32   67108864 [rescue:0]

Warning: Bad starting sector (CHS and LBA don't match)
 2 P Linux RAID           32769   0  1 33280  63 32    1048576 [rescue:1]

Warning: Bad starting sector (CHS and LBA don't match)
 3 P Linux RAID           33281   0  1 488385  21 16  932053680 [rescue:2]

Warning: Bad starting sector (CHS and LBA don't match)
No partition is bootable

E encontrou mais de 20 offsets com essa string. Os deslocamentos ficaram assim:

dd if=/dev/nvme0n1 bs=512 count=1 of=nvme0n1.bootsector.backup
dd if=/dev/nvme1n1 bs=512 count=1 of=nvme1n1.bootsector.backup 

Do que salvei todos eles com dd, calculei a contagem de blocos com bc:

 "GRUB
#dd if=/dev/sdb of=mbrb.backup bs=512 count=1
#strings -t d mbr.backup | grep -4 -iE 'GRUB' | grep -4 'Geom' | grep -4 'Hard Disk' | grep -4 'Read' | grep -4 'Error'
392 GRUB
398 Geom
403 Hard Disk
413 Read
418  Error
Geom
#strings -t d /dev/nvme1n1 | grep -4 -iE 'GRUB' | grep -4 'Geom' | grep -4 'Hard Disk' | grep -4 'Read' | grep -4 'Error'
HardDisk
34368320904 GRUB
34368320910 Geom
34368320915 Hard Disk
34368320925 Read
34368320930  Error

34702932360 GRUB
34702932366 Geom
34702932371 Hard Disk
34702932381 Read
34702932386  Error

and some more results....
Read
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type 'warranty'.
34368320904/512
67125626

dd if=/dev/nvme1n1 of=recovery_file.34368320904 bs=512 skip=67125626 count=2
Error"

Tenho uns 20 + arquivos, a maioria deles é exatamente semelhante, talvez alguns arquivos GRUB. Então eu comecei a compará-los ao MBR que eu salvei do servidor de trabalho. O último parecia muito similar. Eu salvei no MBR do disco quebrado:

 dd if=recovery_file.475173835144 of=/dev/nvme1n1 bs=521 count=1

Verifiquei com o testdisk, curiosamente, ele reclamou que as partições estavam erradas, mas todo o resto parecia muito promissor:

Disk /dev/nvme1n1 - 512 GB / 476 GiB - CHS 488386 64 32
Current partition structure:
 Partition                  Start        End    Size in sectors

 1 P Linux RAID               1   0  1 32768  63 32   67108864 [rescue:0]

Warning: Bad starting sector (CHS and LBA don't match)
 2 P Linux RAID           32769   0  1 33280  63 32    1048576 [rescue:1]

Warning: Bad starting sector (CHS and LBA don't match)
 3 P Linux RAID           33281   0  1 488385  21 16  932053680 [rescue:2]

Warning: Bad starting sector (CHS and LBA don't match)
No partition is bootable

Então eu assumi o risco e coloquei o mesmo MBR no ataque / dev / nvme0n1. Após a reinicialização, os dispositivos md subiram e meus dados estavam de volta. Parece um milagre.

    
por 29.05.2018 / 18:38