03/02/2022

Debian force fsck

"Na minha época" quando eu queria que no próximo boot do meu Linux os sistemas de arquivos de todas as partições fossem testadas eu apenas escrevia o próximo comando:

    touch /forcefsck

e dava boot no sistema operacional.

"Peraí! Mas que porcaria é essa? De que você está falando?"

OK. OK. Do início:

Qualquer micro que você use, de qualquer sistema operacional, muito provavelmente utiliza um sistema de arquivos.

O sistema de arquivos é aquele lugar onde você grava seus documentos, fotos e etc. Também de onde seu computador lê os programas que você utiliza. Inclusive, onde está gravado seu sistema operacional.

Um sistema de arquivos "é" uma forma de fazer tudo isso citado acima, utilizando um hardware de armazenamento. No seu computador, é o que você provavelmente chama de HD, SSD ou simplesmente de disco. Também pode ser um cartão SD, um pendrive... Enfim.

Aqui vou sempre me referir ao hardware de armazenamento como HD, mas lembrem que na verdade estou me referindo a todas as opções, citadas acima ou não.

Um HD sempre precisa de um sistema de arquivos para serem utilizados e, geralmente, aceita vários tipos e sistemas de arquivos. (E existem muito tipos, mas isso não vem ao caso agora.)

Um sistema de arquivos define como os arquivos são organizados no HD. Sistema de arquivos em inglês é file system. Abreviando, FS.

Se entendermos um HD como um enorme terreno vazio, o FS é que define: A divisão desse terreno em quarteirões, blocos de edifícios, tamanho dos apartamentos. A capacidade e forma de endereçar cada cômodo. Como manter uma lista de todas as pessoas e/ou objetos guardados em cada canto desse grande terreno, com informação inclusive de quem pode ir onde e o que pode pegar. Também, se algum lugar está interditado ao uso. Também, etc., etc.

Se não houvesse essa organização o terreno seria pior aproveitado, cada vez que alguém quisesse achar algo, teria que percorrer o terreno todo em busca do que deseja, qualquer um poderia pegar qualquer coisa... Enfim, uma zona!

Blz! Fácil perceber que FS é bom, mas dá para imaginar que é burocrático, complexo.

Como tudo que é complexo, pode de vez em quando "dar ruim".

Por isso que, de vez em quando, o sistema operacional (SO) dos nossos computadores, "resolve" que precisa checar a integridade do FS. E precisa mesmo. Verificar e, muitas vezes, corrigir inconsistências encontradas.

Alguns usuários de Windows ou DOS, lembram do "chkdsk", abreviatura de "check disk", que é um conhecido comando de checagem do disco, mais exatamente do FS do disco, ou HD.

Alguns usuários de Linux, lembram do "fsck", que é um conhecido comando de "file system check", ou checagem do sistema de arquivos do HD.

"chsdsk" e "fsck" são, de certa forma, equivalentes.

Esses comandos não são utilizados apenas pelo SO. Eles estão disponível para o usuário utilizar quando quiser ou precisar.

Esses comandos não podem verificar totalmente um HD, ou uma parte de um HD (no exemplo, um quarteirão), se este estiver em uso.

OK. Quando queremos verificar o FS de um pendrive, de um cartão de memória ou de uma parte do HD, que não estamos utilizando, é só rodar o comando indicando o que deve ser verificado e pronto.

Porém há ao menos uma parte do "HD" do computador que sempre está em uso. A parte onde está o sistema operacional e seus arquivos de trabalho.

Para verificar essas partes do HD, que sempre estão em uso, esse comando deve ser executado durante o "boot" do computador, que é quando você o liga, mas ainda não "entrou", ou não "abriu", o sistema operacional.

Porém, teoricamente, antes de ser "carregado" o sistema operacional, não podemos "operar o sistema", ou seja, não podemos escrever o comando ou clicar no ícone do programa que faria a checagem.

Por isso, o sistema operacional sempre disponibiliza um meio de conseguirmos fazer isso, digamos, indiretamente.

No Windows, uma das formas é abrir as propriedades do ícone do HD, ou da parte do HD, que se quer checar e utilizar ali a opção "Marque este local para checagem no próximo boot". Então é só mandar o Windows reiniciar e pronto. Antes do Windows ser novamente carregado o "check disk" será executado no "local" indicado.

No Linux havia essa, já citada, simples abordagem, de executar "touch /forcefsck". "touch", neste caso, é utilizado para criar o arquivo indicado. No caso o arquivo "forcefsck" no diretório raiz ("/"). Depois disso, da mesma forma como no Windows, é só mandar o Linux reiniciar e pronto. Antes do Linux ser novamente carregado o "fsck" será executado. "Mas em que 'local'?" Em todos os locais disponíveis para checagem.

Simples e poderoso. Sim, mas, e se eu não quisesse checar todos os locais?

Não sei se foi por isso ou por alguma outra questão de segurança, mas essa forma "simples" não está mais disponível. E faz sentido, afinal o script que verificava a existência desse arquivo e rodava o comando de checagem estava no carregamento do sistema operacional, não exatamente antes dele.

Enfim, chegamos ao destino desta postagem, depois de tantas voltas, idas e vindas, mastigando o assunto para ficar mais claro para todos.

(" 'Todos', quem?" - Boa pergunta!)

A solução abaixo é voltada apenas para sistemas de arquivos bem comuns no mundo Linux: EXT2, EXT3 e EXT4

(Para vários outros FS, talvez em outro post no futuro.)

Os sistemas de arquivos EXT# tem um comando para verificar e ajustar alguns parâmetros do sistema de arquivos:

        tune2fs

Como ele você pode listar informações do sistema de arquivos, inclusive alguns que podem ser alterados.

        tune2fs -l /dev/sda1

Esse "/dev/sda1" se refere à primeira parte (partição), "1", do primeiro disco, "a", do sistema.

Assim, "/dev/sdc5" se refere ao terceiro disco, "c", e sua quinta partição, "5".

É um pouco mais complicado do que isso, mas essa visualização simplista já ajuda quem está começando no Linux.

Quanto às informações apresentadas pelo tune2fs, temos, por exemplo:

"Last checked": que indica data e hora da última checagem feita naquela partição.

"Mount count": que indica quantas vezes a partição já foi montada (preparada para uso pelo sistema operacional)

e "Maximum mount count": que indica o número máximo de montagens da partição antes de esta ser automaticamente checada.

É comum esse parâmetro "Maximum mount count" ficar com o valor -1, que significa que o recurso de checar automaticamente está desligado.

Porém podemos alterar esse parâmetro para, por exemplo, 10, com o seguinte comando:

        tune2fs -c 10 /dev/sda1

Daí a solução para o nosso problema, de forçar a checagem do disco no próximo boot (na próxima montagem do FS).

É só executar:

        tune2fs -c 1 /dev/sda1

Isso faz o sistema se arquivos ser checado automaticamente a cada 1 montagem. Ou seja em todas as montagens. Ou, pensando no que desejamos, na próxima montagem.

Depois disso é só dar boot no computador e pronto, checagem na partição do sistema operacional, aquela que não conseguimos checar diretamente por estar em uso, é executada automaticamente!

"Mas, então, vai rodar a checagem em todas as inicializações do computador? Não! Socorro!"

Calma! É só voltar o parâmetro para "-1" ou qualquer valor que desejar, logo depois de iniciado o sistema operacional, executando, por exemplo:

        tune2fs -c -1 /dev/sda1

Sistema de arquivos checado! "Terreno" arrumado para continiarmos a trabalhar com  o HD mais tranquilos.

Nenhum comentário:

Postar um comentário