了解我的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. 为什么f.txt在磁盘上占用17K(17408字节)?

我假设你指的是由ls -l f.txt报告的大小和占用的块的大小之间的差异。 通常这些数字非常接近。 正如Sorcha已经提到的那样,这个文件占用了34块,这里报告的每个块通常有512个字节。 你可以用stat -c "%B" f.txt来validation。 如果你做math,你会得到17408字节。
通常情况下,Linux文件系统的块大小为4096字节,所以低于512字节的数据将分配4096字节或8 * 512字节的磁盘空间,这是文件系统中最小的可分配大小。
在你的情况下,似乎文件系统的块大小是17kbytes。 为了进一步说明,您将需要检查文件存储在NFS服务器上的文件系统。

  1. 什么是IO块大小? 为什么524288字节长,不等于文件系统块大小(假设文件系统块大小为17K)?

你在这里看到的是从man stat中得到的最佳的I / O传输大小提示 ,在NFS的情况下,这是指NFS的rsize / wsize挂载选项,而不是通常为4096字节的文件系统块大小。 在包含磁盘上的文件系统的NFS服务器上运行stat f.txt ,以查看差异。

为什么f.txt在磁盘上占用17K(17408字节)? 什么是IO块大小?

因为分区的块大小是17408字节。 所以,你的文件将被分割成这个尺寸的一部分,并且尺寸小于17k的文件将占用1个块,因此17k。

为什么524288字节长,不等于文件系统块大小(假设文件系统块大小为17K)?

因为你的硬盘的块大小是512字节。 如果你做的是34×512,你的文件系统上的大小将是17408字节。

而IO块是你的块的索引,而不是他的大小