2014-11-06 89 views
3
ll /srv/node/dcodxx/test.sh 
-rw-r--r--. 1 root root 7 Nov 5 11:18 /srv/node/dcodxx/test.sh 

文件大小以字节为单位显示。该文件存储在一个块大小为4096字节的xfs文件系统中。Xfs文件大小,inode大小和块大小

xfs_info /srv/node/sdaxx/ 
meta-data=/dev/sda    isize=256 agcount=32, agsize=7630958 blks 
     =      sectsz=4096 attr=2, projid32bit=0 
data  =      bsize=4096 blocks=244190646, imaxpct=25 
     =      sunit=0  swidth=0 blks 
naming =version 2    bsize=4096 ascii-ci=0 
log  =internal    bsize=4096 blocks=119233, version=2 
     =      sectsz=4096 sunit=1 blks, lazy-count=1 
realtime =none     extsz=4096 blocks=0, rtextents=0 

这是否意味着一个块可以容纳多个文件,如果不是其余字节(4096-7)会发生什么? 另外,如果保存在与文件相同的块中,为存储的inode保留256个字节,那么文件大小是不是应该更大(256 + 7)?

回答

1

这是否意味着块可以容纳多个文件,如果不是其余字节(4096-7)会发生什么?

块不能包含多个文件。如果文件大于一个块,则使用多个块。

像XFS这样的现代文件系统具有称为“inline”的功能,其中足够小的文件(不超过60个字节)可以存储在inode中,用于存储指向块的空间。

其中是为存储的inode保留的256个字节,如果与文件存储在同一个块中,文件大小是不是应该更大(256 + 7)?

索引节点信息存储在索引节点表中。

+0

我不认为XFS实际上内嵌小文件。 http://xfs.org/index.php/Unfinished_work#Inline_data_in_inodes。 reiserfs可以选择将多个小文件打包到同一个块中。实际上在大多数文件系统中发生的是内部碎片(http://en.wikipedia.org/wiki/Fragmentation_%28computing%29#Internal_fragmentation)(除非文件大小是FS块大小的倍数)。 – 2015-03-02 07:37:47

+0

它也会更多有用的说,inode被拼装成块。任何地方都没有一个“inode表”。据我了解,一块inode可以分配到任何地方。 (这是新crc = 1磁盘格式的动机的一部分,https://www.kernel.org/doc/Documentation/filesystems/xfs-self-describing-metadata.txt) – 2015-03-02 07:41:10

3

文件数据以文件系统块大小为单位进行存储,XFS上的多个文件当前不能共享块。所使用的磁盘空间总是文件中的字节数,四舍五入到下一个块大小 - 一个1字节的文件将在4k块大小的文件系统上消耗4k的磁盘空间。

inode本身包含文件元数据,例如大小,时间戳,扩展数据等 - 并且在xfs上它还可以包含扩展属性信息。

磁盘inode与文件数据块是分开的,并且无论使用的元数据量如何,在256字节inode的文件系统上总是会消耗256个字节。如果需要多于256个字节来存储附加扩展信息或扩展属性数据,则会分配额外的文件系统块大小的元数据块。