Fragment size,逻辑块,及存放用户数据的数据块3者的关系

1.inode与nbpi
      JFS中每个文件与目录均唯一对应一个inode信息,inode用于记录文件的控制信息以及到分配给该文件的数据块(这种数据块即inde中指针所指向的数据块,在JFS里叫fragment,在JFS2里叫logical block)的指针等.每个文件或目录都占用一个i-node. 对于JFS,每个inode需占128B空间, JFS2每个inode占512B.
      NBPI -- Number of Bytes Per I-node. nbpi不代表每个inode本身所占字节大小,因为inode本身所占字节大小为128B或512B,而nbpi默认值为4096; nbpi也不代表1个inode所能够管理(即指向)的数据块(这种数据块即inde中指针所指向的数据块, 在JFS里叫fragment,在JFS2里叫logical block)空间大小,因为1个inode所能管理的空间(或文件数据块空间总大小)取决于寻址方式(如直接块,一/二/三次间接块); nbpi只是在创建FS的时候用来“预估i节点的数量”的一个值而已,即仅用nbpi来确定该FS创建后所能够建立的文件/目录最大数量.
      一个JFS 中规定最多允许可有 2^24个inode。 JFS一旦创建,inode的实际个数就确定了,即为(JFS Size / nbpi)个i-node, 可知nbpi 影响FS上的 i-nodes 总数量, nbpi 大小与FS上的 inodes 数目(可创建文件/目录数)成反比, 如1个4M的FS, nbpi=4096, 则inode数量就是1024个,除去保留的16个i-node,用户最多可以在该文件系统下建1008个文件。或者反过来说, FS大小也受nbpi值影响, 因为一个JFS系统最多只能有2^24(16M)个nbpi, 故当nbpi=4096时, FS最大可以为4096*16M=64G,nbpi=8192时,FS最大可为8192*16M=128G.
      实际上JFS大小还受“数据块”(这种数据块即inde中指针所指向的数据块, 在JFS里叫fragment,在JFS2里叫logical block)大小的限制,因为JFS中规定最多允许可有2^28个fragment size,若每个fragment size为默认值4K(JFS2中logical block默认值也是4K), 则JFS大小最大可为4096*64M(即2^28)=256G大小, 综合上一段的描述, JFS真正的最后大小应是 NBPI*2^24 和 fragment size*2^28  中的较小值,即min(NBPI*2^24,fragment size*2^28).
      如何选择nbpi大小:NBPI 越小,inode数就能越多,就能创建更多小文件,适合多数文件都是小文件的FS;NBPI 越大,inode数就越少,适合在FS上创建个数少,尺寸大的文件.nbpi在创建FS时指定,默认值4096.
2.inode的结构与工作方式(结构图略)
      
      在JFS中,文件的内容以“数据块” (这种数据块即inde中指针所指向的数据块, 在JFS里叫fragment,在JFS2里叫logical block)为单位(默认值4096B)存储在逻辑卷上. 一个inode中可包含8个指向“数据块”(这种数据块即inde中指针所指向的数据块, 在JFS里叫fragment,在JFS2里叫logical block)的物理存储位置的指针,故一小于32KB的文件的内容可以直接从inode里寻址访问。
      一个大于32KB的文件需使用一个“间接块”来存放文件内容在磁盘上的存储位置, 这时inode里的第9个指针指向间接块的物理存储位置。一个间接块的大小也是4096B,而每个间接块可包含1024个指向“数据块”(这种数据块即inde中指针所指向的数据块, 在JFS里叫fragment,在JFS2里叫logical block)的物理存储位置的指针,故这种方式下能访问的最大的文件大小是4MB(4096x1024字节)。
      对于大于4MB的文件,JFS使用“双间接块” 处理。inode中的第10个指针指向双间接块的存储位置,而“双间接块”中又包含着512个指向“间接块”的指针。由于每个间接块的寻址能力是4MB,所以用这种方式所能够访问的最大文件大小是2GB(512x4MB)。
      为了进一步增强对大文件的支持,从Aix 4.2开始引入了支持大文件的JFS系统。这种系统对于容量超过4MB的文件使用128KB的fragment size,所以它所能支持的最大的文件大小是64GB(512x1024x128KB)
