Báo cáo của ls -lh có tổng kích thước nhỏ hơn tổng kích thước riêng lẻ


14

Trong trường hợp nào sẽ ls -lhhiển thị tổng số ít hơn tổng của các tệp riêng lẻ? Ví dụ:

$ 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

Chỉnh sửa: hiện hiển thị một số cờ bổ sung theo yêu cầu trong nhận xét:

$ 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

không biết có ai trong số đó là các liên kết không, bạn có thể liệt kê ls -aiFlh
bsd

@bdowning Đã thêm các cờ bổ sung. Lưu ý rằng đã có một số thay đổi đối với thư mục, nhưng vấn đề vẫn còn đó
Lorin Hochstein

Làm thế nào về du -h --totalcùng một dir?
bsd

Câu trả lời:


20

Nó sẽ xảy ra nếu bạn có các tệp thưa thớt:

$ 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

Một tệp thưa là một tệp chưa được điền với các khối hệ thống tệp (hoặc chỉ một phần). Khi bạn đọc một vùng không có dân cư của một tệp thưa thớt, bạn sẽ nhận được các số không. Các vùng trống như vậy không yêu cầu không gian đĩa thực tế và 'tổng' được báo cáo lstương ứng với không gian đĩa bị chiếm bởi các tệp (giống như du).


3
Hình ảnh đĩa kvm của bạn có thể đầy lỗ hổng :-)
Stéphane Gimenez

Các tài liệu coreutils nói rằng -s/ --sizetùy chọn "In việc phân bổ đĩa của mỗi tập tin sang trái của tên tập tin. Đây là số tiền của không gian đĩa được sử dụng bởi các tập tin, mà thường là nhiều hơn một chút so với kích thước của tập tin, nhưng nó có thể ít hơn nếu tập tin có lỗ hổng . " Các -ltùy chọn tất nhiên in kích thước, quá.
Francesco Turco

2

Xin lưu ý rằng đầu ra được đưa ra bởi ls -lducó một sự khác biệt tinh tế nhưng rất quan trọng. Thử đi:

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

Hiện nay

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

Trong khi

du -h aaa
4.0K    aaa

Điều này là do hệ thống tập tin phân bổ kích thước theo khối 4096 (trên hộp linux của tôi). Nó được gọi là Khối IO. Bạn có thể thấy điều này bằng cách:

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

Ngoài ra, bạn có thể thử statvới đề xuất của tôi empty-filevà bạn sẽ thấy rằng số Khối là 0, ngay cả khi tệp được báo cáo có kích thước 1G.
Stéphane Gimenez

@ StéphaneGimenez Tại sao nó báo cáo Khối là 8 mặc dù? Khối này là gì với kích thước 512 byte?
Ankur Agarwal

1
Điều này hơi lạ, thời xưa, các khối IO có kích thước 512, nhưng bây giờ chúng thường là 4K. statbáo cáo số lượng khối kích thước cũ tương đương cần thiết để lưu trữ tất cả các khối 4K (gấp 8 lần số khối 4K thực).
Stéphane Gimenez

1

Câu trả lời được chấp nhận là hoàn toàn chính xác, chỉ cần bạn muốn xem kích thước rõ ràng, bạn có thể sử dụng:

du --apparent-size

in kích thước rõ ràng, thay vì sử dụng đĩa; mặc dù kích thước rõ ràng thường nhỏ hơn, nó có thể lớn hơn do các lỗ hổng trong các tệp ('thưa thớt'), phân mảnh bên trong, các khối gián tiếp và tương tự

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.