4.3EXT2/EXT3/EXT4
4.3.1文件系统
c盘是拿来储文件的,并且必须先把c盘低格为某种格式的文件系统,能够储存文件。文件系统的目的就是组织和管理c盘中的文件。在Linux系统中,最长见的是ext2系列的文件系统。其初期版本为ext2,后来又发展出ext3和ext4。ext3和ext4其实对ext2进行了提高,而且其核心设计并没有发生变化,所以我们仍是以较老的ext2作为演示对象。
1.链式文件系统FAT
2.索引文件系统
4.3.2EXT2
1.BootSector
BootSector,是拿来储存c盘分区信息和启动信息,任何文件系统给都不能缺乏启动块。启动块大小是1KB,是由PC标准定义的。
2.Block
Block就是逻辑块。对于ext2文件系统来说,硬碟分区首先被分割为一个一个的逻辑块(Block),每位Block就是实际拿来储存数据的单元,大小相同,Block根据0,1,2,3的次序进行编号,第一个Block的编号为0。
ext2文件系统支持的Block的大小有1024字节、2048字节和4096字节,Block的大小在创建文件系统的时侯可以通过参数指定,假如不指定,则会从/etc/mke2fs.conf文件中读取对应的值。
原则上,Block的大小与数目在低格后就不能否发生改变了linux系统应用,每位Block内最多只会储存一个文件的数据(即不会出现两个文件的数据被装入同一个Block的情况),假如文件大小超过了一个Block的size,则会占用多个Block来储存文件,假如文件大于一个Block的size,则这个Block剩余的空间就浪费掉了。
[root@localhosttmp]#dumpe2fs/dev/sda1|grep"Blocksize"
dumpe2fs1.42.9(28-Dec-2013)
Blocksize:1024
3.BlockGroup
启动块然后才是ext2文件系统的开始。ext2文件系统将整个分区界定为大小相等的块组(BlockGroup),每位块组由以下部分组成:
lSuperblock(超级块)
lGroupDescription(组描述)
lBlockbitmap(块位图)
lInodebitmap(inode位图)
lInodetable(inode表)
lDataBlocks(数据块)
4.Superblock(超级区块)
(1)Superblock
Superblock是记录整个filesystem相关信息的地方,大小为1024Bytes。虽然上不仅第一个blockgroup内会富含superblock之外,后续的blockgroup不一定都包含superblock,假如包含,也是做为第一个blockgroup内superblock的备份。superblock记录的主要信息有:
nblock与inode的总数
n未使用与已使用的inode/block数目
nblock与inode的大小(block为1,2,4K,inode为128Bytes或256Bytes)
nfilesystem的挂载时间、最近一次写入数据的时间、最近一次检验c盘(fsck)的时间等文件系统的相关信息
n一个validbit数值,若此文件系统已被挂载,则validbit为0,若未被挂载,则validbit为1
(2)查看Superblock
[root@localhosttmp]#dumpe2fs-h/dev/sda1
5.GroupDescription(组描述)
GroupDescription拿来描述每位group的开始与结束位置的block号码,以及说明每位块(superblock、bitmap、inodemap、datablock)分别介于哪一个block号码之间。
6.Blockbitmap(区块对照表)
在创建文件时须要为文件分配block,届时才会选择分配空闲的block给文件使用。通过blockbitmap可以晓得什么block是空的,因而系统就能否很快地找到空闲空间来分配给文件。同样的,在删掉个别文件时,文件本来占用的block号码就要释放下来,此时在blockbitmap当中相对应到该block号码的标志就须要更改成"空闲"。这就是blockbitmap的作用。
7.Inodebitmap(inode对照表)
inodebitmap与blockbitmap的功能类似,只是blockbitmap记录的是使用与未使用的block号,而inodebitmap则记录的是使用与未使用的inode号。
8.Inodetable
Inodetable中储存着一个个inode,inode的内容记录文件的属性以及该文件实际数据是放置在什么block内,inode记录的主要的文件属性如下:
l该文件的读写权限(rwx)
l该文件的拥有者和所属组(owner/group)
l该文件的容量
l该文件的ctime(创建时间)
l该文件的atime(近来一次的读取时间)
l该文件的mtime(近来更改的时间)
l该文件的特殊标示,例如SetUID等
l该文件真正内容的指向(pointer)
inode的数目与大小也是在低格时就早已固定了的linux手机,另外inode还有如下特征:
l每位inode大小均固定为128Bytes(新的ext4为256Bytes)
l每位文件都仅会占用一个inode
l文件系统才能创建的文件数目与inode的数目相关
l系统读取文件时须要先找到inode,并剖析inode所记录的权限与使用者是否符合,若符合才才能开始读取block的内容
9.Datablock
Datablock是拿来储存文件内容的地方。须要注意的是,因为block大小的差别,会造成文件系统才能支持的最大c盘容量和最大单个文件的大小并不相同。
4.3.3数据块轮询
4.3.4文件存取
1.Linux的目录项
当我们在Linux下的档案系统构建一个目录时linux查看文件系统,档案系统会分配一个inode与起码一块block给该目录。其中,inode记录该目录的相关权限与属性,并可记录分配到的那块block号码;而block则是记录在这个目录下的档名与该档名占用的inode号码资料。
2.Linux文件的读取
以读取文件/var/log/message为例,讲解读取文件messages时,从c盘中查找/读取文件内容的过程。
i.首先系统通过挂载信息(在超级块中,位置固定)找到根目录(/)的inode编号,根目录对应的inode是固定的(一般为2号)。
ii.按照根目录的inode编号(2号),在inodetable中找到对应的inode信息,从inode信息中找到储存根目录信息的目录块编号,按照编号找到数据块,如图中标记为‘/’的方格,该目录块储存的信息如图中的dentry所示。
iii.从目录块中储存的信息中,找到文件名(目录名)为var所对应的inode编号(2667711)。
iv.在inodetable中找到编号为2667711的inode信息,从该inode信息中,找到var目录储存的数据块。从var数据块储存的信息中,找到log目录对应的inode编号(267850)。
v.重复上述步骤,直到找到message文件对应的inode结点,按照inode结点中记录的message文件内容对应的数据块,从数据块中读取内容。
4.3.5EXT3
(1)EXT3与EXT2的区别
uext2和ext3的格式完全相同,只是在ext3硬碟最后面有一部份空间拿来储存Journal(日志)的记录;
u在ext2中,写资料到硬碟中时,先将资料写入缓存中,当缓存写满时就会写入硬碟中;
u在ext3中,写资料到硬碟中时,先将资料写入缓存中,鼗缓存写满时系统先通知Journal,再将资料写入硬碟,完成后再通知Journal,资料已完成写入工作;
u是否有Journal的差异:
l在ext2中,系统开机时会去检测有效位(Validbit),假如值为1linux查看文件系统,表示系统下次有正常死机;假如为0,表示先前死机未正常死机,那系统都会从头检测硬碟中的资料,这样时间会很长;
l在ext3中,也就是有Journal机制里,系统开机时检测Journal的资料,来查看是否有错误形成,这样就快了好多;
utune2fs–j将ext2转换成ext3
(2)日志式文件系统(Journalingfilesystem)
u预备:当系统要写入一个档案时,会先在日志记录区块中纪录某个档案打算要写入的信息;
u实际写入:开始写入档案的权限与数据;开始更新metadata的数据;
u结束:完成数据与metadata的更新后,在日志记录区块当中完成该档案的纪录。
4.3.6EXT4
nExt4的文件系统容量达到1EB,而文件容量则达到16TB
n理论上支持无限数目的子目录
nExt4文件系统使用64位空间记录块数目和i-节点数目
nExt4的多块分配器支持一次调用分配多个数据块