Eu tenho um disco rígido com falha que não consegue gravar ou ler os primeiros setores do disco. Apenas fornece erros de E / S e é tudo o que existe. Existem outras áreas no disco que parecem (principalmente) bem. Estou tentando montar uma partição (ext4) e ver se consigo acessar alguns arquivos que gostaria de recuperar. Como o mount
comando suporta uma offset
opção, eu devo poder montar o sistema de arquivos, mesmo que a tabela de partição seja ilegível e não gravável. O problema é como encontrar o deslocamento. Nenhuma das ferramentas ext4 parece ter esse recurso específico.
filesystems
partition
data-recovery
ext4
Ernest A
fonte
fonte
Respostas:
Não existe um deslocamento padrão por si só, pois é claro que você pode iniciar a partição onde quiser. Mas vamos assumir por um momento que você está procurando a primeira partição, e ela foi criada com padrões mais ou menos aceitáveis. Existem dois lugares em que você pode encontrá-lo, supondo que você esteja usando uma tabela de partição tradicional do DOS:
Agora, para continuar, você desejará escolher sua ferramenta hex-dump favorita e aprender um pouco sobre o Layout de disco ext4 . Em particular, ele começa com 1024 bytes de preenchimento, que o ext4 ignora. Em seguida, vem o superbloco. Você pode reconhecer o superbloco verificando o número mágico 0xEF53 no deslocamento 0x38 (no início do superbloco ou 0x438 no início da partição ou 1080 em decimal.) O número mágico é little-endian. Portanto, ele é realmente armazenado no disco como 0x53EF.
Aqui está o que isso se parece com
xxd -a
:0000000: 0000 0000 0000 0000 0000 0000 0000 0000 ................ * 0000400: 0040 5d00 0084 7401 33a0 1200 33db a600 .@]...t.3...3... 0000410: 4963 5300 0000 0000 0200 0000 0200 0000 IcS............. 0000420: 0080 0000 0080 0000 0020 0000 6637 0952 ......... ..f7.R 0000430: 6637 0952 0200 1600 53ef 0100 0100 0000 f7.R....S....... 0000440: 9938 f851 004e ed00 0000 0000 0100 0000 .8.Q.N..........
Observe que, quando você der o deslocamento para montagem (ou perda de ajuste), deverá dar o deslocamento para onde o preenchimento começa - não para o superbloco.
Agora, se não é a primeira partição, ou não está em um dos dois (três) pontos esperados, você basicamente procura o número mágico 0xEF53. Isto é o que
testdisk
(recomendado em um comentário) faz por você.fonte
testdisk
não o encontraria. Obrigado a todos pela ajuda.dd if=/dev/sda skip=$start_sector | xxd -a | grep '[02468]30: .... .... .... .... 53ef'
para obter algumas correspondências prováveis. Provavelmente não é muito rápido, mas você pode deixá-lo funcionar enquanto encontra um método melhor.testdisk
, eu só tive que adicionar uma edição para umtl;dr:
cabeçalhoCom base na resposta do @ derobert , escrevi um programa ( gist ) que analisará um fluxo de entrada
dd
e examinará cada setor em busca de algo parecido com o início de uma partição ext.Funcionará pelo menos o mais rápido que
dd
puder ler no seu disco rígido. Uma versão resumida está abaixo.O uso mais simples é justo
sudo dd if=/dev/xxx | ext2scan
, embora você provavelmente deseje modificar odd
comando para melhorar o tamanho do bloco ou escolher uma região para pesquisar.Nota: encontrará não apenas o início das partições, mas também superblocos dentro delas.
Em ambos os casos, eu recomendaria o uso
dumpe2fs
para analisar os resultados. Você pode despejar o início do superbloco suspeito em um arquivo (pelo menos os seis primeiros setores, de acordo com meu teste informal) e, se for um superbloco,dumpe2fs
informará (entre outras coisas) a localização relativa dos outros superblocos .fonte
Adivinhe onde a partição começa e aplique uma força bruta:
Imagino que isso possa levar algum tempo, mas se você já passou 6 horas com o testdisk, talvez valha a pena tentar.
fonte
echo "--->$i<---"
linha por causa disso, pois, caso contrário, é impossível avaliar o progresso. Eu acho que você poderia aumentarbsz
para 4096, o que acelerará as coisas.Tente outra opção (por exemplo, usando debugfs e fsck.ext4):
debugfs:
Você precisa montar os debugfs primeiro (não o próprio disco rígido com falha):
http://johnsofteng.wordpress.com/2013/11/20/sysfs-procfs-sysctl-debugfs-and-other-similar-kernel-interfaces/
http://afzalkhanlinuxtalk.wordpress.com/2013/08/07/how-to-recover-deleted-file-in-linux/comment-page-1/#comment-8
http://blesseddlo.wordpress.com/2010/10/12/using-debugfs/
(essencialmente, é usar "debugfs -w" com o modo ativado para gravação e, em seguida, seguido de "lsdel" para listar todos os arquivos excluídos). alternativamente, você pode usar
e aqui está o fsck.ext4:
http://linuxexpresso.wordpress.com/2010/03/31/repair-a-broken-ext4-superblock-in-ubuntu/
Outro é o "sleuthkit" ("sudo apt-get install sleuthkit"), que possui comando como "istat" para fornecer informações sobre os blocos sobre os inodes - dos quais você pode obter o deslocamento e, assim, bloquear o conteúdo dos dados facilmente.
https://www.ibm.com/developerworks/cn/linux/l-cn-ext4resize/
(BTW, se o tamanho do bloco for 1024, do comando "show_super_stats" do debugfs, segue-se que o bloco 1 tem 1024 bytes de deslocamento desde o início do disco e cada grupo de blocos também pode ter vários blocos.)
fonte
Eu tinha uma imagem de firmware de e-book que incluía a imagem da partição ext3fs, para montar e editar que eu tinha que digitalizar a imagem usando a ferramenta bgrep para encontrar todas as posições do número mágico do ext3fs
0x53EF
e tentar montar usando as compensações encontradas.Aqui está um script abreviado que executa a montagem:
Script completo localizado aqui .
fonte
Isso não foi testado, mas acho que você pode usar o método discutido nesta seção de perguntas e respostas da SU, intitulado: Pesquisa inversa de inode / arquivo a partir do deslocamento no dispositivo bruto no linux e ext3 / 4? .
Parece que você pode usar o inode de um arquivo + o deslocamento dos discos + o tamanho do bloco para determinar o deslocamento do arquivo.
fonte