ทำไมขนาดของ“ จุด” ไฟล์“” เกิน 4096


10

วันนี้ฉันพบไดเรกทอรี "ว่าง" ที่มีขนาด 4MB

ls -lahมันไม่ได้มีเนื้อหาที่มองเห็นดังนั้นฉันพยายาม นี่แสดงให้ฉันเห็นบางไฟล์ที่ซ่อนอยู่ (ไม่ใหญ่มาก) ค้นหาสาเหตุที่ทำให้ไดเรกทอรีมีขนาดใหญ่มากฉันพบว่าไฟล์ dot ( .) มีขนาด 3.9MB

สิ่งที่ได้รับการจัดเก็บในไฟล์นั้น นั่นเป็นเพียงลิงค์ไปยังไดเรกทอรีเดียวกันใช่หรือไม่

นี่คือเอาต์พุตเชลล์ (ไม่ระบุชื่อ):

-bash# more /proc/version
Linux version 2.6.18-8.1.15.el5 (mockbuild@builder6.centos.org) (gcc version 4.1.1 20070105 (Red Hat 4.1.1-52)) #1 SMP Mon Oct 22 08:32:04 EDT 2007
-bash# pwd
/data/foo/bar/tmp
-bash# ls -lah
total 4.1M
drwxrwxrwx  3 nobody nobody 3.9M Nov 21 10:02 .
drwxrwxrwx 16 nobody nobody 4.0K Aug 27 17:26 ..
-rw-------  1 root   root    20K Oct 25 14:06 .bash_history
...

คำตอบ:


14

ไฟล์ dot เช่นเดียวกับทุกไดเร็กทอรีมีรายการชื่อสำหรับไฟล์ในไดเร็กทอรีนี้และหมายเลข inode ดังนั้นหากคุณเคยมีไฟล์จำนวนมากในไดเรกทอรีนั้น (ไม่น่าเป็นไปได้สำหรับไดเรกทอรี "tmp") ที่จะทำให้รายการไดเรกทอรีเติบโตเป็นขนาดนี้

หลังจากไฟล์หายไประบบไฟล์จะไม่ย่อขนาดไฟล์ไดเรกทอรีอีกครั้งโดยอัตโนมัติ

คุณสามารถทดลองด้วยตัวคุณเองโดยสร้างไดเรกทอรีว่างใหม่ทำls -laมันเพื่อดูขนาดเริ่มต้น (4096 บนเครื่องของฉัน) จากนั้นtouchไฟล์จำนวนมากซึ่งจะทำให้ขนาดไดเรกทอรีเติบโต

(ใช่ฉันรู้ว่าฉันกำลังขัดเกลา / ไม่ถูกต้องเกี่ยวกับรายละเอียดมากมายที่นี่ แต่ OP ไม่ได้ขอคำอธิบายที่สมบูรณ์เกี่ยวกับการทำงานของระบบไฟล์ EXT *)


2
ขอบคุณดูเหมือนจะอธิบายปรากฏการณ์นี้แล้ว คำถามสองข้อเพิ่งเกิดจากความอยากรู้: เมื่อใดที่ไฟล์ไดเรกทอรีจะหดตัวอีกครั้ง และมีวิธีการแสดงเนื้อหาของไฟล์นั้นหรือไม่?
Martin Hennings

3
(1) ดูunix.stackexchange.com/questions/38639/… - คำตอบสั้น ๆ ลบไดเรกทอรีและสร้างใหม่
บริสตอล

2
(2) น่าเศร้าที่ไม่มีอีกต่อไป สิ่งนี้เคยเป็นไปได้ในเวอร์ชัน UNIX เก่า
บริสตอล

นอกจากนี้คุณยังสามารถเรียกใช้e2fsck -Dบนระบบไฟล์ได้ แต่ต้องยกเลิกการต่อเชื่อม
psusi

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