ncdu가 df와 다른 데이터를 보고하는 이유는 무엇입니까?

ncdu가 df와 다른 데이터를 보고하는 이유는 무엇입니까?

df -h인쇄물:

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

동안 ncdu /인쇄:

Total disk usage:   1.8 GiB  Apparent size:   1.8 GiB  Items: 176500

하나는 6.6+ GiB를 사용하고 다른 하나는 보고만 사용하는 이유는 무엇입니까 1.8 GiB?

답변1

의 출력은 df파일 시스템 수준 통계를 기반으로 하는 반면 ncdu(및 일반 du)은 디렉터리를 검색하고 개별 파일의 크기를 읽고 이를 요약하여 결과를 생성합니다.

-style 명령이 루트가 아닌 사용자로 실행되는 경우 du모든 디렉토리에 대한 전체 액세스 권한이 필요하지 않으므로 모든 것을 볼 수 없을 수도 있습니다( sudo ncdu이 경우 사용).

실행 du -hs /하고 그 결과를 에서 보고한 "총 디스크 사용량"과 비교해 보십시오 ncdu /. 결과가 비슷하다는 것을 알 수 있으며 를 사용하면 du명령이 액세스할 수 없어 고려하지 못한 여러 디렉터리에 대한 메시지가 표시될 수도 있습니다. 의 경우에도 마찬가지일 수 있지만 ncdu오류 메시지를 숨길 뿐입니다.

또한 ncdu최신 Linux 배포판의 가상 파일 시스템을 이해하기 위해 업데이트되지 않았으며 이로 인해 혼란스러울 수도 있는 것 같습니다. 내 Debian 10 시스템에서는 ncdu /다음과 같이 보고합니다.

Total disk usage:  75.6 GiB  Apparent size: 128.1 TiB  Items: 469143

내 경우에는 "겉보기 크기"는 분명히 무의미하고 쓸모가 없습니다. "총 디스크 사용량"은 제가 얻은 것과 거의 같습니다 du -hs /... 하지만 여기에는 다수의 RAM 기반 가상 파일 시스템( devtmpfs, tmpfs)이 포함되어 있기 때문에 이 숫자도 그다지 유용하지 않을 것입니다.

그러나 명령을 하나의 파일 시스템으로만 제한하면(예: ncdu -x /) 더 합리적인 결과를 얻을 수 있는 것 같습니다. 이는 반올림 오류 내에서 to의 출력과도 일치하며 파일 시스템에 공간이 필요할 수 있다는 것을 기억할 때 du -shx /의 출력과도 일치합니다. df -h내부 메타데이터.

또 다른 가능한 오류 원인은 BTRFS 파일 시스템 스냅샷과 같은 고급 파일 시스템 기능을 사용하는 경우입니다. 물론 루트 파일 시스템에는 1.8GiB의 파일만 있을 수 있지만 파일 시스템에 이전 상태의 스냅샷 2개가 포함되어 있는 경우 사용되는 총 디스크 공간은 파일 크기 합계의 최대 3배가 될 수 있습니다. 당신 (및 du-like 명령)이 기대하는 것입니다.

명령 df은 파일 시스템 드라이버에 요청하여 정보를 얻으므로 보고된 더 큰 "사용된" 값에는 스냅샷이 포함될 수 있으며, 그렇지 않으면 적절한 방법으로 액세스할 때까지 보이지 않을 수 있습니다.

관련 정보