Trên Linux, (có lẽ là một chức năng của kích thước khối hệ thống tệp), khi tôi tạo một thư mục và stat
nó, nó trả về kích thước 4096. Tôi có thể tạo các tệp trong thư mục này, lên đến một điểm, mà không làm tăng kích thước nhận biết của thư mục (như báo cáo của stat
).
Tại một số điểm, khi thư mục chứa đầy các tệp, bong bóng kích thước thư mục (Tôi không nói về nội dung của thư mục, tôi đang nói về các khối được sử dụng để đại diện cho chính thư mục). Nếu các tập tin bị xóa, kích thước thư mục vẫn giữ nguyên.
Đây là một ví dụ nhanh:
[root@uxlabtest:/]$ mkdir test
[root@uxlabtest:/]$ stat test
File: `test'
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: fd00h/64768d Inode: 1396685 Links: 2
Access: (0755/drwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2011-07-26 14:06:04.000000000 -0400
Modify: 2011-07-26 14:06:04.000000000 -0400
Change: 2011-07-26 14:06:04.000000000 -0400
Sau đó chạm vào một loạt các tập tin:
[root@uxlabtest:/]$ for i in `seq 1 10000`; do touch /test/$i; done
[root@uxlabtest:/]$ stat test
File: `test'
Size: 155648 Blocks: 312 IO Block: 4096 directory
Device: fd00h/64768d Inode: 1396685 Links: 2
Access: (0755/drwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2011-07-26 14:06:04.000000000 -0400
Modify: 2011-07-26 14:06:56.000000000 -0400
Change: 2011-07-26 14:06:56.000000000 -0400
Sau đó xóa các tập tin:
[root@uxlabtest:/]$ rm -rf /test/*
[root@uxlabtest:/]$ stat test
File: `test'
Size: 155648 Blocks: 312 IO Block: 4096 directory
Device: fd00h/64768d Inode: 1396685 Links: 2
Access: (0755/drwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2011-07-26 14:07:11.000000000 -0400
Modify: 2011-07-26 14:07:12.000000000 -0400
Change: 2011-07-26 14:07:12.000000000 -0400
Câu hỏi của tôi là:
- Tại sao số lượng kích thước / khối của một thư mục tăng đơn điệu?
- Đây có phải là một chức năng của hệ thống tập tin cơ bản hoặc Linux VFS?
- Có thể giảm kích thước thư mục mà không cần xóa và tạo lại thư mục?
- Điểm thưởng: Chỉ cho tôi mã nguồn hạt nhân nơi thực hiện hành vi này.