## 文件系统的实现 * Ext2/3/4 的layout * 文件系统的一致性: append一个文件的全流程 * 掉电与文件系统的一致性 * fsck * 文件系统的日志 * ext4 mount选项 * 文件系统的debug和dump * Copy On Write 文件系统: btrfs 预备知识:数据库里的transaction(事务)有什么特性? * 原子性(Atomicity):事务作为一个整体被执行,包含在其中的对数据库的操作要么全部被执行,要么都不执行。 * 一致性(Consistency):事务应确保数据库的状态从一个一致状态转变为另一个一致状态。 * 持久性(Durability):一个事务一旦提交,他对数据库的修改应该永久保存在数据库中。 ### Ext2/3/4 的layout ![](https://box.kancloud.cn/367ec6b65e85a2150933a6d48a0fb200_1418x1006.png) 如上图,任何一个文件,在硬盘上有inode、 datablocks,和一些元数据信息(- 描述数据的数据)。其中,inode的信息包括,inode bitmap 和 inode table。通过inode bitmap和block bitmap来描述具体的inode table 和data blocks是否被占用。inode table包括文件的 读写权限和 指针表。 ![](https://box.kancloud.cn/5eb95c70bd5f9eb830fc7706d98094eb_1218x848.png) Linux对硬盘上一个文件,是分不同角度描述。创建一个文件,包括修改inode bitmap 和 block bitmap的描述。包括修改datablock和 inode bitmap的信息等等。所以“修改文件”这个操作,并不是原子的。所以存在文件系统的执行一致性的问题。 ![](https://box.kancloud.cn/7cd217c43d76c6c2a54f94df30e7706b_1206x820.png) 分Group的好处,在同一个目录下的东西,尽量放在同一个group,用来减少硬盘的来回寻道。 ### 文件系统的一致性: append一个文件的全流程 ![](https://box.kancloud.cn/e97d0f0eb40c8d2beae47be5b3ab364b_1122x670.png)