Como montar / recuperar dados em um disco que fazia parte de um mdadm raid 1 em outra máquina?


17

Alguma experiência

  • O próprio disco foi "trabalhado" por um amigo e ainda está intacto, sem danos e ainda montável / recuperável
  • O disco fazia parte de uma invasão de software 1 no Ubuntu 12.04
  • O outro disco no ataque original 1 foi formatado e usado para outra finalidade, deixando o disco atual (o em questão) ainda tecnicamente parte de um ataque que não existe mais

O que eu já tentei

  • Montagem básica

    • Adicionei uma entrada ao fstab, marquei o disco como ext3 / ext4 e tentei montar.
    • Ao montar, o seguinte erro aparece

      wrong fs type, bad option, bad superblock on

    • E em dmesg

      EXT4-fs (sdc1): VFS: Can't find ext4 filesystem

  • Eu tentei encontrar o tipo de sistema de arquivos do disco e criei

    $sudo file -s /dev/sdc
    /dev/sdc: x86 boot sector; partition 1: ID=0x83, starthead 254, startsector 63, 1953520002 sectors, code offset 0xb8

Onde preciso de ajuda / Minhas perguntas

  • Existe uma maneira de converter o disco para ext4 sem danificar os dados?
  • Existe uma maneira simples de montar o disco do tipo de arquivo Linux 83 e recuperar os dados?
  • Eu tenho outro disco atualmente livre, caso seja possível reconstruir o ataque de alguma forma
  • Meu principal objetivo é recuperar os dados do disco. Estou aberto a todas as opções.

Atualizar

