tkb*_*kbx 50 filesystems disk-usage
出于某种原因,当我在 OS X 上制作文本文件时,它总是至少 4kB,除非它是空白的。为什么是这样?1 字节的纯文本可能有 4,000 字节的元数据吗?
Chr*_*her 13
所有文件系统都有一个簇或块大小,或者可以分配来保存文件的最小磁盘空间量。即使实际文件大小小于簇/块大小,它仍然会消耗一个簇,或文件系统上的 4K。集群大小取决于文件系统和文件系统选项。
如果它包含零字节,正如Gilles 指出的那样,它在典型的 *nix 文件系统上使用零个块/集群,但使用一个 inode,这更好地回答了警告,“除非它是空白的。”
Jon*_*art 10
一个小实验来帮助说明这一点:
首先,让我们看看我的根 ext4 (LVM) 分区的实际块大小是多少:
[root@fedora17 blocksize]# dumpe2fs /dev/mapper/vg_fedora17-lv_root | grep -i "block size"
dumpe2fs 1.42.3 (14-May-2012)
Block size: 4096
Run Code Online (Sandbox Code Playgroud)
正如预期的那样,它是 4096 (4 KiB)。现在,让我们创建三个文件:第一个是零字节,第二个是一个字节,第三个是 4 KiB(块大小):
[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
Run Code Online (Sandbox Code Playgroud)
现在,我们ls
的目录。我们使用该-s
选项查看分配的大小(最左边的列),以 1024 字节“块”的数量表示。
(ls 不知道真正的块大小是 4096——我们可以指定,--block-size
但它会按该值缩放所有内容,我们也希望以字节为单位查看实际文件大小)。
[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
Run Code Online (Sandbox Code Playgroud)
这里可以注意两件事:
稀疏文件是具有大块零的文件。由于已知数据全部为零,因此将其存储在磁盘上毫无意义。通过这种方式,文件的表观大小实际上可能大于磁盘上的大小。
请注意,某些文件系统允许将非常小的文件内容存储在inode本身中。请参阅是否可以将数据直接存储在 Unix / Linux 文件系统上的 inode 中?.