Temos um grande sistema de arquivos no qual um du
resumo completo (uso do disco) leva mais de dois minutos. Gostaria de encontrar uma maneira de acelerar um resumo de uso do disco para diretórios arbitrários nesse sistema de arquivos.
Para ramificações pequenas, notei que os du
resultados parecem estar armazenados em cache de alguma forma, pois as solicitações repetidas são muito mais rápidas, mas em ramificações grandes a velocidade se torna insignificante.
Existe uma maneira simples de acelerar du
ou armazenar em cache resultados mais agressivos para ramificações que não foram modificadas desde a pesquisa anterior?
Ou existe um comando alternativo que pode fornecer resumos de uso de disco mais rapidamente?
filesystems
cache
disk-usage
Ian Mackinnon
fonte
fonte
du
seria ruim, mas um script de wrapper mais rápido com uma interface idêntica seria muito útil para nós. Além disso, eu esperaria que os resultados do armazenamento em cache dependentes do horário da última modificação (e assumindo que não haja operações em todo o disco, por exemplo, desfragmentação) forneceriam resultados de tamanho exato: estou perdendo alguma coisa?find
. Mas depois temlocate
.StatFs
uma estimativa super rápida dos tamanhos de diretório. Era quase 1000x mais rápido para diretórios grandes e complexos, em comparação comdu
.Respostas:
O que você vê quando executa novamente um comando du é o efeito do buffer do disco. Depois de ler um bloco, seu buffer de disco é mantido no cache do buffer até que esse bloco seja necessário. Para você, você precisa ler o diretório e o inode para cada arquivo no diretório. Os resultados du não são armazenados em cache nesse caso, mas podem ser derivados com muito menos E / S de disco.
Embora seja possível forçar o sistema a armazenar em cache essas informações, o desempenho geral sofrerá, pois o espaço de buffer necessário não estará disponível para arquivos acessados ativamente.
O diretório em si não tem idéia do tamanho de um arquivo, portanto, o inode de cada arquivo precisa ser acessado. Para manter o valor em cache atualizado sempre que um arquivo muda de tamanho, o valor em cache precisa ser atualizado. Como um arquivo pode ser listado em 0 ou mais diretórios, isso exigiria que o inode de cada arquivo soubesse em quais diretórios ele está listado. Isso complicaria bastante a estrutura do inode e reduziria o desempenho de E / S. Além disso, como du permite que você obtenha resultados assumindo diferentes tamanhos de bloco, os dados necessários no cache precisariam aumentar ou diminuir o valor em cache para cada tamanho de bloco possível, diminuindo ainda mais o desempenho.
fonte
Se você pode organizar para que as diferentes hierarquias de arquivos pertençam a grupos diferentes, é possível configurar cotas de disco . Não atribua um limite superior (nem o tamanho do disco), a menos que você queira um. Você ainda poderá informar instantaneamente quanto de sua cota (efetivamente infinita) que o grupo está usando.
Isso requer que o seu sistema de arquivos suporte cotas por grupo. O zfs Ext [234] do Linux e Solaris / * BSD / Linux. Seria bom para o seu caso de uso se as cotas do grupo levassem em conta as ACLs, mas acho que não.
fonte
O uso comum de
du
pode ser imensamente acelerado usandoncdu
.ncdu - NCurses Disk Usage
executa o
du
, armazena em cache os resultados e os mostra em uma boa interface de linha de comando, um pouco comparável adu -hc -d 1 | sort -h
. A indexação inicial leva o mesmo tempodu
, mas a procura pelo "culpado" real que preenche um espaço precioso é acelerada, pois todos os subdiretórios têm as informações em cache disponíveis inicialmente.Se necessário, os subdiretórios podem ser atualizados pressionando [r] e os arquivos / pastas podem ser excluídos pressionando [d], os quais atualizam estatísticas para todos os diretórios pai. A exclusão solicita confirmação.
Se necessário, é possível obter mais velocidade antecipando
ncdu -1xo- / | gzip >export.gz
um cronjob e acessando-o posteriormentezcat export.gz | ncdu -f-
, mas obviamente fornece mais informações desatualizadas.fonte
Eu prefiro usar o agedu
O Agedu é um software que tenta encontrar arquivos antigos e usados irregularmente, com a suposição de que esses arquivos provavelmente não são desejados. (por exemplo, downloads que foram vistos apenas uma vez.)
fonte
Como mencionado pelo SHW, de
agedu
fato criou um índice. Pensei em compartilhar outra maneira de criar um índice, depois de ler sobrelocatedb
. Você pode criar sua própria versão de alocatedb
partir dadu
saída:awk
reorganiza a saída du para ter nomes de arquivos primeiro, para quefrcode
funcione corretamente. Em seguida, uselocate
com esse banco de dados para relatar rapidamente o uso do disco:Você pode expandir isso para atender às suas necessidades. Eu acho que é um bom uso de locatedb.
fonte
(consulte https://duc.zevv.nl ) pode ser o que você está procurando.
O Duc armazena o uso do disco em um banco de dados otimizado, resultando em uma interface de usuário rápida. Não há tempos de espera após a conclusão do índice.
A atualização do índice é muito rápida para mim (menos de 10 segundos para cerca de 950k arquivos em diretórios 121k, 2,8 TB). Tem uma GUI e uma interface de usuário ncurses também.
Uso por exemplo:
A partir do site:
fonte
Eu tenho um cronjob configurado para executar updatedb a cada 10 minutos. Mantém todos os buffers do sistema de arquivos agradáveis e atualizados. É melhor usar essa RAM barata para algo bom. Use o slabtop veja 'antes' e 'depois'.
fonte
updatedb
não diz nada sobre o uso do disco. Se você estiver fazendo isso apenas para atravessar o disco, prejudicará o desempenho geral.du
é lenta porque você precisa acessar os metadados de um número potencialmente grande de arquivos espalhados pelo disco. Se você executar a atualização agressivamente, os metadados de todos os arquivos serão forçados a serem armazenados na RAM. Na próxima vez que você executar qualquer outra operação pesada em metadados, em vez de fazer milhares de buscas nos discos, use o cache. Normalmente, você tem uma pequena chance de armazenar em cache essa parte específica dos metadados da árvore. Com o meu 'preparo do cache de metadados', é altamente provável que os dados desejados sejam armazenados em cache recentemente. Nenhuma busca física == RÁPIDO.Se você só precisa saber o tamanho do diretório, pode acelerar muito, simplesmente evitando gravar as informações na tela. Como o total geral é a última linha do
du
comando, você pode simplesmente canalizá-lotail
.Uma estrutura de diretórios de 2 GB leva mais de um segundo para a lista completa, mas menos de um quinto disso com este formulário.
fonte
du -hs
é mais conveniente para esse fim.--max-depth 1