“ ls -lh” รายงานขนาดรวมน้อยกว่าผลรวมของขนาดแต่ละรายการ


14

ภายใต้สถานการณ์ใดที่จะ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

ไม่ทราบว่ามีการเชื่อมโยงใด ๆ คุณสามารถแสดงรายการls -aiFlh
bsd

@bdowning เพิ่มธงเพิ่มเติม โปรดทราบว่ามีการเปลี่ยนแปลงบางอย่างในไดเรกทอรี แต่ปัญหายังคงอยู่
Lorin Hochstein

วิธีการเกี่ยวกับdu -h --totaldir เดียวกันได้หรือไม่
bsd

คำตอบ:


20

มันจะเกิดขึ้นหากคุณมีไฟล์กระจัดกระจาย:

$ 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)


3
ภาพดิสก์ kvm ของคุณน่าจะเต็มไปด้วยหลุม :-)
Stéphane Gimenez

เอกสาร coreutilsบอกว่า-s/ --sizeตัวเลือก "พิมพ์จัดสรรดิสก์ของไฟล์ไปทางซ้ายของชื่อไฟล์แต่ละ. นี้เป็นจำนวนเนื้อที่ดิสก์ที่ใช้โดยไฟล์ซึ่งมักจะน้อยกว่าขนาดไฟล์ที่แต่มันสามารถ จะน้อยลงถ้าไฟล์มีรู " -lตัวเลือกของหลักสูตรพิมพ์ขนาดที่มากเกินไป
Francesco Turco

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 Block คุณสามารถดูสิ่งนี้ได้โดย:

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

นอกจากนี้คุณสามารถลองstatข้อเสนอของฉันempty-fileและคุณจะเห็นว่าจำนวนบล็อกคือ 0 แม้ว่าไฟล์นั้นจะมีขนาด 1G ก็ตาม
Stéphane Gimenez

@ StéphaneGimenezทำไมถึงรายงานว่าบล็อกเป็น 8 บล็อกนี้มีขนาด 512 ไบต์คืออะไร
Ankur Agarwal

1
มันค่อนข้างแปลกในสมัยก่อนบล็อก IO มีขนาด 512 แต่ตอนนี้พวกเขามักเป็น 4K statรายงานจำนวนบล็อกขนาดเท่าเดิมที่จำเป็นในการจัดเก็บบล็อก 4K ทั้งหมด (นั่นคือ 8 เท่าของจำนวนบล็อก 4K จริง)
Stéphane Gimenez

1

คำตอบที่ยอมรับนั้นถูกต้องอย่างแน่นอนหากคุณต้องการเห็นขนาดที่ชัดเจนคุณสามารถใช้:

du --apparent-size

พิมพ์ขนาดที่ชัดเจนมากกว่าการใช้ดิสก์ แม้ว่าขนาดที่เห็นได้ชัดมักจะมีขนาดเล็กลง แต่อาจมีขนาดใหญ่ขึ้นเนื่องจากช่องโหว่ในไฟล์ ('เบาบาง') การแตกแฟรกเมนต์ภายในบล็อกทางอ้อมและอื่น ๆ ที่คล้ายกัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.