จากหน้าคน ext4(5):
dir_nลิงค์
โดยปกติ ext4 อนุญาตให้ไอโหนดมีฮาร์ดลิงก์ได้ไม่เกิน 65,000 สิ่งนี้ใช้กับไฟล์ทั่วไปและไดเร็กทอรี ซึ่งหมายความว่ามีไดเร็กทอรีย่อยได้ไม่เกิน 64,998 รายการในไดเร็กทอรี (เนื่องจากแต่ละรายการของ '.' และ '..' รวมถึงรายการไดเร็กทอรีสำหรับ ไดเร็กทอรีในไดเร็กทอรีหลักจะนับเป็นฮาร์ดลิงก์) คุณลักษณะนี้ยกเลิกขีดจำกัดนี้โดยกำหนดให้ ext4 ใช้จำนวนลิงก์เป็น 1 เพื่อระบุว่าไม่ทราบจำนวนของฮาร์ดลิงก์ไปยังไดเร็กทอรี เมื่อจำนวนลิงก์อาจเกินขีดจำกัดจำนวนสูงสุด
large_dir
คุณลักษณะนี้จะเพิ่มขีดจำกัดของจำนวนไฟล์ต่อไดเร็กทอรีโดยเพิ่มขนาดสูงสุดของไดเร็กทอรีและสำหรับไดเร็กทอรี b-tree ที่แฮช (ดู dir_index) ความสูงสูงสุดของ b-tree ที่แฮชที่ใช้เก็บรายการไดเร็กทอรี
เอาล่ะ เรามาดูกันดีกว่า dir_index
ด้วย.
dir_index
ใช้ b-tree ที่แฮชเพื่อเพิ่มความเร็วในการค้นหาชื่อในไดเร็กทอรีขนาดใหญ่ คุณลักษณะนี้รองรับโดยระบบไฟล์ ext3 และ ext4 และถูกละเว้นโดยระบบไฟล์ ext2
ตามความเข้าใจของฉันที่หน้าคน:
- เมื่อไม่มีรายการในไดเร็กทอรี จะมีฮาร์ดลิงก์ 2 ตัว ได้แก่
.
(ไดเรกทอรีชี้ไปที่ตัวเอง) และ ..
(ชี้ไปที่ไดเร็กทอรีหลัก แต่ฮาร์ดลิงก์อ้างถึงการอ้างอิงจากไดเร็กทอรีหลักไปยังไดเร็กทอรี) และค่าของ st_nลิงค์
สนามใน สถิติ
โครงสร้างเป็น 2
. เมื่อมี 1 รายการ (เช่น 1 ไฟล์) ในไดเร็กทอรี จะมีฮาร์ดลิงก์ 3 ตัว และ st_nลิงค์
พูดว่า 3
;
- ดังนั้น เพื่อแสดงจำนวนจริงของฮาร์ดลิงก์
st_nลิงค์
ต้องมีอย่างน้อย 2
. เป็นผลให้ค่า 1
มีอิสระในการแสดงสิ่งอื่น แทนที่จะมีเพียง 1 ฮาร์ดลิงก์ ซึ่งไม่สมเหตุสมผล
- หากระบบไฟล์ ext4 ถูกฟอร์แมตโดยไม่มี
dir_nลิงค์
, แล้ว st_nลิงค์
ไม่สามารถมากกว่า 65000
และระบบปฏิเสธที่จะเพิ่มรายการเมื่อถึงขีด จำกัด (ฉันอ่านเกี่ยวกับว่าเมล็ดสมัยใหม่อาจเปิดโดยอัตโนมัติ dir_nลิงค์
แต่ไม่ต้องสนใจเรื่องนี้เพื่อความง่ายในการอภิปราย);
- หากระบบไฟล์ ext4 ถูกฟอร์แมตด้วย
dir_nลิงค์
แล้วเมื่อมีมากกว่า 65000
รายการในไดเร็กทอรี ค่า 1
จะเขียนถึง st_nลิงค์
ฟิลด์เพื่อระบุ "จำนวนฮาร์ดลิงก์ที่ไม่รู้จัก" ไคลเอนต์ (รหัสที่ใช้ระบบไฟล์ ext4) ต้องสำรวจรายการไฟล์ (บล็อกข้อมูลของไดเร็กทอรี) เพื่อนับจำนวนจริงของรายการที่อยู่ภายใน
large_dir
เพิ่มขนาดสูงสุดของไดเร็กทอรี
- ถ้า
dir_index
ถูกนำมาใช้, large_dir
เพิ่มความสูงสูงสุดของ B-Tree ที่แฮช
คำถามของฉัน
- ถ้า
dir_nลิงค์
ใช้เพียงอย่างเดียว ขนาดสูงสุดของไดเร็กทอรีคือเท่าใด ฉันเคยคิดว่ามันไม่มีที่สิ้นสุดตราบเท่าที่มีบล็อกข้อมูลเพียงพอที่จะจัดเก็บรายการไฟล์ในไดเร็กทอรี แต่ตอนนี้ดูเหมือนว่าจะไม่ใช่
- ผมว่าใช้
large_dir
เพียงอย่างเดียวไม่สมเหตุสมผลเนื่องจากขนาดไดเร็กทอรียังคงถูกจำกัดไว้ 65000
. ฉันถูกไหม?
- ถ้า
large_dir
ถูกใช้ ขนาดสูงสุดของไดเร็กทอรีคือเท่าใด
- มีข้อเสียในการใช้
large_dir
? เหตุผลที่ฉันมีคำถามนี้คือใน Ubuntu 20.04 LTS dir_nลิงค์
ถูกตั้งค่าเป็นค่าเริ่มต้น (ดู /etc/mke2fs.conf
อยู่ในรายการที่ [fs_types]
> ต่อ4
> คุณสมบัติ
), แต่ large_dir
ไม่ใช่.