ทำไมขนาดของไดเรคทอรีถึง 4096 ไบต์เป็นยูนิกซ์เสมอ?


26

ฉันแน่ใจว่าไฟล์ไดเรกทอรีมีข้อมูลน้อยกว่า 4096 ไบต์ ฉันรู้ว่าขนาดเซกเตอร์คือ 4096 ไบต์ แต่ไฟล์ปกติมีขนาดเล็กกว่านั้น

ทำไม Unix สำรอง 4096 bytes สำหรับแต่ละโฟลเดอร์?

คำตอบ:


30

เป็นขนาดเริ่มต้นที่จำเป็นในการจัดเก็บข้อมูลเมตาเกี่ยวกับไฟล์ที่มีอยู่ในไดเรกทอรีนั้น การจัดสรรเริ่มต้นเท่ากับขนาดของภาคหนึ่ง แต่สามารถเติบโตได้มากกว่านั้นหากจำเป็น เมื่อจัดสรรแล้วพื้นที่จะไม่ถูกทำให้ว่างหากไฟล์ถูกลบเพื่อลดการแตกแฟรกเมนต์

ตัวอย่างเช่น:

$ mkdir testdir
$ cd testdir
$ ls -ld .
drwxr-xr-x 2 matthew matthew 4096 2007-12-03 20:28 ./
$ for ((i=0; i<1000; i++)); do touch some_longish_file_name_$i; done
$ ls -ld .
drwxr-xr-x 2 matthew matthew 36864 2007-12-03 20:29 ./
$ rm some_longish_file_name_*
$ ls -ld .
drwxr-xr-x 2 matthew matthew 36864 2007-12-03 20:29 ./
$ cd ..
$ ls -ld testdir
drwxr-xr-x 2 matthew matthew 36864 2007-12-03 20:29 testdir/
$ rmdir testdir ; mkdir testdir
$ ls -ld testdir
drwxr-xr-x 2 matthew matthew 4096 2007-12-03 20:29 testdir/

แหล่ง


3
ขอบคุณสำหรับ "พื้นที่ไม่ได้เป็นอิสระถ้าส่วนที่ถูกลบไฟล์" ฉันกู้คืนสำเนาสำรองและไม่แน่ใจว่าทำไมไดเรกทอรีสองรายการที่เหมือนกันมีขนาดแตกต่างกัน
Tomasz Zieliński

11

บางครั้ง 4096 ไบต์เป็นหน่วยการจัดสรรที่เล็กที่สุดสำหรับระบบไฟล์บางระบบ นั่นเป็นสาเหตุที่ไดเรกทอรีมี 4096

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


4
ใช่ดังที่ Pablo พูด ขนาดที่คุณกำลังดูด้วยไฟล์คือขนาดเนื้อหาของไฟล์ไม่ใช่ไฟล์ที่มีขนาดดิสก์ ขนาดดิสก์ของไฟล์ขนาดเล็กเป็นจริง 4096 เช่นเดียวกับไดเรกทอรีที่สามารถจัดสรรพื้นที่ว่างดิสก์ในบล็อกของขนาดนั้น
Dan McGrath

1
สิ่งนี้ไม่เกี่ยวกับคำถาม
harrymc

สิ่งนี้ไม่ถูกต้อง ดูคำตอบที่ยอมรับได้
Duncan X Simpson

ไม่ถูกต้อง? เป็นการรวมกันของคำตอบทั้งคู่ใช่หรือไม่ 4096 เป็นขนาดของหน้าดูระบบเพจของหน่วยความจำสำหรับข้อมูลเพิ่มเติม
Harrichael

5

4096 ถูกสงวนไว้เพื่อลดการแตกแฟรกเมนต์เนื่องจากบ่อยครั้งที่ขนาดจริงของข้อมูลเมตาที่มีอยู่จะผันผวนตามเนื้อหาไดเรกทอรี หากมีการเติบโตและหดตัวอย่างต่อเนื่อง (กล่าวว่ามีไฟล์บันทึกหรือเนื้อหาแบบไดนามิก) เมื่อเวลาผ่านไปอาจส่งผลกระทบต่อประสิทธิภาพการทำงาน สิ่งนี้อาจไม่เกิดขึ้นกับโฟลเดอร์เดียว แต่ในทั้งระบบไฟล์มันจะเพิ่มขึ้นอย่างรวดเร็ว


3

มันขึ้นอยู่กับระบบไฟล์ บน ext2 / 3/4 it "คือ" 4096. ใน reiserfs มันสามารถเป็น 9608 (ของฉัน$HOME) 1032 ( /tmp) หรือ 48 (บาง dir ใน/tmp)

โดยค่าเริ่มต้นใน ext2 / 3/4 บล็อกคือ 4096 - และไฟล์ต้องไม่น้อยกว่านั้น หากไฟล์มีขนาดเล็กกว่าจะใช้ทั้งบล็อกต่อไป เนื่องจากมันไม่มีประโยชน์ที่จะถามเกี่ยวกับขนาดโลจิคัลของไดเรกทอรีและข้อมูลนี้อาจไม่ได้อยู่บนดิสก์อยู่แล้วและต้องรายงานสิ่งที่มันรายงานขนาดบล็อกครั้งจำนวนบล็อกที่ใช้เช่นพื้นที่ทางกายภาพที่ได้รับ


ฉันแน่ใจว่าขนาดไฟล์จะไม่ถูกจัดเก็บพร้อมไฟล์ มันจะคำนวณเมื่อจำเป็น แต่สำหรับไฟล์มันจะรายงานactualขนาดของไฟล์
Lazer

1
ขนาดไฟล์ถูกเก็บไว้ในไอโหนด เพื่อให้แน่ใจว่า ext2 inode มีขนาดเป็นไบต์ภายใน มิฉะนั้นจะเป็นไปไม่ได้ที่จะพบว่าไฟล์สิ้นสุดที่\0ตัวอักษรในไฟล์ไบนารี่ PS เป็นไปได้ที่จะสร้าง FS ที่ไม่ได้เก็บไว้ - แต่ก็ไม่ขยายไปถึง familly (และอาจไม่เป็นที่นิยมอื่น ๆ )
Maciej Piechotka
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.