"Ls -lh" melaporkan ukuran total kurang dari jumlah ukuran individu

14

Dalam keadaan apa akan ls -lhmenunjukkan total yang kurang dari jumlah file individu? Sebagai contoh:

$ 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

Sunting: sekarang menunjukkan beberapa bendera tambahan sesuai permintaan dalam komentar:

$ 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
Lorin Hochstein
sumber
tidak tahu apakah ada di antara tautan itu, bisakah Anda mencantumkan ls -aiFlh
bsd
@ rolldown Menambahkan flag tambahan. Catatan ada beberapa perubahan pada direktori, tetapi masalahnya masih ada
Lorin Hochstein
Bagaimana du -h --totaldengan dir yang sama?
bsd

Jawaban:

20

Ini akan terjadi jika Anda memiliki file jarang:

$ 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

File jarang adalah file yang belum diisi dengan blok sistem file (atau hanya sebagian). Ketika Anda membaca zona tidak terpopulasi dari file jarang, Anda akan mendapatkan nol. Zona kosong semacam itu tidak memerlukan ruang disk aktual, dan 'total' yang dilaporkan lssesuai dengan ruang disk yang ditempati oleh file (sama seperti du).

Stéphane Gimenez
sumber
3
Gambar disk kvm Anda mungkin penuh dengan lubang :-)
Stéphane Gimenez
The coreutils dokumentasi mengatakan bahwa -s/ --sizeoption "Cetak alokasi disk setiap file ke kiri dari nama file. Ini adalah jumlah ruang disk yang digunakan oleh file, yang biasanya sedikit lebih dari ukuran file, tetapi bisa kurang jika file memiliki lubang . " The -lpilihan saja mencetak ukuran, juga.
Francesco Turco
2

Harap dicatat bahwa output yang diberikan oleh ls -ldan dumemiliki perbedaan yang halus tetapi sangat penting. Coba ini:

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

Sekarang

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

Sedangkan

du -h aaa
4.0K    aaa

Ini karena filesystem mengalokasikan ukuran dalam potongan 4.096 (pada kotak linux saya). Ini disebut IO Block. Anda dapat melihatnya dengan:

    stat aaa
  File: `aaa'
  Size: 1024        Blocks: 8          IO Block: 4096   regular file
Ankur Agarwal
sumber
Juga, Anda dapat mencoba statpada usulan saya empty-file, dan Anda akan melihat bahwa jumlah Blok adalah 0, bahkan jika file tersebut dilaporkan memiliki ukuran 1G.
Stéphane Gimenez
@ StéphaneGimenez Mengapa ia melaporkan Blok sebagai 8? Apa blok ini dengan ukuran 512 byte?
Ankur Agarwal
1
Agak aneh, Di masa lalu, IO blok memiliki ukuran 512, tapi sekarang mereka biasanya 4K. statmelaporkan jumlah yang setara dari blok ukuran lama yang diperlukan untuk menyimpan semua blok 4K (yaitu 8 kali jumlah sebenarnya dari blok 4K).
Stéphane Gimenez
1

Jawaban yang diterima benar-benar benar, hanya jika Anda ingin melihat ukuran yang jelas, Anda dapat menggunakan:

du --apparent-size

cetak ukuran yang jelas, bukan penggunaan disk; walaupun ukuran yang tampak biasanya lebih kecil, itu mungkin lebih besar karena lubang di ('jarang') file, fragmentasi internal, blok tidak langsung, dan sejenisnya

iman
sumber