io_fs_03
EXT2/3/4的layout
Super block, stoing:
size and location of bitmaps
number and location of inodes
number and location of data blocks
index of root inodes
Bitmap of indoes
Bitmap of data blocks
Inodes table
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进行修改。如果只修改了其中几项,突然断电了,文件系统就不一致。
例子:
掉电与文件系统一致性
任何的软件技术都无法保证掉电不丟数据,只能保证一致性(元数据+数据的一致性 或者 仅元数据的一致性)
dirty_expire_centisecs、DIRECT_IO、SYNC IO的调整,不影响丟/不丟数据,只影响丟多少数据
fsck、日志、COW文件系统等技术,帮忙提供一致性
fsck
fsck, 全称: file system consistency check
针对早期文件系统,系统重新启动中,使用fsck提供一致性,修复前面的"断电"事故
例子:
日志
针对ext2/ext3/ext4文件系统,对文件系统的修改进行日志管理,提供一致性,从而修复突然断电事故
第一种方法:保存元数据+数据日志(data=journal) - 4个阶段:
jonrnal write
journal commit
jonrnal checkpoint
jonrnal free
第二种方法:只保存元数据日志(data=writeback or data=ordered) - 5个阶段:
data write
journal metadata write
journal commit
jonrnal checkpoint metadata
jonrnal free
Copy On Write
没有日志,用COW实现文件系统一致性
如:针对btrfs文件系统,每次写磁盘时,先将更新数据写入一个新的block,当新数据写入成功之后,再更新相关的数据结构指向新block
文件系统的debug和dump
常用工具:mkfs、dumpe2f、blkcat、dd、debugfs、blktrace
Last updated
Was this helpful?