dados de recuperação do RAID e falha de disco (Linux)

3

Alguns antecedentes

Um amigo meu estava usando em seu escritório um NAS Buffalo-LS-WVL com dois discos de 1TB cada. Parece que os dois discos foram montados como raid 1, mas, como você vai ler, provavelmente eles não foram. O NAS deu alguns problemas de extrema lentidão e, de repente, não funcionou mais. Eu fui chamado para resgatar seus dados. Ambos os discos têm exatamente o mesmo particionamento: um físico e seis lógicos, e no sexto dado mora (aprox 80GB de 0,95TB).

O disco /dev/sdd parece dar problemas de hardware (lentidão, erro de leitura do setor, etc.), enquanto o / dev / sde é um disco que funciona bem fisicamente.

O objetivo é extrair dados contidos no NAS. Se nem todos os dados, mais a serem extraídos, melhor. Esses dados são vitais para a empresa desse amigo meu.

O que eu já tentei

  1. Primeira tentativa: montando discos sozinho

    Esta é a primeira tentativa, espero que funcione, tentei obter cada disco e montá-lo sozinho e recebi esta mensagem:

    root@ubuntu:~# mount /dev/sdd6 /mnt/n
    
    -or-
    
    root@ubuntu:~# mount /dev/sde6 /mnt/n
    

    ambos me deram a mesma mensagem:

    mount: unknown filesystem type 'linux_raid_member'
    
  2. 2ª tentativa: Criando o RAID 1 do array de disco e tentando montá-lo

    OK, se eu não conseguir montá-los sozinho, preciso criar uma matriz de discos. Vamos supor que (o mais lógico) a configuração original fosse o raid 1 e use um disco de cada vez:

    root@ubuntu:~# mdadm --create --run --level=1 --raid-devices=2 \
                      /dev/md/md-singolo-e6--create-missing /dev/sde6 missing
    

    dá:

    mdadm: /dev/sde6 appears to be part of a raid array:    
    level=raid0    
    devices=2    
    ctime=Mon Sep 26 10:23:48 2011    
    mdadm: Note: this array has metadata at the start and may not be suitable as a boot device.  If you plan to store '/boot' on this device please ensure that    your boot-loader understands md/v1.x metadata, or use    --metadata=0.90    
    mdadm: Defaulting to version 1.2 metadata    
    mdadm: array /dev/md/md-singolo-e6--create-missing started.
    

    Então, parece que o ataque original estava no modo 0 e não no modo 1. Ruim novo, como um disco está dando problemas no setor.

    De qualquer forma, eu tentei montar o array RAID1 recém-criado (mesmo que eu saiba que não faz sentido):

    root@ubuntu:~# mkdir /mnt/md-singolo-e6--create-missing    
    root@ubuntu:~# mount /dev/md/md-singolo-e6--create-missing \
                     /mnt/md-singolo-a6--create-missing/
    

    deu:

    mount: /dev/md127: can't read superblock
    

    Exatamente o mesmo resultado foi dado para o outro disco.

  3. 3ª tentativa: Criando disk array RAID 0 e tenta montá-los

    OK, como foi dito que foi Raid0, vamos em frente:

    root@ubuntu:~# mdadm --create --run --level=0 --raid-devices=2 \
                       /dev/md/md001hw /dev/sdd6 /dev/sde6 
    

    dá:

    mdadm: /dev/sdd6 appears to be part of a raid array:
    level=raid1
    devices=2
    ctime=Mon Oct 14 16:38:33 2013
    mdadm: /dev/sde6 appears to be part of a raid array:
    level=raid1
    devices=2
    ctime=Mon Oct 14 17:01:01 2013
    mdadm: Defaulting to version 1.2 metadata
    mdadm: array /dev/md/md001hw started.
    

    OK, uma vez criado eu tento montá-lo:

    root@ubuntu:~# mount /dev/md/md001hw /mnt/n
    
    mount: you must specify the filesystem type
    

    Neste ponto, todos os ext2,3,4 especificados com -t apresentaram erro.

  4. 4a tentativa: Criando imagens de disco e trabalha com elas

    OK, como um disco tem problema, é muito melhor trabalhar em uma cópia (dd) da partição de dados, preenchida com 0 (sync) em caso de erro de leitura de bloco (erro). Eu, portanto, criei as duas imagens:

    Este para o disco bom (bloco de 4MB, para ser mais rápido):

    root@ubuntu:~# dd bs=4M if=/dev/sde6 of=/media/pietro/4TBexthdd/sde6-bs4M-noerror-sync.img conv=noerror,sync
    

    e este para o disco com problemas (tamanho mínimo do bloco, para ser mais seguro)

    root@ubuntu:~# dd if=/dev/sde6 of=/media/pietro/4TBexthdd/sdd6-noerror-sync.img conv=noerror,sync
    

    Uma vez eu peguei as duas imagens, tentei usá-las como RAID 0, com o comando especificado acima. Nada a fazer, a resposta que veio é que as imagens "não é um dispositivo de bloco" e não cria o array.

  5. 5ª tentativa: ir byte-byte para resgatar alguns dados

    OK, se uma montagem apropriada não estiver funcionando, vamos extrair dados através de leitura de bytes e informações de cabeçalho e rodapé. Eu usei * first * para fazer este trabalho, ambos em cada disco: para o disco 1:

    root@ubuntu:~# foremost -i /dev/sde6 -o /media/pietro/4TBexthdd/foremost_da_sde6/
    

    cria subpastas com extensões de arquivo, mas nenhuma população nelas. Considerando que para o disco 2 (o danificado):

    root@ubuntu:~# foremost -i /dev/sdd6 -o /media/pietro/4TBexthdd/foremost_da_sdd6_disco2/
    

    nem a estrutura da subpasta é criada por todos.

    Mesmo resultado, quando tentei principalmente na matriz RAID 0:

    root@ubuntu:~# foremost -i /dev/md/md001hw -o /media/pietro/4TBexthdd/foremost_da_raid_hw/
    

    Nenhuma estrutura de subpastas foi criada.