3. Allocation Group, fragment 和 logical block 
      Allocation group size即分配组尺寸, JFS的FS空间是按分配组尺寸来分组的.尺寸有8/16/32/64MB不同。 缺省值8MB, 在创建FS时设定.分配组中包含有inode和用于存放用户数据的数据块(即inde中指针所指向的数据块,这种数据块在JFS里叫fragment,在JFS2里叫logical block)。分配组空间一旦分配给了某一FS,则每 NBPI 个字节就会创建一个inode。一个logical block或fragment可存放多个inode, 同时组内的空间是按分片fragment大小(JFS2中则是按logical block大小)为单元(该单元即"存放用户数据的数据块,即inde中指针所指向的数据块,这种数据块在JFS里叫fragment,在JFS2里叫logical block)分配给每一文件的.
      在JFS中,Allocation Group空间是由最基本单元Fragment组成的, 也是前面屡次说到的inode指针所指向的,用于存放数据的"数据块", Fragment是JFS创建文件时空间分配的最小单位. Fragment size有512/1024/2048/4096B不同,缺省值4096B, 在创建FS时可设定. 不同的FS可有不同的Fragment size, 但同一FS只能有一种Fragment size.
      而在JFS2中,Fragment的概念已经被logical block的概念替代, 即: Allocation Group空间是由最基本单元logical block组成的, 也是前面屡次说到的inode指针所指向的,用于存放数据的"数据块", logical block是JFS创建文件时空间分配的最小单位. logical block size缺省值4096B, 在创建FS时可设定. 不同的FS可有不同的logical block size , 但同一FS只能有一种logical block size. 由此可见, JFS2中的logical block size在概念,用处, 用法及默认值大小上都与JFS中的Fragment完全相同, 只是更换了名称而已.
      那么, JFS是如何具体分配lv的空间,如何分配Allocation Group,及Allocation Group中的Fragment(或logical block)的呢? 原来,JFS把lv分成固定大小(4K)的单元,在JFS中称Fragment,在JFS2中称logical block .每个文件或目录占用1个或多个Fragment(或logical block), lv上的第0个Fragment(或logical block)是LVCB,它和JFS无关,记录的是该逻辑卷的控制信息; 而第1和第31个Fragment(或logical block)是超级块(supper block), 用于保存整个JFS的信息; 第2至第30个Fragment(或logical block)则系统特殊保留的inode; 
      从第32个Fragment(或logical block)开始后的所有空间,划分为多个Allocation Group,每个Allocation Group由多个Fragment(或logical block)组成, 其中包含inode和数据块,这样inode和它指向的数据块位于一个Allocation Group中,能提高磁盘访问的性能。对于一个新的文件,JFS首先在一个Allocation Group里分配1个inode及数据块,并根据文件大小扩充对该文件的Allocation Group的分配数量.
      紧接在lv上第31个Fragment(或logical block)之后, 第一个allocation group包含lv中的第32至第n个Fragment(或logical block), 这些Fragment(或logical block)分为两部分,其中第32至第m(m个Fragment(或logical block)用于保存第一个allocation group的inode(注意,一个Fragment(或logical block)可保存多个inode),而第m+1至第n个Fragment(或logical block)则保存该allocation group的数据块, 从第n+1个Fragment(或logical block)开始,是下一个allocation group的空间范围.




以下描述, 主要针对JFS, 其中重要之处用红字标出,涉及JFS2的描述用蓝字标出.
1.inode与nbpi
      JFS中每个文件与目录均唯一对应一个inode信息,inode用于记录文件的控制信息以及到分配给该文件的文件数据块(这种数据块即inde中指针所指向的数据块,在JFS里叫fragment,在JFS2里叫logical block)的指针等.每个文件或目录都占用一个i-node. 对于JFS,每个inode需占128B空间, JFS2每个inode占512B.
      NBPI -- Number of Bytes Per I-node. nbpi不代表每个inode本身所占字节大小,因为inode本身所占字节大小为128B或512B,而nbpi默认值为4096; nbpi也不代表1个inode所能够管理(即指向)的文件数据块空间大小,因为1个inode所能管理的空间(或文件数据块空间总大小)取决于寻址方式(如直接块,一/二/三次间接块); nbpi只是在创建FS的时候用来“预估i节点的数量”的一个值而已,即仅用nbpi来确定该FS创建后所能够建立的文件/目录最大数量.
      一个JFS 中规定最多允许可有 2^24个inode。 JFS一旦创建,inode的实际个数就确定了,即为(JFS Size / nbpi)个i-node, 可知nbpi 影响FS上的 i-nodes 总数量, nbpi 大小与FS上的 inodes 数目(可创建文件/目录数)成反比, 如1个4M的FS, nbpi=4096, 则inode数量就是1024个,除去保留的16个i-node,用户最多可以在该文件系统下建1008个文件。或者反过来说, FS大小也受nbpi值影响, 因为一个JFS系统最多只能有2^24(16M)个nbpi, 故当nbpi=4096时, FS最大可以为4096*16M=64G,nbpi=8192时,FS最大可为8192*16M=128G.
      实际上JFS大小还受文件数据块尺寸的限制,因为JFS中规定最多允许可有2^28个fragment size,若每个fragment size为默认值4K(JFS2中logical block默认值也是4K), 则JFS大小最大可为4096*256M(即2^28)大小, 综合上一段的描述, JFS真正的最后大小应是 NBPI*2^24 和 fragment size*2^28  中的较小值,即min(NBPI*2^24, fragment size*2^28).
      如何选择nbpi大小:NBPI 越小,inode数就能越多,就能创建更多小文件,适合多数文件都是小文件的FS;NBPI 越大,inode数就越少,适合在FS上创建个数少,尺寸大的文件.nbpi在创建FS时指定,默认值4096.
      注意:JFS2没有已没有nbpi概念了, JFS2的inode数是动态分配的,所以JFS2方便灵活多了.
2.inode的结构与工作方式(结构图略)
      
      在JFS中,文件的内容以文件数据块为单位(默认值4096B)存储在逻辑卷上. 一个inode中可包含8个指向文件数据块的物理存储位置的指针,故一小于32KB的文件的内容可以直接从inode里寻址访问。
      一个大于32KB的文件需使用一个“间接块”来存放文件内容在磁盘上的存储位置, 这时inode里的第9个指针指向间接块的物理存储位置。一个间接块的大小也是4096B,而每个间接块可包含1024个指向文件数据块的物理存储位置的指针,故这种方式下能访问的最大的文件大小是4MB(4096x1024字节)。
      对于大于4MB的文件,JFS使用“双间接块” 处理。inode中的第10个指针指向双间接块的存储位置,而“双间接块”中又包含着512个指向“间接块”的指针。由于每个间接块的寻址能力是4MB,所以用这种方式所能够访问的最大文件大小是2GB(512x4MB)。
      为了进一步增强对大文件的支持,从Aix 4.2开始引入了支持大文件的JFS系统。这种系统对于容量超过4MB的文件使用128KB的fragment size,所以它所能支持的最大的文件大小是64GB(512x1024x128KB)
3. Allocation Group, fragment 和 logical block 
      Allocation group size即分配组尺寸, JFS的FS空间是按分配组尺寸来分组的.尺寸有8/16/32/64MB不同。 缺省值8MB, 在创建FS时设定.分配组中包含有inode和用于存放用户数据的文件数据块。分配组空间一旦分配给了某一FS,则每 NBPI 个字节就会创建一个inode。一个logical block或fragment可存放多个inode, 同时组内的空间是按分片fragment大小(JFS2中则是按logical block大小)为单元(即文件数据块的存储单元)分配给每一文件的.注意,JFS2中已经没有Allocation Group的概念了.
      在JFS中,Allocation Group空间是由最基本单元Fragment组成的, 也是前面说到的inode指针所指向的,用于存放数据的文件数据块, Fragment是JFS创建文件时空间分配的最小单位. Fragment size有512/1024/2048/4096B不同,缺省值4096B, 在创建FS时可设定. 不同的FS可有不同的Fragment size, 但同一FS只能有一种Fragment size.而在JFS2中,Fragment的概念已经被logical block的概念替代, 即: JFS2空间是由最基本单元logical block组成的, 也是前面屡次说到的inode指针所指向的,用于存放数据的"数据块", logical block是JFS2创建文件时空间分配的最小单位. logical block size缺省值4096B, 在创建FS时可设定. 不同的FS可有不同的logical block size , 但同一FS只能有一种logical block size. 由此可见, JFS2中的logical block size在概念,用处, 用法及默认值大小上都与JFS中的Fragment完全相同, 只是更换了名称而已.
      那么, JFS是如何具体分配lv的空间,如何分配Allocation Group,及Allocation Group中的Fragment的呢? 原来,*JFS把lv分成固定大小(4K)的单元,在JFS中称Fragment,在JFS2中称logical block .每个文件或目录占用1个或多个Fragment(或logical block), lv上的第0个Fragment(或logical block)是LVCB,它和JFS无关,记录的是该逻辑卷的控制信息; 而第1和第31个Fragment(或logical block)是超级块(supper block), 用于保存整个JFS的信息; 第2至第30个Fragment(或logical block)则系统特殊保留的inode*, 两个*号之间的内容,对于JFS2也适用的.
      从第32个Fragment开始后的所有空间,划分为多个Allocation Group,每个Allocation Group由多个Fragment(或logical block)组成, 其中包含inode和数据块,这样inode和它指向的数据块位于一个Allocation Group中,能提高磁盘访问的性能。对于一个新的文件,JFS首先在一个Allocation Group里分配1个inode及数据块,并根据文件大小扩充对该文件的Allocation Group的分配数量.
      紧接在lv上第31个Fragment(或logical block)之后, 第一个allocation group包含lv中的第32至第n个Fragment(或logical block), 这些Fragment(或logical block)分为两部分,其中第32至第m(m个Fragment(或logical block)用于保存第一个allocation group的inode(注意,一个Fragment(或logical block)可保存多个inode),而第m+1至第n个Fragment(或logical block)则保存该allocation group的数据块, 从第n+1个Fragment(或logical block)开始,是下一个allocation group的空间范围.而对于JFS2来说,因为没有了Allocation Group 的概念了,所以从31个Fragment之后,就以logical block为基本分配单元, 动态地为文件分配inode空间和文件数据块空间了.


JFS支持最大为1TB的文件系统和64GB的文件。每个JFS可扩充的上限是不同的,在创建时候由NBPI、fragmentsize和allocation group size参数确定。
NBPI(Number of Bytes Per I-node),每个inode包含的字节数(可认为是文件的平均大小),范围从512到128K,缺省为4K。JFS最多有16M个inode,因此由inode限制的上限为128K*16M=2T。这限制了文件系统尺寸的上限。
fragment size,段尺寸。段是连续的磁盘空间,是在JFS创建文件时分配的最小单元,也是JFS和LVM交互的最小单元(但是磁盘IO总以4KB为单位)。每个文件系统可以有不同的fragment size,在创建后就不能修改。fragment size范围从512字节到4K字节,缺省为4K。JFS在inode中维护段地址,间接块地址为28位,因此由段地址限制的上限为4K*256M=1T。这同时限制了文件系统尺寸和文件尺寸的上限
JFS中普通文件的inode示意图,Data Block也就是fragment,最大为4K。因此文件尺寸上限约为512*1024*4K=2G
JFS大文件inode示意图。大文件inode的二级间接指针的起始4MB空间使用4K的数据块,也就是单个fragment。超过4MB部分使用128K数据块,也就是连续32个fragment组成一个数据块。因此文件尺寸上限约为511*1024*128K,大约为64GB。
综上,JFS的文件系统尺寸上限为1T,普通文件尺寸上限为2GB,大文件尺寸上限为64GB。
以前学JFS时候的一点笔记,不过发现到了JFS2之后就没用了......
JFS2的管理简化了许多
Answer:
只考虑JFS中的情况:
1.文件系统FS按allocation group值(创建FS时指定,默认8M)分配空间, 每个allocation group空间划分为逻辑块, 逻辑块大小为4K, 可再细分为Fragment,每个Fragment大小由Fragment size值规定(创建FS时的指定,默认4K).对吗?
2.逻辑块的大小能指定吗?在那里指定?
3.一个allocation group中可有多个逻辑块存放inode,每个逻辑块存放一个inode,还是多个?因为一个逻辑块大小为4K,一个inode大小仅为128字节.
4.一个allocation group中也可有多个逻辑块用来存放inode指针所指向的文件数据块,就是指的上面所说的逻辑块吗?还是位于逻辑块与fragment之间的一个逻辑概念?这3者的关系是什么?
5.上面说的一个文件数据块是多大?能指定吗?在哪里指定?如果一个文件数据块小于一个逻辑块的大小,那么一个逻辑块也可以存放多个文件数据块吗?
6.每个文件唯一只对应一个inode

(转自:http://www.gzleadcom.com/IBM_jishuziliao/599.html)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值