Tôi đã tự hỏi tại sao một thư mục trống chiếm 4096 byte không gian và tôi đã thấy câu hỏi này . Nó được tuyên bố rằng không gian được phân bổ trong các khối và do đó, kích thước của một thư mục mới là 4096 byte.
Tuy nhiên tôi khá chắc chắn rằng việc phân bổ cho các tệp "bình thường" cũng được thực hiện theo các khối. Ít nhất là như vậy trong các hệ thống tập tin Windows và tôi đoán rằng nó ít nhất phải giống nhau trong ext *.
Theo như tôi hiểu, việc liệt kê kích thước cho các loại tệp khác, chẳng hạn như tệp, liên kết tượng trưng, v.v ... được thực hiện theo kích thước thực. Bởi vì khi tôi tạo một tệp trống, tôi thấy 0 là kích thước. Khi gõ một vài ký tự, tôi thấy các byte <số ký tự> là kích thước, v.v.
Vì vậy, câu hỏi của tôi là, mặc dù việc phân bổ cho các tệp khác cũng được thực hiện theo khối, tại sao chính sách báo cáo kích thước của thư mục và tệp khác nhau?
Làm rõ
Tôi nghĩ rằng câu hỏi đã đủ rõ ràng nhưng rõ ràng là không. Tôi sẽ cố gắng làm rõ câu hỏi ở đây.
1) Những gì tôi nghĩ rằng một thư mục là:
Tôi sẽ cố gắng giải thích những gì tôi nghĩ rằng một thư mục là ví dụ sau đây. Sau khi đọc, nếu nó sai, xin vui lòng thông báo cho tôi.
Hãy nói rằng chúng tôi có một thư mục có tên mydir
. Và chúng ta hãy nói rằng nó chứa 3 tác phẩm, đó là: f0
, f1
và f2
. Giả sử rằng mỗi tệp dài 1 byte.
Bây giờ, là mydir
gì? Nó là một con trỏ tới một nút có chứa các phần sau: Chuỗi "f0" và số inode f0
trỏ đến. Chuỗi "f1" và số inode f1
trỏ đến. Và chuỗi "f2" và số inode f2
trỏ đến. (Ít nhất đây là những gì tôi nghĩ là một thư mục. Vui lòng sửa cho tôi nếu tôi sai.)
Bây giờ có thể có hai phương pháp để tính kích thước của một thư mục:
1) Tính kích thước của nút in mydir
tới.
2) Tổng hợp kích thước của các nút mà nội dung của các mydir
điểm đến.
Mặc dù 1 là trực quan hơn, hãy giả sử rằng đó là phương pháp đang được sử dụng. (Đối với câu hỏi này, phương thức nào là phương thức thực sự đang được sử dụng không quan trọng.) Sau đó, kích thước của mydir
được tính như sau:
2 + 2 + 2 + 3 * <space_required_to_store_an_inode_number>
2 là vì mỗi tên tệp dài 2 byte.
2) Câu hỏi:
Bây giờ câu hỏi: Giả sử những gì tôi nghĩ rằng một thư mục là chính xác, kích thước được báo cáo mydir
phải nhỏ hơn 4096, bất kể phương pháp 1 hoặc phương pháp 2 đang được sử dụng để tính kích thước của nó.
Bây giờ, bạn sẽ nói rằng lý do nó được báo cáo 4096 byte là do việc phân bổ được thực hiện theo khối. Do đó, kích thước báo cáo lớn.
Nhưng sau đó tôi sẽ nói: Phân bổ cũng được thực hiện trong các khối cho các tệp thông thường. (Xem câu trả lời của thrig để tham khảo) Tuy nhiên, kích thước của chúng được báo cáo theo kích thước thật. (1 byte nếu chúng chứa 1 ký tự, 2 byte nếu chúng chứa 2 ký tự, v.v.)
Vì vậy, câu hỏi của tôi là, tại sao chính sách báo cáo kích thước của các thư mục lại khác với kích thước báo cáo của các tệp thông thường?
Làm rõ hơn:
Chúng tôi biết rằng số khối ban đầu được phân bổ cho một tệp không trống và cho một thư mục trống là cả 8 khối. (Xem câu trả lời của thrig ) Vì vậy, mặc dù việc phân bổ được thực hiện trong cùng một số khối cho cả tệp và thư mục thông thường, tại sao kích thước được báo cáo cho một thư mục lại lớn hơn nhiều?
mydir
. Và giả sử nó chứa một số tệp như :f0
,f1
vàf2
. Bây giờ, làmydir
gì? Nó là một con trỏ tới một nút có chứa dòng sau: Chuỗi "f0" và số inode mà nó trỏ tới. Chuỗi "f1" và số inode mà nó trỏ tới. Chuỗi "f2" và số inode mà nó trỏ đến. (Ít nhất đây là hình ảnh trong tâm trí của tôi. Nó có thể sai) Cho đến nay rất tốt.