第8章 Linux磁盘与文件系统管理
1 磁盘组成与分区:
磁盘由 圆的盘片、磁头、主轴马达 等组成。
盘片主要有:
扇区(Sector)为最小的物理存储单位,每个扇区512bytes
将扇区组成一个圆,就是柱面(Cylinder),是分区的最小单位。
第一个扇区最重要,里面有MBR(主引导记录)、分区表;MBR占446字节,分区表占64bytes。
分区表最多支持4个分区,成为 主primary分区或者 扩展Extended分区。
扩展分区最多有一个;
逻辑分区是由扩展分区分出来的。
能被格式化的只有主分区和逻辑分区。
各种接口的磁盘在Linux 中的文件名为:
/dev/sd[a-p][1-15]:为SCSI、SATA、USB,Flash等接口设备
/dev/hd[a-p][1-63]:为IDE接口的磁盘。
2. 文件系统特性
分区完后之所以要进行格式化,是因为每种操作系统所设置的文件属性权限不相同,为了存放这些文件所需的数据,因此需要将分区进行进行格式化,以成为操作系统能够利用的文件格式。
Linux正规文件系统为Ext2(Linux second Extended file system,Ext2fs),默认情况下,windows是不识别Linux的Ext2文件系统的。
传统情况下,一个分区只能格式化为一个文件系统,也就是一个文件系统就是一个分区。但是新技术的发展,我们常通道LVM与软磁盘阵列(software raid)可以将一个分区格式化成多个文件系统个,,也能够将多个分区合成一个文件系统。目前我们已经不在说针对分区进行格式化了,而是一个可被挂在的数据为一个文件系统而不是一个分区。
Linux较新的文件系统,除了文件数据外还有很多属性,如rwx与文件属性(owner、group、time parameter等)。文件系统通常会将这两部分数据分别存在不同的块,权限和属性放在inode中,数据放在data block中,另外还有个超级快(super block)会记录整个文件系统的整体信息,包括 inode 与 block的总量、使用量、剩余量等。
super block:记录文件系统整体信息,包括inode与block的总量、使用量、剩余量、文件系统的格式与相关信息等。
inode: 记录文件属性,一个文件占用一个inode,同时记录文件数据所在的block。
block: 记录文件的数据,若文件太大,会占用多个block。
这种访问方法称为: 索引式文件系统(indexed allocation)。
3 Linux的Ext2文件系统(inode)
文件系统一开始就将inode与block规划好了,除非重新格式化或者利用resize2fs等命令更改文件系统大小,否则inode与block固定后就不再变动。
在Ext2格式化时是将分区分为多个块组(block group),每个块组都有独立的inode/block/super block,文件系统最前面有一个启动扇区(boot sector),这个启动扇区用来安装引导装载程序的。
每个块组有6个主要内容组成:
data block:
在Ext2中支持的block大小有1kb、2kb、4kb三种,在格式化时block大小就固定了,且每个block都有编号,以方便inode的记录。block大小决定文件系统能支持的最大单一文件大小如下:
inodetable:
inode记录的文件数据有以下几个:
该文件的访问模式(rwx);
文件所有者与组(owner、group);
文件大小;
文件创建或者状态改变的时间(ctime)
最近一次读取时间(atime);
最近修改时间(mtime);
定义文件特性的标志flag,如SetUID等
该文件真正执行的数据内容;
inode的数量和大小在格式化时就已经确定了,
每个inode大小均为128bytes;
每个文件占有一个inode;
文件系统能够创建的文件数量和inode的数量有关;
系统读取文件时先找到对应的inode,分析inode所记录的权限与用户是否符合,若符合才能开始读取指向的block块。
inode/block与文件大小的关系:
inode结构如下:
inode有12个直接指向、1个间接、一个双间接和一个三间接记录区。
假如1k的block,每条block记录需要4bytes,因此1k的block可以记录256个block记录。
super block:
记录的信息主要有:
block与inode的总量;
未使用与已使用inode、block的数量
block与inode的大小(1k、2k、4k; 128bytes);
文件系统的挂载时间、最近一次写入数据的时间、最近一次检查磁盘(fsck)的时间等文件系统相关信息;
一个validbit数值,表示文件系统是否被挂载。
一般来说,superblock大小为1024bytes。相关信息可以用dumpe2fs命令来查看。
文件系统描述(file system description):
用来描述每个block group的开始与结束block 号码,以及每个区段的superblock inode block 分别位于哪个block之间;
block bitmap:
用来记录那些block用过,那些block未用。
inode bitmap:
记录inode的使用与未使用情况。
dumpe2fs [-bh] 设备文件名
-b:列出保留为坏道的部分
-h:列出superblock的数据,不会列出其他的区段内容。
df :这个命令调出目前挂载设备
4. Ext2/Ext3文件访问与日志文件系统:
一般来说,将inode table和data block成为数据区域,将其他区域成为metadata(中间区域)。
日志文件系统:
1:预备,当系统写入一个文件中,现在日志记录总记录够格文件准备要写入的信息。
2:实际写入:开始吸入文件权限和数据,开始更新meta data数据
3: 结束:完成数据与meta data更新,在日志记录块当中完成该文件的记录。
这样当断电等,系统只要检查日志记录块就知道那些文件出现问题,针对该问题再进行一致性检查。
5 Linux文件操作:
当系统加载一个文件到内存中,如果该文件没有被改过,则在内存区段的文件数据会设置为clean;如果发生改过,此时内存中的数据会被设置成dirty,系统会不定时的将内存中设置为dirty的数据歇会磁盘,保持磁盘与内存数据的一致性。
可以利用sync命令强制内存中dirty的文件写回到磁盘。