io_fs_03

EXT2/3/4的layout

  1. Super block, stoing:

    size and location of bitmaps

    number and location of inodes

    number and location of data blocks

    index of root inodes

  2. Bitmap of indoes

  3. Bitmap of data blocks

  4. Inodes table

  5. Data blocks(4kB each)

EXT2/3/4是以group进行分组的,

superblock记录文件系统的类型、block大小、block总数、free block数、inode大小、inode总数、free inode数、group的总数等,在多个group进行备份

group描述符记录:block bitmap位置、inode bitmap位置、inode表位置、free block、free inode数量

文件系统的一致性

对一个文件增加4k大小,需要对indoes Bitmap、data blocks Bitmap 、Inodes table、Data blocks进行修改。如果只修改了其中几项,突然断电了,文件系统就不一致。

例子:

掉电与文件系统一致性

  1. 任何的软件技术都无法保证掉电不丟数据,只能保证一致性(元数据+数据的一致性 或者 仅元数据的一致性)

  2. dirty_expire_centisecs、DIRECT_IO、SYNC IO的调整,不影响丟/不丟数据,只影响丟多少数据

  3. fsck日志COW文件系统等技术,帮忙提供一致性

fsck

fsck, 全称: file system consistency check

针对早期文件系统,系统重新启动中,使用fsck提供一致性,修复前面的"断电"事故

例子:

日志

针对ext2/ext3/ext4文件系统,对文件系统的修改进行日志管理,提供一致性,从而修复突然断电事故

第一种方法:保存元数据+数据日志(data=journal) - 4个阶段:

  1. jonrnal write

  2. journal commit

  3. jonrnal checkpoint

  4. jonrnal free

第二种方法:只保存元数据日志(data=writeback or data=ordered) - 5个阶段:

  1. data write

  2. journal metadata write

  3. journal commit

  4. jonrnal checkpoint metadata

  5. jonrnal free

Copy On Write

没有日志,用COW实现文件系统一致性

如:针对btrfs文件系统,每次写磁盘时,先将更新数据写入一个新的block,当新数据写入成功之后,再更新相关的数据结构指向新block

文件系统的debug和dump

常用工具:mkfs、dumpe2f、blkcat、dd、debugfs、blktrace

Last updated

Was this helpful?