文件系统特性:
Linux的正规文件系统为Ext2。其包含三个数据:
super block : 记录此文件系统的整体信息,包括inode/block的总量,使用量,剩余量,以及文件系统的格式与相关信息等
inode: 记录文件的属性,一个文件占用一个inode,同时记录此文件的数据所在的block号码
block: 实际记录文件的内容,若文件太大时,会占用多个block.
Ext2其数据访问方式为索引式文件系统。
Linux的Ext2文件系统(inode)
文件系统一开始就将inode与block规划好了,除非重新格式化或使用resize2fs等命令更改文件系统大小,否则inode与block固定后就不再变动。**文件系统最前面有一个启动扇区,这个启动扇区可以安装引导装载程序。**Ext2格式化后示意图如下:
- data block
data block使用来放置文件内容的地方,在Ext2文件系统中所支持的block大小有1KB,2KB,4KB三种。
原则上,block的大小与数量在格式化完就不能够再改变了。
每个block内最多只能放置一个文件的数据;如果文件大于block的大小,则一个文件会占用多个block数量;如果文件小于block的大小,则该block的剩余空间就不能再被使用了。
- inode table
inode记录的文件数据至少包括:
- 该文件的访问模式(rwx)
- 该文件的所有者与组(owner/group)
- 该文件的大小
- 该文件创建或状态改变的时间
- 最近一次读取的时间
- 最近修改的时间
- 定义文件特性的标志
- 该文件真正内容的指向
特性:
每个inode大小均固定为128bytes;
每个文件都仅会占用一个inode;文件系统能够创建的文件数量与inode数量有关。
系统读取文件需先找到inode,并分析inode所记录的权限与用户是否符合,若符合才能够实际读取block的内容。
inode将记录block号码的区域定义为一个直接,一个间接,一个双间接与一个三间接记录区。
- Superblock
它记录的信息主要有:
- block与inode的总量
- 未使用与已使用的inode/block数量;
- block与inode的大小(block为1K,2K,4K,inode为128bytes);
- 文件系统的挂载时间,最近一次写入数据的时间,最近一次检验磁盘的时间等文件系统的相关信息;
一个validbit数值,若此文件系统已被挂载,则validbit为0,反之为1。
- inode bitmap 则记录那些inode是空的
- block bitmap 记录那些block是空的
文件系统与目录树的关系
目录
当在Linux下的ext2文件系统新建一个目录时,ext2会分配一个inode与至少一块block给该目录。可以使用ls -i来查询inode号码文件
当我们在Linux下的ext2新建一个一般文件时,ext2会分配一个inode与相对于该文件大小的block数量给该文件。目录树读取
从根目录赌气,得到挂载点的inode号码,即目录的inode,再根据该inode读取根目录的block内的文件名数据,再一层层地往下读到正确的文件名。
Ext2/Ext3 文件的访问与日志文件系统的功能
新建一个文件的系统行为:
- 先确定用户对于欲添加的文件的目录是否有w与x的权限,若有的话才添加;
- 根据inode bitmap找到没有使用的inode号码,并将新文件的权限/属性写入。
- 根据block bitmap找到没有使用中的block号码,并将实际的数据写入block中,且更新inode的block指向数据;
- 将刚写入的inode与block数据同步更新inode bitmap与block bitmap,并更新superblock的内容。
当系统在读写文件系统时,发生不正常状态时,会出现数据不一致状态,可以使用日志文件系统来避免。即
1. 预备:当系统写入一个文件时,会先在日志记录块中记录某个文件准备写入的信息。
2. 实际写入: 开始写入文件的权限与数据;开始更新meta data的数据。
3. 结束:完成数据与meta data的更新后,在日志记录块当中完成该文件的记录。
Linux系统使用一个称为异步处理的方式处理磁盘与内存写入速度不一致的问题。
当系统加载一个文件到内存后,如果该文件没有被改动过,则在内存区段的文件数据会被设置为clean的。但如果内存中的文件数据被更改过了,此时该内存中的数据会被设置成dirty.此时所有操作都还在内存中执行,并没有写入到磁盘中。系统会不定时地将内存中设置为Dirty的数据写回磁盘,以保持磁盘与内存数据的一致性。
挂载:将文件系统与目录结合的操作。挂载点一定是目录,该目录为进入文件系统的入口。
整个Linux的系统都是通过一个名为VFS的虚拟文件系统去读取文件系统的。
文件系统的简单操作
- 磁盘与目录容量
df : 列出文件系统的整体磁盘使用量.
du: 评估文件系统的磁盘使用量。
- 连接文件: ln
在Linux下面的连接文件有两种,一种是类似于Windows快捷方式功能的文件,可以让你快速连接到目标文件或目录(软连接,符号连接);另一种则是通过文件系统的inode连接来产生新文件名,而不是产生新文件,称为硬连接(hard link).
- hard link:
只是在某个目录下新建一条文件名连接到某inode号码的关联记录。使用该模式连接文件时,磁盘的空间与inode数目都不会改变。其限制主要是不能跨文件系统,不能连接到目录。
- symbolic link:
symbolic link就是在创建一个独立的文件,而这个文件会让数据的读取指向它连接的那个文件的文件名。会占用掉inode与block.
- 关于连接目录的数量:
当我们新建一个新的目录时,新的目录连接数为2,而上层目录的连接数会增加1。
磁盘分区命令: fdisk
磁盘格式化: mkfs mke2fs
磁盘检验:fsck, badblocks 文件系统出现问题使用的命令
磁盘挂载与卸载 : mount umount
磁盘参数修改: mknod
e2lable: 修改文件系统卷标
haparm:测试硬盘性能
设置开机挂载:
Linux可以直接到/ect/fstab设置开机挂载。
系统挂载的一些限制:
- 根目录/是必须挂载的,而且一定要先于其他挂载点被挂载进来。
- 其他挂载点必须为已新建的目录,可任意指定,但一定要遵守必须的系统目录架构原则
- 所有挂载点在同一时间之内,只能挂载一次;
- 所有分区在同一时间之内,只能挂载一次;
- 如若进行卸载,你必须先将工作目录移到挂载点(及其子目录)之外
cat /ect/fstab查看文件内容如下:
parted命令可以支持高2TB以上的分区。