“Ls -lh”, toplam boyutu tek tek boyutların toplamından daha az rapor eder


14

Hangi koşullar altında ls -lhtek tek dosyaların toplamından daha az bir toplam gösterebilir? Örneğin:

$ 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

Düzenleme: şimdi bazı ekstra bayrakları gösteren yorumda istek başına:

$ 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

Bunlardan herhangi birinin bağlantı olup olmadığını bilmiyorum, ls -aiFlh
bsd

@bdowning Ek bayraklar eklendi. Dizinde bazı değişiklikler olduğunu unutmayın, ancak sorunlar hala orada
Lorin Hochstein

du -h --totalAynı dir için nasıl ?
BSD

Yanıtlar:


20

Seyrek dosyalarınız varsa:

$ 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

Seyrek dosya, dosya sistemi bloklarıyla (veya yalnızca kısmen) doldurulmamış bir dosyadır. Seyrek bir dosyanın doldurulmamış bir bölgesini okuduğunuzda sıfırlar elde edersiniz. Bu tür boş bölgeler gerçek disk alanı gerektirmez ve tarafından bildirilen 'toplam' ls, dosyaların kapladığı disk alanına karşılık gelir (aynen du).


3
Kvm disk resimleriniz muhtemelen deliklerle dolu :-)
Stéphane Gimenez

Coreutils dokümantasyon söylüyor -s/ --sizeBu genellikle biraz daha dosyanın boyutu daha dosya tarafından kullanılan disk alanı miktarıdır. Seçenek "dosya adının solunda her dosyanın disk ayırma Baskı, ama olabilir dosyada delik varsa daha az olur . " -lElbette seçenek de boyutunu yazdırır.
Francesco Turco

2

Tarafından verilen ls -lve duince ama çok önemli bir fark olduğunu lütfen unutmayın . Bunu dene:

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

şimdi

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

Buna karşılık

du -h aaa
4.0K    aaa

Bunun nedeni, dosya sisteminin boyutu 4096 boyutlarında (linux kutumda) ayırmasıdır. Buna IO Block denir. Bunu şu şekilde görebilirsiniz:

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

Ayrıca, statönerdiğimde deneyebilirsiniz empty-fileve dosya 1G boyutunda olduğu bildirilse bile Blok sayısının 0 olduğunu göreceksiniz.
Stéphane Gimenez

@ StéphaneGimenez Blokları neden 8 olarak bildiriyor? 512 bayt boyutunda bu hangi bloktur?
Ankur Agarwal

1
Biraz garip, Eski zamanlarda, IO blokları 512 boyutundaydı, ancak şimdi genellikle 4K. stattüm 4K bloklarını (gerçek 4K blok sayısının 8 katı) depolamak için gereken eski boyutlu bloğun eşdeğer sayısını bildirir.
Stéphane Gimenez

1

Kabul edilen cevap kesinlikle doğrudur, sadece görünen boyutu görmek istiyorsanız, şunları kullanabilirsiniz:

du --apparent-size

disk kullanımı yerine görünür boyutlarda yazdırma; görünen boyut genellikle daha küçük olmasına rağmen, ('seyrek') dosyalardaki delikler, iç parçalanma, dolaylı bloklar ve benzerleri nedeniyle daha büyük olabilir

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.