どのような状況で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
スパースファイルは、ファイルシステムブロックが埋められていない(または部分的にのみ埋め込まれた)ファイルです。スパースファイルの塗りつぶされていない領域を読み取ると、ゼロが表示されます。これらのスペースには実際のディスク容量は必要なく、報告された「合計」はファイルが占める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
ディスク使用量ではなく見かけのサイズを印刷します。見かけのサイズは一般的に小さいですが、ファイルの穴(「希少」)、内部断片化、間接ブロックなどのため、より大きくなる可能性があります。