了解我的 nfs 挂载上的 stat、du 和 ls -l 输出

了解我的 nfs 挂载上的 stat、du 和 ls -l 输出
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
  1. 为什么 f.txt 占用磁盘 17K(17408 字节)?
  2. IO 块大小是多少?为什么它的长度为 524288 字节且不等于文件系统块大小(假设文件系统块大小为 17K)?

这里发生了什么 ?

答案1

  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 服务器上的文件系统。

  1. 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 块是块的索引,而不是其大小

相关内容