认识EXT2文件系统
说明:红色为重要知识点和名词,蓝色为注释,黄色为Linux命令;
硬盘组成与分区
1. 圆形的盘片 #主要用来记录数据的部分
2. 机械手臂和机械手臂上的磁头 #用来读写盘片上的数据
3. 主轴上的马达 #可以转动盘片,让机械手臂的磁头在盘片上读写数据
4. 扇区 #最小的物理存储单位,每个扇区为512bytes
5. 柱面 #就是扇区组成的一个圆,柱面是分区的最小单位
6. 第一个扇区最重要,有硬盘主引导记录(MBR,446bytes)及分区表(64bytes)
7. 为什么只可以分4个主分区或扩展分区,因为一个分区需要一个分区表,一个分区表占64bytes,所以最多可以有4个主分区或扩展分区;
8. 扩展分区可以再分逻辑分区,而能被格式化的只有分区与逻辑分区,扩展分区无法格式化;
9. 逻辑分区数量:Linux中,IDE硬盘接口的最多有59逻辑分区(5—63号),SATA硬盘则有11个逻辑分区(5号到15号);###关于IDE、SATA、ATA、SCSI接口,请看注1;
文件系统特性
1. 分区格式化 #格式化就是在磁盘中写入文件系统,现在Linux常用的是Ext4格式;
2. 文件系统的运行 :文件系统通常会将这两个部分的数据分别存放在不同的块,权限与属性放置到inode中(一个文件占用一个inode),实际的数据放到datablock 中,超级块(superblock)会记录整个文件系统的整体信息:inode、block的数量、使用量、剩余量;
3. 数据访问的方式:通过先访问inode然后再读出block的内容,使用的是索引式文件系统;
4. 磁盘的碎片整理:整理碎片的原因是文件的写入太过于离散了,此时文件的读取性能将会变得很差。
Linux的EXT2文件系统(inode)
1. 文件系统将inode和block初始是就规划好了,如果想要改变就需要格式化分区;
2. 为什么分区中要有多个块组(block group):因为文件系统太大的时候,因为inode和block的数量太大不容易管理,每个块组中都有独立的inode、 datablock、superblock系统;
3. 为什么可以一个硬盘上可以安装多个系统(也就是多重引导的环境):文件系统最前面有一个启动扇区,这个启动扇区可以将不同的引导装载程序安装到别 的文件系统最前端,不用覆盖整块硬盘的唯一MBR;
对于每个组块,有6个主要部分
a. data block: 1. 存放数据的地方,EXT2支持block块的大小有1kb、2kb、4kb;注2;
2. 每个block可以放一个文件数据;
b. inode table: 1. 记录了文件的访问模式、所有组、大小、创建和改变的时间、指向的内容
2. 每个inode大小为128bytes,每个文件只会占用一个inode,因此文件系统能够创建的文件数量与inode的数量有关;
3. 文件系统将inode记录的block号码的区域定义为12个直接、一个间接、一个双间接与一个三间接记录区。
4. 为什么需要将inode记录block号码的区域分开:因为一个inode的大小为128bytes,而inode记录一个blocks需要4bytes,当文件有400M时, 就需要10万*4bytes的空间,远远大于128bytes,所以采用inode不同的记录区;
5. 为什么文件系统采用1k的block方式最大的单一文件为16GB:12+256+256*256+256*256*256(K) = 16GB;
c. superblock 1. 记录block与inode的总量,未使用与已使用的inode、block数量,文件系统挂载的时间,最近写入数据的时间等
2.validbit,如果此文件系统被挂载,valid bit为0,否则为1;
3.superblock的大小为1024bytes;可以使用命令dumpe2fs查看;
d. 如何使用dumpe2fs查看superblock:df #查看当前挂载的设备
dumpe2fs /dev/磁盘设备名
目录树
1. 如果在文件系统建立一个目录,Ext2文件系统会分配一个inode与至少一块的block来记录该目录的相关权限和属性,并记录分配到的那个block块的号码;如果文件文件过大inode不够记录这个文件的相关数据,就会再分配一个block块给inode;
查看目录内的文件所占用的inode的号码命令:
ls –li
查看指定目录文件所占用的block块命令
ll –d / /bin /boot
2. 我们在新建一个文件时文件系统会给我们分配一个inode与相对应文件大小的block数量,如果文件大于12个block块的话,文件系统就会多给一个block块来作为块号码的记录;
3. 文件系统最上层的inode号码是由2开始的,所以一般根目录的inode为2;
4. 文件的读取过程
例如我想要读取/etc/passwd这个文件
先使用命令:
ls –di / /etc /etc/passwd #查看各目录的inode
根据挂载点的信息找到/dev/hdc2的inode号码为2,然后找到/的inode读取里面的权限和/的inode号码,然后再根据inode号码在向下找,直到读取这个文件;
文件的日志文件系统
1. 新建一个文件,先确定用户对于添加文件的目录是否具有w与x的权限;
再根据inodebitmap找到没有使用的inode号码,并将新文件的权限/属性写入;
根据blockbitmap找到没有使用中的block号码,将实际的数据写如进去,更新inode的block指向;
同步更新inodebitmap 与 block bitmap,并且更新superblock的内容。
2. inode table称为数据存放区域,superblock、block bitmap、 inode bitmap等区称为中间数据;
3. 日志文件系统:他的用处就是为了操作系统、硬件造成的文件写入错误,减少数据检查的时间;
预备:当系统写入一个文件是,会先在日志记录块中记录某个文件准备写入的信息。
实际写入:开始写入文件的权限与数据,开始更新meta data的数据。
结束:完成数据与metadata的更新后,在日志记录块当中完成盖文建的记录。
处理文件在内存中的活动
1. 为了解决文件在磁盘的写入速度比内存慢的多的问题,经常需要耗时在等待读取与写入;Linux采取了异步处理的方式;
一个文件加载到内存中,如果该文件没有被改变,将会设置为(clean);如果有改动,内存的数据会被设置为Dirty,此时的操作都在内存中,并没有写入到磁盘中,系统会不定时的加载到内存中;
2. 系统会将常用的文件数据放到主存储器的缓冲区,加快文件系统的读写速度;
3. 若正常关机时,关机命令会主动调用sync来将内存的数据写入磁盘中。
4. 为什么强制关机会造成系统的崩溃:因为不正常的关机,如断电、死机、等其他原因造成内存中的数据没有回写到磁盘中,造成重新启动系统后会花很长时间去 检验磁盘,若一些重要文件没有写入到磁盘中,比如操作系统的引导文件等丢失,造成系统崩溃;
挂载点的意义
1. 文件系统与目录树结合的操作称为挂载,就是为了让文件系统链接到目录树才能被我们使用。
2. 挂载点一定是目录,该目录是该文件系统的入口;
3. 查看目录的的inode号
命令:ls –lid / /boot /home
文件系统最顶层的,目录的inode一般为2号;
4. 为什么一个文件需要占用一个inode:因为我们可以通过判断inode号码来确认不同的文件;
Linux支持的文件系统与VFS
传统的文件系统:ext2/minix/MS-DOS/FAT/ios9660
日志文件系统:ext3/ReiserFS/Windows’NTFS/IBM’Sjfs/SGL’Sxfs
网络文件系统:NFS/SMBFS
如何查看Linux支持的文件系统
命令:ls –l /lib/modules/$(uname -r)/kernel/fs
如何查看系统中加载的文件系统:
命令:cat /proc/filesystems
VFS(虚拟文件系统):他在内核中,是内核的一个功能,为了管理文件系统;
管理过程:1. 用户进程;
2.到内核中,系统调用界面,然后使用VFS,操纵文件系统,到缓存中,在到设备驱动程序;
3.硬件层,磁盘设备控制器;
总结:所有的分区、inode、目录树、block块组,都是为了更快更方便的操作(查找,读取,写入);
注释
注释1:IDE:IDE接口,也称之为ATA接口;是曾经主流的硬盘接口,也是光储类设备的主要接口。
SCSI: 小型计算机系统接口, 一种用于计算机和智能设备之间(硬盘、软驱、光驱、打印机、扫描仪等)系统级接口的独立处理器标准。
SATA:SATA是Serial ATA的缩写,即串行ATA。它是一种电脑总线,主要功能是用作主板和大量存储设备(如硬盘及光盘驱动器)之间的数据传输之用。
ATA: ATA/ATAPI接口的驱动器也习惯上叫增强IDE(EIDE)接口驱动器,它是在IDE接口上的扩展。
2.