Recupere o sistema de arquivos de um RAID1 corrompido

2

TL;DR How to recover the ext4 file system from a corrupted RAID1 partition?

Minha situação

Eu tenho um disco com falha que pertenceu a um array RAID1 em um Synology DiskStation, o outro foi perdido. Usando ddrescue , copiei a maioria dos dados relevantes para um novo disco. A tabela de partições resistiu, no entanto, alguns blocos essenciais para a configuração do RAID estão corrompidos.

# fdisk -l /dev/sdd
Disk /dev/sdd: 3000.6 GB, 3000592982016 bytes
255 heads, 63 sectors/track, 364801 cylinders, total 5860533168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x0003f44a

   Device Boot      Start         End      Blocks   Id  System
/dev/sdd1             256     4980735     2490240   fd  Linux raid autodetect
/dev/sdd2         4980736     9175039     2097152   fd  Linux raid autodetect
/dev/sdd3         9437184  3907024064  1948793440+  fd  Linux raid autodetect

Os dados reais estão na terceira partição /dev/sdd3 , mas mdadm não pode montar a matriz.

# mdadm --examine /dev/sdd
/dev/sdd:
   MBR Magic : aa55
Partition[0] :      4980480 sectors at          256 (type fd)
Partition[1] :      4194304 sectors at      4980736 (type fd)
Partition[2] :   3897586881 sectors at      9437184 (type fd)


# mdadm --examine /dev/sdd3
mdadm: No md superblock detected on /dev/sdd3.

Como resultado, não consigo montar a partição. Os dados estão lá e são reconhecidos por ferramentas como foremost .

Eu também tentei usar extundelete , mas ele falha sem um superbloco ext adequado.

# extundelete --superblock /dev/sdd3
extundelete: failed to read-only open device "/dev/sdd3": Error code 2133571347

A pergunta (s)

Como recuperar arquivos e diretórios de uma partição RAID1 corrompida?

Existe alguma maneira de recriar o md superblock , sem perder os dados existentes?

Seria possível ignorar as partes md, tratar a partição como uma partição ext4 corrompida e recuperá-la dessa maneira?

    
por Jakub 26.10.2016 / 13:24

2 respostas

4

Você pode usar uma montagem de loop para montar uma partição em sua imagem de disco como um dispositivo. Ao criar o dispositivo de loop, você fornece um deslocamento que faz o dispositivo de loop começar naquele ponto da partição.

Desta forma, você pode pular o superbloco MD em falta e fazer o dispositivo de loop iniciar no início da partição ext4 ou do possível LVM.

Agora, precisamos saber o tamanho do superbloco MD para fornecer um deslocamento adequado ao criar um dispositivo de loop.

No artigo manual do MD , é possível ver os tamanhos e locais de superblocos diferentes versões MD.

As versões 0.9 e 1.0 possuem o superbloco no final do dispositivo, portanto o sistema de arquivos inicia no início do dispositivo e seu comando mount deve ter sido bem-sucedido. Então, o seu RAID Superblock deve ter alguma outra versão.

A versão 1.1 tem o superbloco no início do dispositivo, e a versão 1.2 tem o superbloco a 4k desde o início do dispositivo.

No entanto, há muito espaço reservado para a possível expansão do superbloco mais tarde. Uma fonte me diz que o sistema de arquivos iniciaria um megabyte após o início do dispositivo. Nesse caso, você tentaria os seguintes comandos:

losetup /dev/loop0 /dev/sdd3 -o 1048576
mount /dev/loop0 /mnt

O primeiro comando configura um dispositivo de loop que começa no deslocamento em um megabyte do início da partição /dev/sdd3 . Então, esse dispositivo de loop é montado em /mnt .

O offset pode ser outra coisa, e infelizmente eu não consegui encontrar uma boa fonte para o que os offsets poderiam realmente ser.

    
por 26.10.2016 / 15:28
3

Embora eu nunca tenha tentado usá-lo para sistemas de arquivos baseados em ext, tive muito sucesso na recuperação de dados com o TestDisk em sistemas Windows no passado.

link

O site deles indica especificamente que o software é capaz de trabalhar em discos RAID 1 no Linux.

    
por 26.10.2016 / 13:49