Từ trang hướng dẫn ext4(5):
dir_nlink
Thông thường, ext4 cho phép một nút có không quá 65.000 liên kết cứng. Điều này áp dụng cho các tệp thông thường cũng như các thư mục, có nghĩa là không thể có nhiều hơn 64.998 thư mục con trong một thư mục (vì mỗi mục nhập '.' và '..', cũng như mục nhập thư mục cho trong thư mục mẹ của nó được tính là một liên kết cứng). Tính năng này nâng giới hạn này bằng cách khiến ext4 sử dụng số lượng liên kết là 1 để chỉ ra rằng số lượng liên kết cứng tới một thư mục không được biết khi số lượng liên kết có thể vượt quá giới hạn số lượng tối đa.
large_dir
Tính năng này tăng giới hạn về số lượng tệp trên mỗi thư mục bằng cách tăng kích thước tối đa của các thư mục và đối với các thư mục b-tree được băm (xem dir_index), chiều cao tối đa của cây b đã băm được sử dụng để lưu trữ các mục nhập thư mục.
Được rồi, chúng ta hãy xem qua dir_index
quá.
dir_index
Sử dụng b-tree đã băm để tăng tốc độ tra cứu tên trong các thư mục lớn. Tính năng này được hỗ trợ bởi các hệ thống tệp ext3 và ext4 và bị các hệ thống tệp ext2 bỏ qua.
Theo sự hiểu biết của tôi về trang người đàn ông:
- Khi không có mục nào trong một thư mục, có 2 liên kết cứng, đó là
.
(thư mục trỏ đến chính nó) và ..
(điều này trỏ đến thư mục mẹ, nhưng liên kết cứng đề cập đến tham chiếu từ thư mục mẹ đến thư mục) và giá trị của st_nlink
lĩnh vực trong thống kê
cấu trúc là 2
. Khi có 1 mục (giả sử 1 tệp) trong một thư mục, có 3 liên kết cứng và st_nlink
nói 3
;
- Do đó, để thể hiện số lượng liên kết cứng thực tế,
st_nlink
phải ít nhất 2
. Kết quả là, giá trị 1
được tự do để đại diện cho một cái gì đó khác, thay vì chỉ có 1 liên kết cứng, điều này không có ý nghĩa gì;
- Nếu hệ thống tệp ext4 được định dạng mà không có
dir_nlink
, sau đó st_nlink
không thể lớn hơn 65000
và hệ thống từ chối thêm nhiều mục hơn khi đạt đến giới hạn (tôi đã đọc về các hạt nhân hiện đại có thể tự động bật dir_nlink
, nhưng hãy bỏ qua điều này để đơn giản hóa cuộc thảo luận);
- Nếu hệ thống tệp ext4 được định dạng bằng
dir_nlink
, sau đó khi có nhiều hơn 65000
các mục trong một thư mục, giá trị 1
sẽ được viết cho st_nlink
trường để chỉ ra "số lượng liên kết cứng không xác định". Các máy khách (mã sử dụng hệ thống tệp ext4) phải duyệt qua danh sách các tệp (khối dữ liệu của thư mục) để đếm số mục thực tế bên trong nó;
large_dir
tăng kích thước tối đa của thư mục;
- Nếu
dir_index
Được sử dụng, large_dir
tăng chiều cao tối đa của B-Tree được băm.
Những câu hỏi của tôi
- Nếu
dir_nlink
một mình được sử dụng, kích thước tối đa của một thư mục là bao nhiêu? Tôi đã từng nghĩ rằng nó là vô tận miễn là có đủ khối dữ liệu để lưu trữ danh sách các tệp trong thư mục, nhưng bây giờ có vẻ như không phải vậy.
- tôi nghĩ rằng sử dụng
large_dir
một mình không có ý nghĩa, vì kích thước thư mục vẫn bị giới hạn bởi 65000
. Tôi có đúng không?
- Nếu
large_dir
được sử dụng, kích thước tối đa của một thư mục là bao nhiêu?
- Có bất kỳ nhược điểm nào khi sử dụng không
large_dir
? Lý do tại sao tôi có câu hỏi này là trong Ubuntu 20.04 LTS, dir_nlink
được đặt theo mặc định (xem /etc/mke2fs.conf
, nó nằm trong danh sách tại [fs_types]
> máy lẻ4
> Tính năng, đặc điểm
), nhưng large_dir
không phải.