Onde preciso de ajuda / Minhas perguntas

  • Primeira e principal questão: como resgatar dados? Alguém tem alguma dica que eu não tentei?
  • Alguém poderia sugerir algo diferente do que eu fiz?

Outras questões:

  • Sou novo em mdadm , fiz tudo corretamente?
  • Foi efetivamente a matriz original criada em 26 de setembro de 2011 no modo Raid 0?
  • Por que não consigo usar as imagens da partição para criar uma matriz?

Apêndice

Esta é a saída de dmesg em caso de leitura do disco com falha ( /dev/sdd ):

[  958.802966] sd 8:0:0:0: [sdd] Unhandled sense code
[  958.802976] sd 8:0:0:0: [sdd]  
[  958.802980] Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
[  958.802984] sd 8:0:0:0: [sdd]  
[  958.802987] Sense Key : Medium Error [current] 
[  958.802994] sd 8:0:0:0: [sdd]  
[  958.802999] Add. Sense: Unrecovered read error
[  958.803003] sd 8:0:0:0: [sdd] CDB: 
[  958.803006] Read(10): 28 00 00 d5 c7 e0 00 00 f0 00
[  958.803021] end_request: critical target error, dev sdd, sector 14010336
[  958.803028] quiet_error: 36 callbacks suppressed
[  958.803032] Buffer I/O error on device sdd, logical block 1751292
[  958.803043] Buffer I/O error on device sdd, logical block 1751293
[  958.803048] Buffer I/O error on device sdd, logical block 1751294
[  958.803052] Buffer I/O error on device sdd, logical block 1751295
[  958.803057] Buffer I/O error on device sdd, logical block 1751296
[  958.803061] Buffer I/O error on device sdd, logical block 1751297
[  958.803065] Buffer I/O error on device sdd, logical block 1751298
[  958.803069] Buffer I/O error on device sdd, logical block 1751299
[  958.803074] Buffer I/O error on device sdd, logical block 1751300
[  958.803078] Buffer I/O error on device sdd, logical block 1751301
[  961.621228] sd 8:0:0:0: [sdd] Unhandled sense code
[  961.621236] sd 8:0:0:0: [sdd]  
[  961.621238] Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
[  961.621241] sd 8:0:0:0: [sdd]  
[  961.621243] Sense Key : Medium Error [current] 
[  961.621248] sd 8:0:0:0: [sdd]  
[  961.621251] Add. Sense: Unrecovered read error
[  961.621254] sd 8:0:0:0: [sdd] CDB: 
[  961.621255] Read(10): 28 00 00 d5 c8 d0 00 00 10 00
[  961.621266] end_request: critical target error, dev sdd, sector 14010576
[  964.791077] sd 8:0:0:0: [sdd] Unhandled sense code
[  964.791084] sd 8:0:0:0: [sdd]  
[  964.791087] Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
[  964.791090] sd 8:0:0:0: [sdd]  
[  964.791092] Sense Key : Medium Error [current] 
[  964.791096] sd 8:0:0:0: [sdd]  
[  964.791099] Add. Sense: Unrecovered read error
[  964.791102] sd 8:0:0:0: [sdd] CDB: 
[  964.791104] Read(10): 28 00 00 d5 c8 00 00 00 08 00
[  964.791114] end_request: critical target error, dev sdd, sector 14010368
[  964.791119] quiet_error: 22 callbacks suppressed
[  964.791122] Buffer I/O error on device sdd, logical block 1751296
    
por PietroAM 18.10.2013 / 19:33

1 resposta

7

Eu odeio ser o portador de más notícias, mas ...

Q: I'm new to mdadm, did I do everything correctly?

R: Não. Na verdade, você fez praticamente tudo da maneira mais destrutiva possível. Você usou --create para destruir os metadados da matriz, em vez de usar --assemble , o que provavelmente permitiria que você lesse os dados (pelo menos, na medida em que o disco fosse capaz de fazer isso). Ao fazer isso, você perdeu metadados críticos (em particular, a ordem de disco, o deslocamento de dados e o tamanho do bloco).

