Por que o ncdu está relatando dados diferentes do df?

Por que o ncdu está relatando dados diferentes do df?

df -himpressõ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 ducomandos -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 ncduneste 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 ncdupode 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 -hao 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 ducomando semelhante) espera.

Como o dfcomando 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.

informação relacionada