A execução de pastas no timeshift fornece resultados diferentes

1

Meu objetivo é descobrir quais arquivos / pastas ocupam mais espaço em snapshot da ferramenta de backup timeshift , mas, ao usar du , ele gera resultados diferentes:

# du -hs *
18G     2018-09-21_16-14-57
910M    2018-10-06_07-04-27

Apenas a segunda pasta

# du -hs 2018-10-06_07-04-27
18G     2018-10-06_07-04-27

O resultado que eu quero é o 910M, que eu quero pesquisar para encontrar quais pastas / arquivos estão ocupando mais espaço dentro dele.
Por que du está dando resultados diferentes? Como faço para perfurar o resultado do 910M?

Eu sei que a segunda pasta está cheia de hard links (é assim que a ferramenta funciona), mas du não deve reportar tamanhos diferentes, pois o * simplesmente expande para os nomes das pastas reais em bash , deveria?

Atualização: Acabei de experimentar # du -hd 2 * , o que parece ser um passo na direção certa, mas não é uma solução razoável quando há 20 ou mais pastas de instantâneos e quero apenas detalhar um.

    
por Paolo 06.10.2018 / 09:49

2 respostas

1

Obviamente, du ignora os inodes já contabilizados em outros diretórios visitados. Por exemplo, com o seu exemplo:

du -hs 2018-09-21_16-14-57 2018-10-06_07-04-27
du -hs 2018-10-06_07-04-27 2018-09-21_16-14-57

dará resultados diferentes.

Mas no seu caso, isso não deve fazer muita diferença. Se os arquivos em uma pasta corresponderem a inodes com múltiplos links, apagá-los nessa pasta não alterará nada. IMHO você deve se concentrar em inodes ao invés de diretórios (o que significa não usar o parâmetro -s em du ).

    
por 06.10.2018 / 10:35
0

du should not report different sizes since the * simply expands to the actual folder names in Bash, should it?

Deveria, ainda é apenas um du do processo e está tentando ser inteligente.

Fundamentação: Se du * não fosse inteligente, seria difícil torná-lo inteligente. O inverso é fácil, é muito simples fazer o smart du "mudo". Se você quiser resultados totalmente independentes, basta executar du -s separados para os dois diretórios.

Poucos exemplos gerais de invocação separada de du -s:

for d in *; do du -hs "$d"; done
find . -exec du -hs {} \;

Eles diferem nos detalhes. O find -based pode ser personalizado (por exemplo, comece com find . -type d … ).

Verifique também a opção --apparent-size se o seu du for compatível.

É um problema diferente se fazer ou não du "mudo" será útil para você, já que você quer "descobrir quais arquivos / pastas ocupam mais espaço". A outra resposta está correta:

If the files in a folder correspond to inodes with multiples links, erasing them in that folder won't change anything.

O comportamento inteligente de du parece se adequar muito mais às suas necessidades do que as "forçadas". Meu conselho é tirar vantagem disso e o fato du processa seus argumentos na sequência dada. Isso significa que o tamanho relatado do último objeto é o que você obterá se remover este objeto e somente este objeto (a menos que contenha hardlinks para outro local em que esse du em particular não espreitasse ).

No seu exemplo, o comando expandido aparentemente foi:

du -hs 2018-09-21_16-14-57 2018-10-06_07-04-27

O resultado indica que você obterá 910M se remover apenas 2018-10-06_07-04-27 . Agora tente outra sequência:

du -hs 2018-10-06_07-04-27 2018-09-21_16-14-57

A última linha da saída informará quanto espaço você terá se remover apenas 2018-09-21_16-14-57 .

Se eu fosse você, também investigaria ncdu (ferramenta interativa) e seu comportamento.

    
por 06.10.2018 / 11:37