📄 日志系统.txt
字号:
any problems, send mails to sindybear@163.com
(1)整个文件系统只有一个journal,使用函数ext3_get_journal按照一定的inode号计算出来的inode。
(2)日志inode中的第一个块,也就是0数据块存储日志的superblock。见journal_init_inode(journal.c)
***********************日志系统的启动流程*********************************
ext3_read_super---->ext3_create_journal
ext3_get_journal----->journal_init_inode
journal_create(jouranl_load)---->journal_reset
journal_start_thread(启动日志)
在启动的过程中,有两种情况,一种是第一次生成一个日志,使用journal_create,一种情况
是原来已经有日志了,这就使用journal_load把它从日志区中读出来。
不管使用哪一种方法,都要调用journal_reset,也就是都要讲日志区清空。从头开始。
***************************************************************************
***********************日志的读写流程************************************
一个transaction的读写流程如下:
(1)
想磁盘上写一个header,包含一定的magic,sequence-number。block-type设置为JFS_DESCRIPTOR_BLOCK
(2)
在这个header后面紧接的地方,范围到这个设备块的尾部,存放tag信息。
(3)
在这些信息的后面存放真正的meta-data信息。
(4)
在这个transaction全部提交完以后,结束的尾部,在写一个512个字节,也就是一个扇区的数据,
其中仅仅包含一个header结构。其中sequece-number和前面的一样.
block-type设置未JFS_COMMIT_BLOCK,标记具有同样sequence-number的一个transaction结束。
这里要强调一点,为什么是一个扇区,是因为硬盘即使断电,也可以保证最后一个整扇区的数据
被完全写入。所以,不能超过一个扇区。
*************************************************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -