fsck: Opções para a verificação mais completa do disco

12

Eu tenho um disco com um problema conhecido (eu sei porque o dd gags quando tento cloná-lo). Mas quando eu inicializo com um CD ao vivo e executo fsck na partição desmontada, recebo o seguinte:

ubuntu@ubuntu:~$ sudo fsck /dev/sdf1
fsck 1.41.4 (27-Jan-2009)
e2fsck 1.41.4 (27-Jan-2009)
/dev/sdf1: clean, 227091/9625600 files, 12789815/38497756 blocks

um milissegundo depois. É difícil acreditar que tenha verificado todo o disco rígido em uma ms.

Também não tenho certeza se eu deveria fsck'ing sdf1 ou todo o disco físico sdf. Quando tento a unidade inteira:

ubuntu@ubuntu:~$ sudo fsck /dev/sdf
fsck 1.41.4 (27-Jan-2009)
e2fsck 1.41.4 (27-Jan-2009)
fsck.ext2: Device or resource busy while trying to open /dev/sdf
Filesystem mounted or opened exclusively by another program?

O que não entendo porque nenhuma das partições parece estar montada (eu apenas inicializei a partir de um CD ao vivo e executei o comando).

Portanto, minha pergunta básica é: como posso fazer com que o fsck (ou uma ferramenta diferente que funcione melhor) gaste mais de um milissegundo analisando meu disco problemático?

Fred Hamilton
fonte

Respostas:

14

Primeiro, você está certo sobre executar o fsck na partição - o fsck funciona apenas em sistemas de arquivos, não em discos inteiros. Você pode obter uma lista de todas as partições no disco fdisk -l /dev/sdd.

Seu tipo de sistema de arquivos é provavelmente ext3 (o padrão na maioria das distribuições Linux), o que significa que geralmente passará um fsck enquanto seu diário estiver limpo. fsck -f, como mencionado acima, forçará uma verificação completa.

No entanto, se você leu erros no disco, nenhuma quantidade de fsck ajudará o dd - pois o dd realmente não se importa com o conteúdo do disco.

Para que o dd leia o disco e continue com os erros de leitura, use dd conv=noerror,sync, que continuará com os erros de leitura e acrescentará bytes nulos a qualquer bloco quando houver um erro de leitura.

Depois de concluir o backup, você deve executar fsck -fo clone para recuperá-lo.

Outra dica: se você fizer backup da partição em um arquivo, poderá montá-la em loopback mount -o loop filename.ext3 /mountpoint. Além disso, digamos que você esteja clonando uma partição 200G em uma unidade 500G, você poderá executar resize2fs /dev/sdx1(onde sdx é sua nova unidade, particionada com uma única partição 500G) e o sistema de arquivos será redimensionado para 500G.

Por fim, se o disco estiver em uma forma que está causando erros de leitura, recomendamos que você evite ligar e desligar o disco até concluir a recuperação de dados. Em alguns modos de falha, em algum momento o disco simplesmente não gira mais ou deixa de ser reconhecido pelo sistema operacional e, nesse momento, a retirada de dados da unidade se torna bastante cara.

Kristian
fonte
Tentei "dd conv = noerror, sync", mas o disco clonado resultante não foi inicializado. O que é frustrante, porque o disco de inicialização funciona bem, o fscks funciona bem, mas não posso cloná-lo em outro disco porque o disco possui 1 bloco inválido (onde aparentemente não há dados). I parecem ser preso ...
Fred Hamilton
Não esqueça que pode haver outros motivos pelos quais o disco não foi inicializado (problemas de geometria de disco diferente e MBR / carregador de inicialização). Se você puder primeiro confirmar que o sistema de arquivos no novo disco está OK, poderá inicializar o sistema usando o modo de recuperação do CD de instalação, atualizando o carregador de inicialização do GRUB etc. primeiro execute fsck -f / dev / sdx1 e tente montar o sistema de arquivos com mount / dev / sdx1 / mnt - substitua x pela letra da unidade apropriada.
819 Kristian
Excelente sugestão, mas quando executei o fsck -f na partição clonada, recebi literalmente centenas de erros (blocos ilegais em inodes, bits de comressão configurados em um sistema de arquivos sem suporte à compactação, blocos de atributos estendidos ruins etc.) antes de admitir que o dd O clone foi totalmente mangueira ... Não sei o que fazer a seguir ... Suponho que tentarei copiar todos os arquivos para uma partição limpa ... Obrigado de qualquer maneira.
9119 Fred Hamilton
4
É melhor usar o ddrescue (ou dd_rescue + dd_rhelp) do que o dd; é mais inteligente em lidar com erros, tentando novamente setores com erros. gnu.org/software/ddrescue/ddrescue.html kalysto.org/utilities/dd_rhelp/index.en.html garloff.de/kurt/linux/ddrescue
freiheit
1
A verificação de disco mais completa (com todas as correções automatizadas, se possível) para a partição raiz ext2, ext3 ou ext4 é executada da seguinte maneira: (1) inicialize a partir da mídia de resgate (a partição raiz deve ser desmontada), (2) execute e2fsck -f -cc -D -p. Isso faz uma verificação forçada com verificação não destrutiva de leitura e gravação para a mídia e repara todos os problemas encontrados que podem ser corrigidos com segurança. Pode levar alguns dias para um 2TB HDD ...
Mikko Rantalainen
10

Isso pode não ser relevante no seu caso, mas pensei em mencioná-lo de qualquer maneira:

Para uma verificação de disco de nível inferior, você pode usar o badblocksutilitário. Ele passa por um dispositivo e relata quaisquer bloqueios defeituosos (não pode reparar nada, é claro). É útil, pelo menos, para verificar se um disco está fisicamente danificado.

Além disso, e2fsckpode ser usado badblockspara evitar que blocos defeituosos sejam usados ​​por um sistema de arquivos. Do e2fsckmanual:

  -c     This option causes e2fsck to use badblocks(8) program to do a  read-
         only scan of the device in order to find any bad blocks.  If any bad
         blocks are found, they are added to the bad block inode  to  prevent
         them from being allocated to a file or directory.  If this option is
         specified twice, then the bad block scan will be done using  a  non-
         destructive read-write test.
Jonik
fonte
Observe também que fsck_hfs -sirá procurar blocos defeituosos.
awiebe
5

Você deseja que a opção -f fsck (force a verificação mesmo se o sistema de arquivos parecer limpo).

Você deve executar o fsck no modo de usuário único. Uma maneira fácil de fazer isso sem uma inicialização ao vivo do cdrom é reiniciar com a opção -F.

shutdown -rF now 
Richard Hoskins
fonte
Obrigado, mas uma pergunta: se eu reiniciar com a opção -F usando um CD ao vivo, como o CD ao vivo sabe que deveria executar a verificação? É um CD, ele não tem nenhuma memória que eu estou ciente de ...
Fred Hamilton
Eu não acho que você precise fazer isso no CD ao vivo. Apenas inicialize a partir do live cd e execute fsck na partição desmontada com a opção -f (force) incluída. OU, você pode reiniciar a partir do seu disco rígido com shutdown -rF. Isso forçará um fsck antes da montagem do sistema de arquivos.
9339 Richard Hoskins
Na verdade, ele fará o fsck no modo de usuário único. Eu editei minha resposta.
9339 Richard Hoskins
1
O -Fsinalizador para shutdowngeralmente não é oficialmente documentado (veja man shutdowne shutdown --helpobserve que não está lá), portanto você não pode confiar que ele funcione. Às vezes é um não-op. Oficialmente, o único método para verificar a partição raiz é inicializar a partir de mídia alternativa.
Mikko Rantalainen