Resumo: O E2fsck não encontrou erro com a -n
opção mas com -p
(preen). Ele corrigiu o erro, mas não deu nenhuma mensagem de erro. O erro é refletido apenas por meio do código de saída. Como interpretar isso?
Estou usando um disco rígido USB com um sistema de arquivos Ext2 para armazenar backups de várias máquinas. Recentemente, tive uma enorme taxa de transferência de dados nessa unidade, por isso decidi fazer uma verificação extra do sistema de arquivos. No total, fiz quatro e2fsck
corridas com opções diferentes. Aqui estão os comandos que usei (como root) junto com suas saídas, que também contêm o status de saída de e2fsck
. Infelizmente, algumas frases estão localizadas em alemão, mas as (presumivelmente) importantes estão em inglês:
1ª execução, somente leitura:
# e2fsck -nv /dev/sdb1; echo $?
e2fsck 1.41.1 (01-Sep-2008)
WD-Elements: sauber, 709312/61046784 Dateien, 96258851/244182016 Blöcke
0
2ª execução, somente leitura forçado:
# e2fsck -nfv /dev/sdb1; echo $?
e2fsck 1.41.1 (01-Sep-2008)
Durchgang 1: Prüfe Inodes, Blocks, und Größen
Durchgang 2: Prüfe Verzeichnis Struktur
Durchgang 3: Prüfe Verzeichnis Verknüpfungen
Durchgang 4: Überprüfe die Referenzzähler
Durchgang 5: Überprüfe Gruppe Zusammenfassung
709312 inodes used (1.16%)
95492 non-contiguous inodes (13.5%)
# von Inodes mit ind/dind/tind Blöcken: 109958/2429/7
96258851 blocks used (39.42%)
0 bad blocks
8 large files
564029 regular files
121351 directories
0 character device files
0 block device files
11 fifos
506224 links
23073 symbolic links (19397 fast symbolic links)
839 sockets
--------
1215527 files
0
3ª corrida, alisando:
# e2fsck -pv /dev/sdb1; echo $?
WD-Elements: sauber, 709312/61046784 Dateien, 96258851/244182016 Blöcke
0
4ª corrida, alisando forçado:
# e2fsck -pfv /dev/sdb1; echo $?
709312 inodes used (1.16%)
95492 non-contiguous inodes (13.5%)
# von Inodes mit ind/dind/tind Blöcken: 109958/2429/7
96258853 blocks used (39.42%)
0 bad blocks
8 large files
564029 regular files
121351 directories
0 character device files
0 block device files
11 fifos
506224 links
23073 symbolic links (19397 fast symbolic links)
839 sockets
--------
1215527 files
1
Os comandos foram emitidos diretamente, um após o outro, sem tocar em mais nada entre eles.
Observe as diferenças:
Nas duas primeiras execuções, o sistema de arquivos foi aberto somente leitura (
-n
opção), enquanto as duas últimas foram execuções preening (-p
opção).A primeira e a terceira corrida não foram forçadas, a segunda e a última corrida foram (
-f
).Todas as execuções relataram dados coincidentes do sistema de arquivos com uma exceção: A última execução (
-pfv
) relatou um número diferente de "blocos usados".Todas, exceto a última execução, saíram com status 0, a última (
-pfv
) com status 1.
Obviamente, a última execução forçada de preening ( -pfv
) encontrou (e corrigiu) um erro do sistema de arquivos que as outras execuções não conseguiram encontrar. Infelizmente, ele não dá nenhuma dica sobre esse erro em sua saída.
Agora as minhas perguntas:
Qual erro foi encontrado e corrigido lá? Foi tão simples quanto uma contagem incorreta de blocos usados?
O que pode ter causado esse erro? O sistema de arquivos sempre foi desmontado de forma limpa.
O erro do sistema de arquivos foi finalmente corrigido pelo
e2fsck
. Mas posso confiar nos dados armazenados nele? Não poderia ser o que causou esse erro no sistema de arquivos em primeiro lugar, também corrompeu os dados no disco? Isso tornaria todos os dados no disco inúteis. Ou isso é paranóico? Por quê?
A última questão distingue entre sistema de arquivos e dados. A este respeito, a resposta de Mikel para " Os sistemas de arquivos de journaling garantem contra corrupção após uma falha de energia? " é de alta relevância. Infelizmente, ele se concentra em sistemas de arquivos com journaling, portanto, não se aplica ao Ext2.
Também a resposta de Gilles para " Como testar a correção do sistema de arquivos feita pelo fsck " é uma boa leitura: De acordo com isso, fsck
apenas garante um estado consistente do sistema de arquivos, não necessariamente o mais recente.
Atualização 1
Em seu comentário , Luciano Andress Martini destacou que o comportamento observado e aparentemente intrigante de e2fsck
poderia ter sido causado por erros de RAM na máquina executora. Embora seja um aspecto altamente relevante em situações comparáveis, não parece se aplicar aqui: verifiquei a RAM com "memtest86+" durante a noite e completou 16 passagens sem erros. Além disso, executei e2fsck -nfv
, e2fsck -pfv
, e executei e2fsck -fv
na unidade em teste usando outra máquina (hardware, kernel e versão diferentes de e2fsck
). Eles não encontraram nenhum erro do sistema de arquivos e confirmaram os dados do sistema de arquivos que foram relatados pelo últimoe2fsck
comando mostrado acima, em particular o número de blocos usados. Também foi confirmado o número total de blocos (244182016) que foi relatado pelas verificações não forçadas.
Atualização 2
A resposta da telcoM sugere que o comportamento observado de e2fsck
pode ser explicado com alterações nas configurações de recursos do sistema de arquivos que ocorrem e2fsck
ao lidar com sistemas de arquivos muito antigos. Infelizmente esta explicação muito consistente não se aplica aqui: O sistema de arquivos foi realmente criado com uma versão mais recente de mke2fs
(1.42.8) que habilitou os recursos ext_attr
, resize_inode
, dir_index
, filetype
, sparse_super
, large_file
. Isso não foi alterado pelas e2fsck
execuções descritas acima.
Atualização 3
Enquanto isso, a unidade USB passou com sucesso em um teste não destrutivo de badblocks de leitura e gravação (levou 3 dias, e sim: o tamanho do bloco especificado ( -b
) e o número de blocos ( -c
) importam muito) e vários testes SMART offline.