【问题标题】:Why EXT4/JBD2 after mounted keeps calling ext4_journal_stop?为什么 EXT4/JBD2 挂载后一直调用 ext4_journal_stop?
【发布时间】:2018-06-28 12:14:00
【问题描述】:

我正在研究 EXT4 (JBD2) 中使用的日志层,并添加了一些 printk 以查看被调用的 ext4_journal_startext4_journal_stop 函数的行为。

这是程序:

我首先使用以下格式格式化给定的分区:

sudo mke2fs -t ext4 /dev/vdb

(我正在使用 QEMU 来运行这个实验)

然后我挂载它:

sudo mount /dev/vdb /mnt/mydisk

这是正常的挂载过程,但是当我挂载它时,由于我在两个ext4_journal_start/stop 中都有printk's 函数,dmesg 显示很多对journal_stop 的调用而没有任何journal_start

P.S.:我猜应该是EXT4的一些背景行为什么的,但我不知道是什么。

这是dmesg 的输出:

 * Restoring resolver state...                                           [ OK ] 
 * Stopping System V runlevel compatibility                              [ OK ]
[  124.648904] JOURNAL STOP
[  124.778691] JOURNAL STOP
 ...
[... ]  # it is called maybe more than 40 times
 ...
[  129.641895] jbd2_journal_commit_transaction
[  129.769132] JOURNAL STOP
 ...
[... ]  # it is called maybe more than 40 times
 ...
[  134.766164] jbd2_journal_commit_transaction

134 秒后,它会停止这些消息,然后我尝试将一些文件写入该挂载点,它的行为符合预期。

[  624.995549] JOURNAL START
[  624.996849] JOURNAL STOP
[  625.000676] JOURNAL START
[  625.001757] JOURNAL START
[  625.002822] JOURNAL STOP
[  625.003773] JOURNAL STOP
[  631.004110] jbd2_journal_commit_transaction

所以,奇怪的是,在挂载之后,即使我什么也没做,这些函数也被多次调用(journal_stop),此外,在两次提交之后(函数调用jbd2_journal_commit_transactiondmesg变得稳定,然后它遵循预期的行为。

为了清楚起见,我的问题是:是什么原因导致这几个电话无缘无故(ext4_journal_stop)?

【问题讨论】:

    标签: c linux-kernel ext4


    【解决方案1】:

    通过调试ext4源代码,我发现是什么原因导致文件系统挂载后的几个日志操作。

    ext4 正在创建 inode 表,所以这就是为什么在挂载分区后立即多次调用日志的原因。

    【讨论】:

      猜你喜欢
      • 2016-08-11
      • 2015-11-30
      • 1970-01-01
      • 2020-12-30
      • 1970-01-01
      • 2016-05-18
      • 2023-04-06
      • 2013-07-09
      • 2018-07-15
      相关资源
      最近更新 更多