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.