在Writeback 模式下,只有 inode 数据写入日志,并且无法控制何时写入文件数据。
这一行让我想到了在正常情况下何时将数据写入设备以及何时丢失数据。
在写回模式下,是否有任何选项可以在日志记录后立即将数据强制写入设备,从而保证与有序模式提供的相同安全性?
另外,Writeback 模式和Ordered 模式是否仅基于此进行区分?
在Writeback 模式下,只有 inode 数据写入日志,并且无法控制何时写入文件数据。
这一行让我想到了在正常情况下何时将数据写入设备以及何时丢失数据。
在写回模式下,是否有任何选项可以在日志记录后立即将数据强制写入设备,从而保证与有序模式提供的相同安全性?
另外,Writeback 模式和Ordered 模式是否仅基于此进行区分?
如果我们不详细说明,那么查询的答案是肯定的(至少在像 ext3 这样的文件系统中)。在这两种模式下,只有文件系统元数据被写入日志。回写模式和有序模式之间的区别在于,在有序模式下,文件系统对元数据和相关数据块进行分组,以便在记录元数据之前将数据块写入磁盘,而在有序模式中只记录元数据(并且数据块不会在全部)。
ii. 从实现的角度来看(就 ext3 而言),在有序模式下,对页面中的每个数据缓冲区调用一个附加函数 journal_dirty_data(),以将缓冲区插入到活动事务的适当列表中。JBD 层确保此列表中的所有缓冲区在事务的元数据缓冲区之前写入磁盘。在调用 generic_commit_write( ) 函数之后,该函数将数据缓冲区插入所有者 inode 的脏缓冲区列表中。在回写模式下,不会在数据缓冲区上调用类似 journal_dirty_data( ) 的函数,而只会调用 generic_commit_write( )。