จากหน้าคน 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 ไม่ใช่.