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?

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 ).


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).

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.