Vì một số lý do, khi tôi tạo một tệp văn bản trên OS X, nó luôn có ít nhất 4kB, trừ khi nó trống. Tại sao lại thế này? Có thể có 4.000 byte siêu dữ liệu khoảng 1 byte văn bản thuần túy?
:P
Vì một số lý do, khi tôi tạo một tệp văn bản trên OS X, nó luôn có ít nhất 4kB, trừ khi nó trống. Tại sao lại thế này? Có thể có 4.000 byte siêu dữ liệu khoảng 1 byte văn bản thuần túy?
:P
Câu trả lời:
Kích thước khối của hệ thống tệp phải là 4 kB. Khi dữ liệu được ghi vào một tệp có trong một hệ thống tệp, hệ điều hành phải phân bổ các khối lưu trữ để chứa dữ liệu sẽ được ghi vào tệp.
Thông thường, khi một hệ thống tệp được tạo, bộ lưu trữ chứa trong hệ thống tệp đó được phân thành các khối có kích thước cố định. Bài viết Wikipedia này giải thích ngắn gọn quá trình này.
Kích thước khối cơ bản của hệ thống tệp cho tệp này phải có kích thước khối 4K. Tệp này đang sử dụng 1 khối 4K và chỉ một byte trong khối đó chứa dữ liệu thực tế.
Tất cả các hệ thống tệp có kích thước cụm hoặc khối hoặc dung lượng đĩa nhỏ nhất có thể được phân bổ để giữ tệp. Ngay cả khi kích thước tệp thực tế nhỏ hơn kích thước cụm / khối, nó vẫn sẽ tiêu thụ một cụm hoặc 4K trên hệ thống tệp của bạn. Kích thước cụm phụ thuộc vào hệ thống tệp và các tùy chọn hệ thống tệp.
Nếu nó chứa 0 byte, như Gilles đã chỉ ra , nó sử dụng các khối / cụm 0 nhưng một nút trên các hệ thống tệp * nix điển hình, sẽ trả lời tốt hơn cảnh báo, "trừ khi nó trống."
Một thí nghiệm nhỏ để giúp minh họa điều này:
Trước tiên, hãy xem kích thước khối thực tế của phân vùng ext4 gốc (LVM) của tôi là gì:
[root@fedora17 blocksize]# dumpe2fs /dev/mapper/vg_fedora17-lv_root | grep -i "block size"
dumpe2fs 1.42.3 (14-May-2012)
Block size: 4096
Đó là 4096 (4 KiB), như mong đợi. Bây giờ, hãy tạo ba tệp: Đầu tiên là 0 byte, thứ hai chỉ là một byte và thứ ba là 4 KiB (kích thước khối):
[root@fedora17 blocksize]# touch 0_bytes.bin
[root@fedora17 blocksize]# dd if=/dev/zero of=1_byte.bin bs=1 count=1
[root@fedora17 blocksize]# dd if=/dev/zero of=4096_bytes.bin bs=1 count=4096
Bây giờ, chúng tôi ls
thư mục. Chúng tôi sử dụng -s
tùy chọn để xem kích thước được phân bổ (cột ngoài cùng bên trái), với số lượng "khối" 1024 byte.
(Tôi không biết kích thước khối thực là 4096 - chúng tôi có thể chỉ định --block-size
nhưng điều đó chia tỷ lệ mọi thứ theo giá trị đó và chúng tôi cũng muốn xem kích thước tệp thực tế theo byte) .
[root@fedora17 blocksize]# ls -ls
total 8
0 -rw-r--r--. 1 root root 0 Jan 21 23:56 0_bytes.bin
4 -rw-r--r--. 1 root root 1 Jan 21 23:38 1_byte.bin
4 -rw-r--r--. 1 root root 4096 Jan 21 23:38 4096_bytes.bin
Hai điều có thể được lưu ý ở đây:
Các tệp thưa thớt là các tệp có các khối không lớn. Bởi vì dữ liệu được biết là không, nên không có điểm nào để lưu trữ trên đĩa. Theo cách này, kích thước rõ ràng của tệp thực sự có thể lớn hơn kích thước trên đĩa.
Lưu ý rằng một số hệ thống tập tin cho phép các nội dung rất file nhỏ để có thể lưu trữ trong các inode riêng của mình. Xem Có thể lưu trữ dữ liệu trực tiếp bên trong một nút trên hệ thống tệp Unix / Linux không? .