A página de manual fsck(8) no Linux inclui a seguinte tabela de códigos de saída:
The exit code returned by fsck is the sum of the following conditions:
0 No errors
1 Filesystem errors corrected
2 System should be rebooted
4 Filesystem errors left uncorrected
8 Operational error
16 Usage or syntax error
32 Checking canceled by user request
128 Shared-library error
O código de saída 2 foi alocado para 'O sistema deve ser reinicializado', então provavelmente podemos assumir que tem algum propósito. No entanto, em princípio, fsck
poderia retornar esse código de saída após verificar algum tipo de pen drive externo que não seja crítico para a operação do sistema. Parece absurdo que um erro em um sistema de arquivos não essencial como esse exija uma reinicialização, especialmente se o sistema de arquivos tiver sido tocado apenas por fsck
.
O que realmente significa um código de saída 'Sistema deve ser reinicializado' ?
Isso significa que o sistema de arquivos em questão foi montado enquanto a verificação estava sendo realizada,
fsck
teve que modificar os dados no disco para corrigir um erro e o sistema de arquivos não pode ser remontado manualmente sem reinicializar o sistema.O caso principal para isso é quando os erros são encontrados (e reparados) no sistema de arquivos raiz. A menos que você tenha um initramfs ou ambiente de recuperação realmente sofisticado do qual está verificando o sistema de arquivos, você está executando o sistema de arquivos raiz enquanto o verifica (portanto, é montado somente leitura).
Por motivos de desempenho, o kernel não revalida metadados em cache para sistemas de arquivos montados (porque nada (além de
fsck
alterar os dados no disco que não seja o kernel para um sistema de arquivos montado), portanto, sefsck
tiver que corrigir alguns desses metadados, é ou precisa notificar o kernel (o que não pode na maioria dos sistemas UNIX), ou dizer ao usuário para desmontar o sistema de arquivos e montá-lo novamente para que o kernel pegue os metadados modificados. sistema de arquivos root é realmente reiniciar o próprio sistema.Isso realmente significa que o sistema deve ser reinicializado.
fsck
As implementações geralmente são cuidadosas ao retornar esse código apenas quando necessário: por exemplo,e2fsck
retorna-o se corrigiu erros no sistema de arquivos raiz, enquanto foi montado (normalmente é montado somente leitura até que seja verificado). Você não deve obtê-lo em uma unidade externa.Observe que você deve verificar a documentação dos verificadores específicos que estão sendo usados. Por exemplo,
fsck.fat
não usa os mesmos códigos de saída e assumir cegamente que um código de saída de 2 significa reiniciar pode levar a surpresas.