一、常见的磁盘格式
linux是最传统的磁盘文件系统(filesystem)使用的是EXT2格式,所以要了解 linux 的文件体统就得从认识EXT2开始,而文件系统建在磁盘上的,因此了解物理组成是重点关注的目标。
整颗圆盘由以下部分组成:
- 圆形的磁盘盘(主要记录数据部分);
- 机械手臂,与子啊机械手臂上的磁盘读取头(可擦写磁盘盘上的数据);
- 主轴马达。可以转动磁盘盘,让机械手的读取头在磁盘盘上读写数据 。
- 扇区是最小的物理存储单位,且依据磁盘设计的不同,目前主要有 512 bytes 和 4K 两种格式。
- 将扇区组成一个圆,那就是磁柱(Cylinder);
- 早期的分区主要以磁柱为最小分区单位,现在的分区通常使用扇区为最小区单位(每个扇区都有其码号,就像座位号一样)
- 磁盘分区表主要有两种格式,一种是限制较多的MBR 分区表,一种是较新且限制较少的 GTP 分区表。
- MBR 分区表中,第一个扇区最重要,里边有:(1)主要开机区(master boot record MBR)及分表(partition table),其中MBR 占有446 bytes,而 partition 则占有 64 bytes。
- GPT 分区表除了分区数量较多之外,支持的磁盘容量也可以超过 2TB。
至于磁盘的文件名部分,基本上 ,所有实体磁盘的文件名都已经被模拟成 /dev/sd[a-p] 的格式,第一颗磁盘文件名为 /dev/sda。而分区槽的档名若以第一颗磁盘为例,则为 /dev/sda[1-128]。除了实体磁盘以外,虚拟机的磁盘通常为 /dev/vd[a-p]。
- /dev/sd[a-p][1-128]:为实体磁盘的磁盘文件名
- /dev/vd[a-d][1-128]:为虚拟次磁盘的文件名
知识点总结:
- 一个可被挂载的数据为一个文件系统而不是一个分区槽。
- 文件系统通常会将这两部分的数据分别存放在不同的区块,权限与属性放置到inode中,至于实际数据则放置到dat和 block 区块中。
- superblock: 记录此filesystem 的整体信息,包括inode/block的总量,使用量,剩余量,以及文件系统的格式与相关 的信息等。
- inode:记录文件的属性,一个文件占有一个inode,同时记录此文件的数据所在的block号码。
- block: 实际记录的文件内容,若文件太大时,会占用多个 block。
- 原则上,block 的大小数量在格式化完整后就不能再改变了(除非重新格式化);
- 每个 block 内最多只能够放置一个文件的数据;
二、EXT2/EXT3/EXT4 文件的存取与日志式文件系统的功能
1、如果我们想要新增一个文件或者目录时,我们因该考虑以下问题。
1、先确定用户对于新增的文件的目录是否具有 w 与 x 权限,若有才能新增;
2、根据 inode bitmap 找到没有使用的inode 号码,并将新文件的权限/属性写入;
3、根据 block bitmap 找到没有使用中的block 号码,并将实际的数据写入block 中。且更新 inode 的block指向数据。
4、将刚刚写入的inode 与 block 数据同步更新 inode bitmap 与 block bitmap ,并更suoerblock 的内容。
2、日志式文件系统
1、预备:当系统要写入一个文件时,会再日志记录区块中记录某个文件准备写入的信息;
2、实际写入:开始写入文件的权限与数据,开始更新 medata 的数据;
3、结束:完成数据与metadata 的更新后,在日志区块中完成该文件的记录。