Além disso, --create pode ter metadados de matriz rabiscados sobre estruturas críticas do sistema de arquivos.

Finalmente, na sua etapa (3), vejo que o mdadm está reclamando de RAID1 em ambos os discos - espero que seja de você tentando (2) em ambos os discos, individualmente. Eu sinceramente espero que você não deixe o RAID1 começar a tentar sincronizar os discos (digamos, você adicionou ambos ao mesmo array RAID1).

O que fazer agora

Parece que você finalmente criou imagens das unidades. Você deveria ter feito isso primeiro , pelo menos antes de tentar qualquer coisa além de um --assemble básico. Mas de qualquer maneira,

  • Se a imagem do disco rígido perdeu a maioria / todos os setores, determine se a recuperação de dados profissional vale a pena. Os arquivos (e os metadados do sistema de arquivos) são divididos em unidades no RAID0, portanto, você realmente precisa recuperar ambos. A recuperação profissional provavelmente será capaz de ler a unidade.

  • Se a imagem estiver boa, exceto em alguns setores, continue.

Faça uma cópia dos arquivos de imagem. Trabalhe apenas nas cópias dos arquivos de imagem. Eu não posso enfatizar isso o suficiente, você provavelmente estará destruindo essas cópias várias vezes, você precisa ser capaz de começar de novo. E você não quer ter que fazer a imagem dos discos novamente, especialmente porque um está falhando!

Para responder a uma das suas outras perguntas:

Q: Why I cannot use the partition images to create an array?

R: Para montar (ou criar) uma matriz de arquivos de imagem, você precisa usar um dispositivo de loopback. Você anexa uma imagem a um dispositivo de loopback usando losetup . Leia a manpage, mas será algo como losetup --show -f /path/to/COPY-of-image . Agora, você usa mdadm nos dispositivos de loop (por exemplo, /dev/loop0 ).

Determine o layout da matriz original

Você precisa descobrir todas as opções mdadm que foram originalmente usadas para criar a matriz (desde que você destruiu os metadados com --create anterior). Você então executa --create nos dois dispositivos de loopback, exatamente com essas opções. Você precisa descobrir a versão de metadados ( -e ), o nível de RAID ( -l , parece ser 0), o tamanho do bloco ( -c ), número de dispositivos ( -n , deve ser 2) e a ordem exata dos dispositivos.

A maneira mais fácil de obter isso é obter dois novos discos, colocá-los no NAS e fazer com que o NAS crie um novo array neles. De preferência com a mesma versão de firmware do NAS usada originalmente. IOW, repita a configuração inicial. Em seguida, retire os discos e use mdadm -E em um dos membros. Aqui está um exemplo de um array RAID10, tão ligeiramente diferente. Omiti um monte de linhas para destacar as que você precisa:

        Version : 1.0                 # -e
     Raid Level : raid10              # -l
   Raid Devices : 4                   # -n

     Chunk Size : 512K                # -c

   Device Role : Active device 0                         # gets you the device order
   Array State : AAAA ('A' == active, '.' == missing)

NOTA: Suponho que você esteja usando o ext2 / 3/4 aqui; se não, use os utilitários apropriados para o sistema de arquivos que o NAS realmente usou.

Tente criar (nos dispositivos de loopback) com essas opções. Veja se e2fsck -n o reconhece. Caso contrário, pare a matriz e crie-a novamente com os dispositivos na outra ordem. Tente e2fsck -n novamente.

Se nenhum dos dois funcionar, você deve voltar para a ordem que considera adequada e tentar um superbloco de backup. O e2fsck manpage informa qual número usar; você quase certamente tem um tamanho de 4K. Se nenhum dos superblocos de backup funcionar, pare a matriz e tente a outra ordem de disco. Se isso não funcionar, você provavelmente tem as opções --create erradas; recomeçar com nova cópia das imagens & Experimente algumas opções diferentes: tentei versões de metadados diferentes primeiro.

Depois de executar o e2fsck, veja o quanto o sistema de arquivos está danificado. Se estiver completamente destruído, isso pode significar que você tem o tamanho errado do pedaço (pare e recrie o array para tentar um pouco mais).

Copie os dados para fora.

Eu sugiro deixar o e2fsck tentar consertar o sistema de arquivos. Isso arrisca destruir o sistema de arquivos, mas, bem, é por isso que você está trabalhando em cópias! Então você pode montá-lo e copiar os dados. Tenha em mente que alguns dos dados provavelmente estão corrompidos e que a corrupção pode estar oculta (por exemplo, uma página de um documento poderia ter sido substituída por NULLs).

Não consigo obter os parâmetros originais do NAS

Então você está em apuros. Sua outra opção é adivinhar até que finalmente funcione, ou aprender o suficiente sobre os formatos em disco para descobrir isso usando um editor hexadecimal. Pode haver um utilitário ou dois lá fora para ajudar com isso; Não sei.

Como alternativa, contrate uma empresa de recuperação de dados.

    
por 18.10.2013 / 22:23