Como carregar o diretório no cache do sistema de arquivos?

1

Eu tenho um diretório de várias GB que raramente é acessado, mas quando é que eu gostaria de ser capaz de ler os arquivos rapidamente em vez de ter que esperar. Como os arquivos raramente são acessados, eles não estarão no cache do sistema de arquivos, mas gostaria de sugerir que o Linux os pré-carregue no cache do sistema de arquivos antes de acessá-los.

Alguns podem argumentar que precisarei esperar que ele os carregue pela primeira vez e, portanto, não estou economizando tempo - basta dizer que, em meu caso de uso específico, posso automatizar isso para que não seja um problema. Em questão de economizar tempo do sistema, é uma questão de salvar o tempo de um usuário (já que eles não precisam esperar se os arquivos estão em cache).

Eu também percebo que o cache do sistema de arquivos não é uma garantia sem usar algo como o tmpfs, é uma sugestão para o sistema operacional, e estou bem com isso.

Portanto, parece que o método óbvio seria:

tar -cf - /mydirectory > /dev/null

No entanto, quando faço isso, o comando retorna imediatamente, mesmo para vários diretórios GB. Parece que o bash está vendo que a saída está sendo direcionada para / dev / null e otimizando todo o comando, portanto, o tar não está lendo do diretório.

O que é um comando simples para fazer o sistema operacional ler todos os arquivos em um diretório?

    
por Nick 26.06.2016 / 04:57

1 resposta

1

Não é bash fazer essa otimização, é o tar GNU. Ele reconhece quando sua saída é /dev/null e não lê o conteúdo dos arquivos.

Organize para que a saída não seja /dev/null :

tar -cf - /mydirectory > /dev/zero

Ou use uma ferramenta diferente, como

find . | cpio -o >/dev/null
find . -type f -exec cat {} + >/dev/null
    
por 26.06.2016 / 16:36

Tags