ls -l f.txt
-rwxrwxr-x 1 abc abc 1161 Sep 1 02:02 f.txt
stat f.txt
File: `f.txt'
Size: 1161 Blocks: 34 IO Block: 524288 regular file
Device: 38h/56d Inode: 6448956669 Links: 1
Access: (0775/-rwxrwxr-x) Uid: ( 1024/ carle) Gid: ( 100/ users)
Access: 2017-09-09 02:02:36.000000000 -0700
Modify: 2017-09-09 02:02:36.000000000 -0700
Change: 2017-09-11 20:42:00.709807459 -0700
du -h f.txt
17K wiki.txt
- 为什么 f.txt 占用磁盘 17K(17408 字节)?
- IO 块大小是多少?为什么它的长度为 524288 字节且不等于文件系统块大小(假设文件系统块大小为 17K)?
这里发生了什么 ?
答案1
- 为什么f.txt在磁盘上占用了17K(17408字节)?
我假设您指的是报告的大小与占用的块之间的差异ls -l f.txt
。通常这些数字彼此非常接近。正如 Sorcha 已经提到的那样,文件占用 34 个块,这里报告的每个块通常有 512 字节。您可以使用 来验证这一点stat -c "%B" f.txt
。如果您进行计算,您将得到 17408 字节。
通常,Linux 文件系统的块大小为 4096 字节,因此任何低于 512 字节的内容都会在磁盘上分配 4096 字节或 8*512 字节,这是文件系统中最小的可分配大小。
在您的例子中,文件系统的块大小似乎是 17kbytes。为了进一步说明,您必须检查存储文件的 NFS 服务器上的文件系统。
- IO 块大小是多少?为什么它的长度为 524288 字节且不等于文件系统块大小(假设文件系统块大小为 17K)?
man stat
您在此处看到的内容取自最佳 I/O 传输大小提示对于 NFS,这指的是右尺寸/宽尺寸NFS 的 mount 选项,而不是文件系统块大小(通常为 4096 字节)。stat f.txt
在磁盘上保存文件系统的 NFS 服务器上运行,以查看差异。
答案2
为什么 f.txt 占用磁盘 17K (17408 字节)?IO 块大小是多少?
因为分区的块大小是 17408 字节。所以,你的文件将被分割成这个大小的一部分,大小小于 17k 的文件将占用 1 个块,也就是 17k。
为什么它的长度为 524288 字节并且不等于文件系统块大小(假设文件系统块大小为 17K)?
因为硬盘的块大小是 512 字节。如果你使用 34x512,你的文件系统上的大小将为 17408 字节。
IO 块是块的索引,而不是其大小