"ls -lh"는 전체 크기가 개별 크기의 합보다 작음을 보고합니다.

"ls -lh"는 전체 크기가 개별 크기의 합보다 작음을 보고합니다.

어떤 상황에서 ls -lh표시된 총계가 개별 파일의 합보다 적습니까? 예를 들어:

$ ls -lh /var/lib/nova/instances/_base
total 100G
-rw-rw-r-- 1 nova         nova 4.3M 2012-02-14 14:07 00000001
-rw-rw-r-- 1 nova         nova 5.7M 2012-02-14 14:07 00000002
-rw-rw-r-- 1 nova         nova  42G 2012-03-08 15:24 1574bddb75c78a6fd2251d61e2993b5146201319.part
-rw-rw-r-- 1 libvirt-qemu kvm   24M 2012-02-14 14:07 77de68daecd823babbb58edb1c8e14d7106e83bb_sm
-rw-r--r-- 1 libvirt-qemu kvm   65G 2012-03-02 12:43 bd307a3ec329e10a2cff8fb87480823da114f8f4
-rw-rw-r-- 1 libvirt-qemu kvm  160G 2012-02-24 16:06 ephemeral_0_160_None
-rw-rw-r-- 1 libvirt-qemu kvm   80G 2012-02-24 22:38 ephemeral_0_80_None
-rw-r--r-- 1 libvirt-qemu kvm   10G 2012-02-24 22:37 fe5dbbcea5ce7e2988b8c69bcfdfde8904aabc1f
-rw-r--r-- 1 libvirt-qemu kvm   10G 2012-02-24 11:09 fe5dbbcea5ce7e2988b8c69bcfdfde8904aabc1f_sm

편집: 이제 주석에 각 요청에 대한 몇 가지 추가 플래그가 표시됩니다.

$ ls -aiFlh  /var/lib/nova/instances/_base/
total 143G
29884440 drwxrwxr-x 2 nova         nova 4.0K 2012-03-08 15:45 ./
29884427 drwxr-xr-x 6 nova         nova 4.0K 2012-03-08 15:05 ../
29884444 -rw-rw-r-- 1 nova         nova 4.3M 2012-02-14 14:07 00000001
29884445 -rw-rw-r-- 1 nova         nova 5.7M 2012-02-14 14:07 00000002
29884468 -rw-r--r-- 1 nova         nova  65G 2012-03-08 15:59 1574bddb75c78a6fd2251d61e2993b5146201319.converted
29884466 -rw-rw-r-- 1 nova         nova  58G 2012-03-08 15:35 1574bddb75c78a6fd2251d61e2993b5146201319.part
29884446 -rw-rw-r-- 1 libvirt-qemu kvm   24M 2012-02-14 14:07 77de68daecd823babbb58edb1c8e14d7106e83bb_sm
29884467 -rw-r--r-- 1 libvirt-qemu kvm   65G 2012-03-02 12:43 bd307a3ec329e10a2cff8fb87480823da114f8f4
29884443 -rw-rw-r-- 1 libvirt-qemu kvm  160G 2012-02-24 16:06 ephemeral_0_160_None
29884442 -rw-rw-r-- 1 libvirt-qemu kvm   80G 2012-02-24 22:38 ephemeral_0_80_None
29884447 -rw-r--r-- 1 libvirt-qemu kvm   10G 2012-02-24 22:37 fe5dbbcea5ce7e2988b8c69bcfdfde8904aabc1f
29884441 -rw-r--r-- 1 libvirt-qemu kvm   10G 2012-02-24 11:09 fe5dbbcea5ce7e2988b8c69bcfdfde8904aabc1f_sm

답변1

희박한 파일이 있는 경우 이런 일이 발생합니다.

$ mkdir test; cd test
$ truncate -s 1000000000 file-with-zeroes
$ ls -l
total 0
-rw-r--r-- 1 gim gim 1000000000 03-08 22:18 file-with-zeroes

스파스 파일은 파일 시스템 블록이 채워지지 않은(또는 부분적으로만 채워진) 파일입니다. 희소 파일의 채워지지 않은 영역을 읽으면 0이 표시됩니다. 이러한 공백에는 실제 디스크 공간이 필요하지 않으며 보고된 "총계"는 ls파일이 차지하는 디스크 공간에 해당합니다( 에서와 같이 du).

답변2

ls -l주어진 출력과 du미묘하지만 매우 중요한 차이가 있다는 점에 유의하십시오. 이 시도:

dd if=/dev/urandom of=aaa bs=1024 count=1

지금

ls -l aaa
-rw-r--r-- 1 abc abc 1024 2012-03-08 15:45 aaa

하지만

du -h aaa
4.0K    aaa

이는 파일 시스템이 4096 블록(내 Linux 시스템에서)으로 할당되기 때문입니다. IO 블록이라고 합니다. 다음을 통해 이를 확인할 수 있습니다.

    stat aaa
  File: `aaa'
  Size: 1024        Blocks: 8          IO Block: 4096   regular file

답변3

현재 승인된 답변당신이 사용할 수 있는 겉보기 크기를 보고 싶다면 다음과 같이 절대적으로 정확합니다.

du --apparent-size

디스크 사용량이 아닌 겉보기 크기를 인쇄합니다. 겉보기 크기는 일반적으로 작지만, 파일의 구멍("희소"), 내부 조각화, 간접 블록 등으로 인해 더 커질 수 있습니다.

관련 정보