(Eu sei que esta é uma pergunta antiga, me deparei com este problema e recuperei meu FS sem ddrescue
, então compartilharei a experiência para qualquer outra pessoa encontrar isso)
Ext sistemas de arquivos armazenam backups do superbloco - para uma ocasião como esta.
Primeiro, determine os locais dos backups ( certifique-se de ter a opção -n! caso contrário, isso limpará o sistema de arquivos com um novo):
mke2fs -n /dev/sdxx
Esta é uma execução de teste (ou seja, sem gravação) da rotina de criação de FS. Ele permitirá que você saiba os deslocamentos de onde ele colocaria backups de superblocos se estivesse criando um sistema de arquivos. Se você sabe que seu tamanho de bloco FS é diferente de 4096, você também deve especificar o parâmetro -b {blocksize}
para obter os números corretos.
Para blocos do tamanho 4096, o primeiro superbloco de backup estará em 32768
. Se as seguintes operações falharem com a mesma mensagem de erro sobre superbloco ruim / leitura curta, tente o próximo backup de superbloco da lista mke2fs
deu a você.
Em seguida, você pode montar o sistema de arquivos usando o superbloco de backup como este
mount -o sb=32768 /dev/sdxx /mnt/sdxx
explore o FS no gerenciador de arquivos, copie os arquivos não danificados, etc.
Ou, para realmente corrigir o FS, você pode executar fsck
com o superbloco de backup como este
e2fsck -fy -b 32768 /dev/sdxx
Aqui -f
faz com que ele verifique o disco mesmo que não esteja sujo e -y
responde sim a todas as perguntas sobre conserto de material. A opção -b
, além de especificar o superbloco de backup, fará com que atualize o superbloco original com informações do backup.
Depois disso, você deve ter seu sistema de arquivos de volta.
Se o e2fsck não conseguir escrever o superbloco principal
Se o superbloco foi corrompido porque está em um setor ruim e2fsck
terminará a execução, tentará atualizar o superbloco e fornecerá a seguinte mensagem de erro:
Error writing block 1 (Attempt to write block from filesystem resulted in short write)
Obviamente, o superbloco principal não é atualizado e todo o e2fsck
é inutilizado.
Você precisa sugerir ao disco para remapear esse setor - escrevendo zeros nele. Obrigado ao @Keith por apontar isto: o próximo comando pode fazer muita bagunça se for digitado incorretamente , então triplique-o antes de rodar. Aqui está a mágica:
dd if=/dev/zero of=/dev/sdxx bs=4096 count=1 seek=0
Isto irá escrever 1 bloco de zeros do tamanho de 4096 para sdxx no offset 0. Não se esqueça de levar em consideração o tamanho de bloco diferente se esse for o caso para você.
Depois disso, você poderá escrever para o superbloco (que estará em um setor físico diferente para você). Agora, você executa o comando e2fsck
acima novamente e ele deve gravar o superbloco permitindo que você monte o FS normalmente.
Vai sem dizer Agora você deve fazer backup dos dados críticos para outra unidade física e, se você ainda planeja usar o sistema de arquivos, execute
e2fsck -fccy /dev/sdxx
PS Parabéns para @Nemo nessa descoberta: no caso de todos os backups do superbloco do seu FS estarem corrompidos, mke2fs/mkfs
tem a opção -S que irá recriar o superbloco e descritores de grupo como se estivesse criando um novo sistema de arquivos, sem tocar em mais nada. Mas você precisa ter certeza de que o seu tamanho de bloco está correto e a página de manual diz que você deve executar e2fsck
depois dele e não há garantias de que os dados sejam deixados para resgatar. Leia a página de manual e jogue uma vantagem em esta resposta .