Saída de alguns comandos

  • fdisk -l / dev / sdc

    $fdisk -l /dev/sdc

    Disk /dev/sdc: 1000.2 GB, 1000204886016 bytes
    255 heads, 63 sectors/track, 121601 cylinders, total 1953525168 sectors
    Units = sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disk identifier: 0x0005ed9c

    Device Boot Start End Blocks Id System
    /dev/sdc1 63 1953520064 976760001 83 Linux

  • arquivo -s / dev / sdc1

    $file -s /dev/sdc1
    /dev/sdc1: data

  • hexdump -C -n 32256 / dev / sdc (Não tenho certeza se isso pode ajudar ou não)

    $hexdump -C -n 32256 /dev/sdc`
    00000000  fa b8 00 10 8e d0 bc 00  b0 b8 00 00 8e d8 8e c0  |................|
    00000010  fb be 00 7c bf 00 06 b9  00 02 f3 a4 ea 21 06 00  |...|.........!..|
    00000020  00 be be 07 38 04 75 0b  83 c6 10 81 fe fe 07 75  |....8.u........u|
    00000030  f3 eb 16 b4 02 b0 01 bb  00 7c b2 80 8a 74 01 8b  |.........|...t..|
    00000040  4c 02 cd 13 ea 00 7c 00  00 eb fe 00 00 00 00 00  |L.....|.........|
    00000050  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
    *
    000001b0  00 00 00 00 00 00 00 00  9c ed 05 00 00 00 00 fe  |................|
    000001c0  ff ff 83 fe ff ff 3f 00  00 00 82 59 70 74 00 00  |......?....Ypt..|
    000001d0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
    *
    000001f0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 55 aa  |..............U.|
    00000200  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
    *
    00007e00
    

O problema é que a partição pensa que possui algum volume de invasão e não um ext4fs. E o kernel está certo. No entanto, como foi um ataque 1, passou a ser um ext4fs. um mount -f ext4 /dev/sdc1 /mountpointdeve fazer o truque. Para força montar a assumir ext4 em vez de olhar para um sistema de arquivos é o que -f faz
— Bananguin

1
A montagem forçada não apresenta erros, mas o ponto de montagem está em branco. Os dados sumiram ou a montagem não funcionou conforme o esperado. Fazer a dfmostra que o disco recém-montado está em uso a 2%, o que é significativamente menor do que o esperado.
— Adam

@ user1129682, se mount diz que não é ext4, então não é ... tentar forçá-lo não ajudará.
— Psusi

@ psusi: trabalhou para mim. Gilles resposta explainns por que ela funciona em algumas circunstâncias
— Bananguin

@Banguanguin Você não quer dizer mount -t ext4? O sinalizador -f é para montagem 'fake' (ubuntu 14.04).
— precisa saber é o seguinte

Respostas:


11

Isso está funcionando excelentemente no Ubuntu 14.04:

sudo -i
mdadm --assemble --scan

Você vai ter:

mdadm: /dev/md/1 has been started with 1 drive (out of 2)

Em seguida, monte e veja seus arquivos:

cd /mnt && mkdir to-restore-md1 && mount /dev/md1 to-restore-md1
ls -la to-restore-md1

Estava recebendo "existe, mas não é um array md" em um disco rígido com falha que fazia parte de um array ... e isso funcionou melhor do que todas as outras sugestões. Montado com sucesso, ocupado copiando dados agora.
— Zayne S Halsall

essa opção funcionou bem para mim. 2 SSDs Intel em RAID1. Puxou um e baixou a porta SATA para o PC executando o suse linux. Inicialmente aparece como único /dev/sdce como /dev/md127. Em seguida, fez mdadm --assemble --scano que resultou em /dev/md/Volume0_0p1e /dev/md/Volume0_0p2e assim por diante correspondente a 4 partições que estavam no disco. O P2 era o que eu precisava: mkdir /p2 seguido de mount /dev/md/Volume0_0p2 /p2um EXT3 montado e posso acessar e copiar os dados com facilidade. Também o montou como leitura e gravação.
— 1616 ron

você fez meu dia! Obrigado!
— Gooshan 13/03/19

por vezes, o --scanmodo de não começar matrizes com discos que faltam, no meu caso aqui eu tive que parar o conjunto montado automaticamente e iniciá-lo novamente commdadm --assemble --force /dev/md/1 /dev/sdc1
— BrunoJCM

7

O Linux mdraid possui vários formatos de metadados . Os formatos 0.9 e 1.0 colocam os metadados no final do dispositivo que contém e a carga (o sistema de arquivos) começa no início do dispositivo e pode ser acessada diretamente sem passar pela camada de ataque. Os formatos 1.1 e 1.2 colocam os metadados no meio e no início do dispositivo que contém, respectivamente, para que a carga útil esteja em um deslocamento.

O instalador do Ubuntu cria volumes com o formato de metadados 1.2, para que seus dados sejam iniciados após os metadados, e não no início do dispositivo.

A maneira mais simples de acessar esses dados é montar o dispositivo de ataque. Em um volume RAID-1, um único dispositivo é suficiente.

madadm -A /dev/sdc1

(Pare aqui, a menos que você goste de dor.)

Você também pode acessar os dados em um deslocamento. O único ponto que posso fazer para fazer isso é se você precisar trabalhar em um kernel muito antigo que não suporte os formatos 1.x mdraid. Primeiro, determine o deslocamento mdadm -E /dev/sdc1: procure a linha Data Offset : SSS sectors. Um setor mdadm é de 512 bytes.

sectors=$(mdadm -E /dev/sdc1 | awk -F: '$1 ~ /Data offset/ {print $2}')
bytes=$(($sectors * 512))
losetup -f -o $bytes /dev/sdc1

Em desespero, nos formatos 1.x, o deslocamento de dados é armazenado nos bytes 128 a 135 dos metadados, little endian¹. Os metadados 1,2 são 4096 bytes após o início do dispositivo.

Você também pode alterar a tabela de partição para que ela comece ainda mais. Tenha muito cuidado com sua aritmética. Faça isso apenas se quiser continuar usando o disco a longo prazo em um sistema antigo que não pode acessar o dispositivo de invasão.

¹ Ou com endianness de plataforma? Não tenho certeza.


os dados podem começar com diferentes desvios (veja mdadm -E /dev/sdc1exatamente onde), mas certamente não em 4k para 1,2 metadados, pois 4k é exatamente onde os metadados são armazenados. Veja também unix.stackexchange.com/q/57477/22565
— Stéphane Chazelas

@StephaneChazelas Opa, sim, peido cerebral. Obrigado.
— Gilles 'SO- stop be evil'

3
mdadm -A /dev/sdc1saídas mdadm: device /dev/sdc1 exists but is not an md array.eu fui um pouco mais para uso mdadm e ver se há qualquer informação adicional ... mdadm --misc --examine /dev/sdc1saídas mdadm: No md superblock detected on /dev/sdc1.. Existe uma maneira de reescrever os superblocos nesse disco para marcá-lo como um disco disponível para montagem RAID?
— Adam

@Gilles A mdadm -E /dev/sdcretorna o seguinte para mim: /dev/sdc: MBR Magic : aa55 Partition[0] : 1953520002 sectors at 63 (type 83) mas nenhuma informação para / dev / sdc1 embora
— Adam

1
@ Adam Se o mdadm não consegue encontrar seus metadados, não há nada que você possa fazer lá: você não pode forçá-lo a fazer algo, pois ele não sabe o que fazer. Você precisa procurar um sistema de arquivos e, se o conselho da psusi não levar a lugar algum, a perspectiva é sombria. Talvez um hexdump dos primeiros kilobytes do disco possa inspirar alguém (lembre-se de expor alguns dados confidenciais).
— Gilles 'SO- stop be evil'

5

Para minha surpresa, eu era capaz de recuperar os dados simplesmente usando o principal .

A ajuda recebida aqui foi inestimável. Depois de tentar uma variedade de combinações sugeridas, bem como meus próprios mix-ins, o método ideal (montar e usar o disco normalmente) não parecia mais uma opção. Recorrer à recuperação de dados é a minha solução neste caso.


Sei que isso foi há um tempo atrás! Mas você se lembra se conseguiu usar acima de tudo sem montar a partição?
— PhillipOReilly

Desculpe, não me lembro mais dos detalhes disso. : /
— Adam

3

Parece que você já aplicou um zap no superbloco mdadm. Se ele costumava estar lá e tinha o formato 1.1 ou 1.2, provavelmente o sistema de arquivos está no deslocamento de 2048 setores. Você pode executar e2fsck /dev/sdc1?offset=2048para forçá-lo a procurar o sistema de arquivos iniciando nesse deslocamento. Se encontrar, você poderá modificar sua tabela de partições para apontar para onde o sistema de arquivos realmente inicia. Você pode usar parted /dev/sdce o unit scomando para usar unidades de setores. printNa tabela, observe o setor inicial e final, depois rma partição, em seguida, recrie-a mkparte use o mesmo setor final, mas adicione o deslocamento ao setor inicial.

Se 2048 não funcionar, você também pode tentar 1985.


A execução e2fsck /dev/sdc1?offset=2048(eu também executei o offset = 1985) produz Bad magic number..Superblock invalid..., além de sugerir que o superbloco está corrompido e tentar executar o e2fsck com um superbloco alternativo. Parece que eu deveria fornecer um superbloco alternativo para avançar.
— Adam

@ Adam, não, você só precisa obter o deslocamento correto. testdiskdeve poder fazer uma varredura detalhada e corrigir a tabela de partições para você.
— psusi

testdiské um território completamente novo para mim. Uma apresentação básica (Analisar) No ext2, JFS, Reiser.. marker. Bad relative sector. No partition is bootable.Também fornece o seguinte: 1 P Linux 0 1 1 121600 254 63 1953520002Como entender isso para ajudar a situação?
— Adam

@ Adam, eu nunca usei isso sozinho, só sei que ele deve procurar e encontrar o superbloco. Você o executou em todo o disco, não na partição, certo?
— 21413 psusi

Depois de executar uma análise no disco completo, não apareceu partições. Atualmente executando uma verificação profunda agora. Se isso não aparecer, não sei para onde ir a partir daqui.
— Adam
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.