Leitura curta ao tentar abrir a partição

7

No meu computador pessoal que executa o Kubuntu Linux 13.04, estou tendo problemas para montar uma partição que é muito cara para mim. Minha política de backup é fazer um backup mensalmente, então eu tenho um backup de agosto :). Existe alguma maneira de recuperar os arquivos pessoais que estão nesta unidade?

A unidade é uma unidade de 1000 GiB Western Digital Green de 1.5 anos de idade, com montagem em casa em /dev/sdc2 , a raiz do sistema de arquivos em /dev/sdc6 e arquivos de mídia em /dev/sdc3 . Portanto, é claro que sdc2 seria o único a ir! Tanto quanto sei, não houve falta de energia ou outros eventos semelhantes durante a vida da unidade. Consegui obter esta informação executando um LiveCD do Kubuntu:

kubuntu@kubuntu:~$ sudo fdisk -l

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: 0x00008044

  Device Boot      Start         End      Blocks   Id  System
/dev/sdc1   *        4094    88066047    44030977    5  Extended
/dev/sdc2        88066048  1419266047   665600000   83  Linux
/dev/sdc3      1419266048  1953523711   267128832   83  Linux
/dev/sdc5            4096     6146047     3070976   82  Linux swap / Solaris
/dev/sdc6         6148096    47106047    20478976   83  Linux
/dev/sdc7        47108096    88066047    20478976   83  Linux


kubuntu@kubuntu:~$ sudo mount -t ext4 /dev/sdc2 c1
mount: wrong fs type, bad option, bad superblock on /dev/sdc2,
  missing codepage or helper program, or other error
  In some cases useful info is found in syslog - try
  dmesg | tail  or so


  kubuntu@kubuntu:~$ sudo debugfs -c /dev/sdc2 
debugfs 1.42.5 (29-Jul-2012)

/dev/sdc2: Attempt to read block from filesystem resulted in short read while opening filesystem
debugfs:  quit


kubuntu@kubuntu:~$ sudo fsck /dev/sdc2
fsck from util-linux 2.20.1
e2fsck 1.42.5 (29-Jul-2012)
fsck.ext4: Attempt to read block from filesystem resulted in short read while trying to open /dev/sdc2
Could this be a zero-length partition?


kubuntu@kubuntu:~$ sudo fsck.ext4 -v /dev/sdc2
e2fsck 1.42.5 (29-Jul-2012)
    fsck.ext4: Attempt to read block from filesystem resulted in short read while trying to open /dev/sdc2
Could this be a zero-length partition?


kubuntu@kubuntu:~$ dmesg | tail
[ 2684.532855] Descriptor sense data with sense descriptors (in hex):
[ 2684.532858]         72 03 11 04 00 00 00 0c 00 0a 80 00 00 00 00 00 
[ 2684.532876]         05 3f c8 b0 
[ 2684.532885] sd 5:0:0:0: [sdc]  
[ 2684.532893] Add. Sense: Unrecovered read error - auto reallocate failed
[ 2684.532898] sd 5:0:0:0: [sdc] CDB: 
[ 2684.532902] Read(10): 28 00 05 3f c8 b0 00 00 08 00
[ 2684.532917] end_request: I/O error, dev sdc, sector 88066224
[ 2684.532927] Buffer I/O error on device sdc2, logical block 22
[ 2684.532973] ata6: EH complete

Ajude-me a Unix & Linux, você é nossa única esperança.

    
por dotancohen 09.02.2014 / 21:10

2 respostas

4

Ainda pode haver esperança, mas sua unidade parece ter problemas de hardware (minha interpretação do erro de leitura na saída dmesg ).

Você deve tentar fazer uma cópia do que é recuperável daquela partição em outra unidade (para minimizar o acesso ao disco). Use ddrescue para isso, pode demorar um pouco, mas obtém a maioria, se não todos, os dados recuperáveis da partição .

Se possível, inicie a partir de outro disco, a partir de um Live CD, ou conecte a unidade a um computador diferente que tenha seu próprio Linux para inicializar. A razão para isso é que os erros de leitura ao fazer ddrescue provavelmente causam impacto na velocidade de acesso ao disco nas outras partições.

Depois de ter essa cópia, vamos chamar a cópia original, como arquivo em outro disco, fazer uma cópia dessa cópia. Em seguida, tente fazer uma verificação do sistema de arquivos nessa cópia. Se essa recuperação embaralhar a cópia, você pode começar a partir da cópia original e tentar mais uma vez, outra coisa.

    
por 09.02.2014 / 21:26
13

(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 .

    
por 01.04.2015 / 12:08