
df -h
impressões:
Filesystem Size Used Avail Use% Mounted on
/dev/root 59G 6.6G 50G 12% /
devtmpfs 1.8G 0 1.8G 0% /dev
tmpfs 2.0G 0 2.0G 0% /dev/shm
tmpfs 2.0G 9.0M 1.9G 1% /run
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup
/dev/mmcblk0p1 253M 54M 199M 22% /boot
tmpfs 391M 0 391M 0% /run/user/1000
enquanto ncdu /
imprime:
Total disk usage: 1.8 GiB Apparent size: 1.8 GiB Items: 176500
Por que um relatório de 6,6+ GiB é usado enquanto o outro relata apenas 1.8 GiB
?
Responder1
A saída de df
é baseada em estatísticas no nível do sistema de arquivos, enquanto ncdu
(e um du
) regular gera seus resultados examinando diretórios, lendo os tamanhos de arquivos individuais e resumindo isso.
Se os du
comandos -style forem executados como um usuário não root, eles não terão necessariamente acesso total a todos os diretórios e, portanto, poderão não conseguir ver tudo (use sudo ncdu
neste caso).
Tente executar du -hs /
e comparar seus resultados com o "uso total do disco" relatado por ncdu /
. Você pode achar que os resultados são semelhantes... e com du
, você também pode ver mensagens sobre vários diretórios que o comando não consegue acessar e, portanto, não leva em consideração. Provavelmente o mesmo se aplica ao ncdu
, mas apenas oculta as mensagens de erro.
Além disso, parece-me que ncdu
pode não ter sido atualizado para entender os sistemas de arquivos virtuais das distribuições Linux modernas e pode ficar confuso com eles. No meu sistema Debian 10, ncdu /
relata:
Total disk usage: 75.6 GiB Apparent size: 128.1 TiB Items: 469143
No meu caso, o "Tamanho aparente" é claramente absurdo e inútil. O "Uso total do disco" é quase o mesmo que obtenho du -hs /
... mas como isso inclui vários sistemas de arquivos virtuais baseados em RAM ( devtmpfs
, tmpfs
), é improvável que esse número seja muito útil.
Mas se eu restringir o comando a apenas um sistema de arquivos (por exemplo ncdu -x /
), pareço obter resultados mais razoáveis, que também correspondem à saída de du -shx /
to dentro de um erro de arredondamento e também à saída de df -h
ao lembrar que um sistema de arquivos pode precisar de algum espaço para seu metadados internos.
Outra possível fonte de erros seria se você estivesse usando recursos avançados do sistema de arquivos, como instantâneos do sistema de arquivos BTRFS. Claro, você pode ter apenas 1,8 GiB de arquivos em seu sistema de arquivos raiz, mas se o sistema de arquivos também contiver dois instantâneos de seus estados anteriores, a quantidade total de espaço em disco usado poderá ser de até 3x o que a soma do tamanho dos arquivos levaria você (e qualquer du
comando semelhante) espera.
Como o df
comando obtém suas informações perguntando ao driver do sistema de arquivos, o maior valor "usado" relatado por ele pode incluir os instantâneos, que de outra forma poderiam ser invisíveis até serem acessados com o método adequado.