Reconstruindo um array RAID 0 (nenhuma unidade falhou) se eu souber o tamanho do bloco e começar o offset?

0

A placa-mãe do meu laptop morreu. Eu removi os dois discos rígidos e ambos estão operacionais. Eu então conectei ambos em outro computador e usando algum software livre consegui o seguinte:

  • Tamanho do bloco: 128 KB (256 setores)
  • Os dados começam no setor LBA 0
  • Bloquear mapa: 1, 2
  • Eu também conheço a ordem dos discos

Eu estou querendo saber se isso é informação suficiente para reconstruir o array, e se for, como eu faria isso?

    
por Rarreen 01.10.2016 / 11:58

1 resposta

0

Recuperei totalmente os dados do meu colega na mesma situação (placa-mãe morta). A ferramenta foi dmsetup no Linux. Se você não tiver o Linux instalado, use o LiveCD, por exemplo. Knoppix.

Não sei se você está familiarizado com o Linux ou não. Minha resposta não cobrirá todos os fundamentos "óbvios" que você pode precisar (como mkdir ou sudo ), então se você é um novato em Linux, aprenda, pergunte nos comentários, etc.

Aqui, presumo que suas duas unidades são /dev/sda e /dev/sdb . Remapear meu exemplo para seus valores reais.

Investigando mais

Como você sabe que 256 setores são iguais a 128 KiB, o tamanho do setor é 512 B. Você precisa saber quantos setores existem em cada disco. Você disse que sabe a ordem dos discos; isso não significa necessariamente que você saberá qual dispositivo será /dev/sda quando seu Linux iniciar. Invoque um por um:

gdisk -l /dev/sda
gdisk -l /dev/sdb

Um desses comandos deve mostrar uma tabela de partições sã, indicando o primeiro dispositivo em sua matriz (esse conhecimento será útil mais tarde). Ignore avisos, se houver. Cada comando mostrará também o número de setores para o respectivo disco. Esses dois números podem ou não ser iguais. Se forem iguais, multiplique o número por 2 (em geral: pelo número de discos); se eles não forem iguais, obtenha o número mais baixo e multiplique por 2. O resultado é um número máximo de setores que o RAID0 pode utilizar. Vamos chamá-lo N .

Mas! Sua matriz deve ter 256 setores de um disco seguido por 256 setores do outro e assim por diante, número igual deles. Portanto, o número de setores em sua matriz deve ser divisível por 512. N pode não ser divisível, então você deve escolher o número inteiro não maior mais próximo que é divisível por 512. Trabalhar com calculadora ou por exemplo bash (substitua "N" pelo seu número real):

M=$((N/512*512))
echo $M

Este é o número mais provável de setores em sua matriz. O mais importante agora: esse é o número válido, mesmo que por algum motivo o número real seja menor que isso.

Criando dispositivo mapeado

O seguinte comando deve ser quase o correto para você:

echo "0 $M striped 2 256 /dev/sda 0 /dev/sdb 0" | dmsetup create mydevice

Eu escrevi "quase" porque há poucas coisas para ajustar:

  • substitua $M com seu valor adequado manualmente se você usou a calculadora em vez da aritmética de shell;
  • altere a ordem e os nomes dos dispositivos para se adequarem ao seu caso;
  • provavelmente você precisará de sudo para executar dmsetup .

O argumento para echo é o mapa do seu dispositivo, mydevice é um nome arbitrário. O mapa indica (em ordem) que o novo fragmento de dispositivo começando com 0 -th setor e cobrindo $M setores é stripped , criado com 2 dispositivos com tamanho de distribuição 256 setores, os dispositivos (em ordem) são /dev/sda (a partir do seu 0 -th sector) e /dev/sdb (também a partir do seu 0 -th sector).

Agora você deve ter /dev/mapper/mydevice disponível e pronto para uso. (Não tenho 100% de certeza de que toda implementação de dmsetup crie nós em /dev/mapper/ ; mydevice deve aparecer em algum lugar.)

Montagem

Verifique a tabela de partições que deve ser sensata e faz sentido:

gdisk -l /dev/mapper/mydevice

Se houver MBR, não GPT, você poderá receber um aviso sobre a tabela de partição secundária sobrepondo a última partição. Isso ocorre porque gdisk está pronto para escrever GPT. Você não precisa fazer isso e não vai. Ignore o aviso, se houver. Não há nada para se preocupar a menos que você já tenha GPT e a sobreposição ocorra.

Eu vi pessoas usando dmsetup ou kpartx para criar um nó associado a uma partição que desejam montar. Ou mesmo dd para "extrair" uma partição e montar o arquivo resultante. Nenhum destes é necessário. Atualmente, você pode usar mount de uma partição dentro do dispositivo inteiro, graças à opção offset . Por exemplo. se a partição que você precisa montar começa no setor 63. (valor comum para a partição do sistema Windows XP), você monta assim:

mount -o offset=$((512*63)),ro /dev/mapper/mydevice /mnt/foo

É altamente recomendável montar somente leitura ( -o ro ) no início (ou em todos os casos, se você quiser apenas obter dados). Se o software que você usou tiver algo errado ou se eu cometer algum erro com algum comando, você poderá corromper seus dados, a menos que você monte somente leitura. Este é um bom motivo para usar a opção ro , pelo menos até você vagar pelo sistema de arquivos, ler alguns arquivos (ex. Reproduzir mp3 -s e avi -s, ler pdf -s, exibir jpg -s etc.) e confirma que tudo parece em ordem.

Limpeza

Para destruir /dev/mapper/mydevice :

dmsetup remove /dev/mapper/mydevice

É claro que você deve umount suas partições primeiro.

    
por 02.10.2016 / 00:43