Por que o programa `updatedb` roda tão rápido?

22

Normalmente, quando tenho programas que fazem uma verificação completa do disco e examinam todos os arquivos do sistema, eles demoram muito tempo para serem executados. Por que o updatedb roda tão rápido em comparação?

hugomg
fonte

Respostas:

22

A resposta depende da versão de locateque você está usando, mas há uma boa chance é mlocate, cujo updatedbcorre rapidamente, evitando fazer varreduras disco cheio:

mlocate é uma implementação de localização / atualizaçãob. O 'm' significa "mesclagem": updatedb reutiliza o banco de dados existente para evitar a releitura da maior parte do sistema de arquivos, o que torna o updateb mais rápido e o lixo do cache do sistema.

(O banco de dados armazena o registro de data e hora de cada diretório ctimeou mtime, o que for mais recente.)

Como a maioria das implementações de updatedb, o mlocate's também ignorará os sistemas de arquivos e os caminhos que ele está configurado para ignorar. Por padrão, não há nenhum mlocatecaso, mas as distribuições geralmente fornecem um básico updatedb.confque ignora os sistemas de arquivos em rede, sistemas de arquivos virtuais etc. (veja o arquivo de configuração do Debian, por exemplo; esta é uma prática padrão no Debian, portanto o GNU updatedbé configurado da mesma forma ).

Stephen Kitt
fonte
Bastante boa pergunta e resposta, nem sabia que havia varreduras "diferenciais".
Rui F Ribeiro
1
Obrigado! Eu nunca havia notado que modificar um arquivo também altera o ctime e o mtime de todos os seus diretórios pai.
hugomg 2/01
4
@ hugomg Acho que não. Ele só deve alterar o mtimede seu pai imediato.
Kusalananda
Portanto, se eu entendi direito, mlocateimporta-se ctimee o mtimeque implica apenas se a lista de entradas do diretório ainda é a mesma (sem arquivos removidos ou adicionados), o que significa que ela não se importa com os arquivos reais. Isso está correto?
Sergiy Kolodyazhnyy 03/01
@Sergiy: Claro. locatenão é grep -R. Não lê o conteúdo do arquivo.
Kevin
9

Além de verificar os tempos de modificação, mlocatetambém ignora certas subárvores do sistema de arquivos que possuem muitos arquivos desinteressantes ou potencialmente duplicados, conforme especificado em /etc/updatedb.conf (e descrito em man updatedb.conf ):

  • Montagens de ligação
  • Alguns tipos de sistemas de arquivos (9p, afs, bdev, etc)
  • Bancos de dados do repositório VCS (.git, .hg, etc)
  • Alguns diretórios codificados (/ media, / tmp, / var / spool / cups, etc).
hugomg
fonte
Porém, esse não é o caso por padrão, portanto o comportamento base depende da distribuição que está sendo usada. (Outras updatedbimplementações também suportam exclusões configuradas.)
Stephen Kitt
De fato. Eu estava descrevendo os padrões do Fedora.
hugomg