繁体   English   中英

EXT4的data=journal模式能否避免用户数据丢失?

[英]Can the data=journal mode of EXT4 avoid user data loss?

  • 日记模式

data=journal 模式提供完整的数据和元数据日志。 所有新数据首先写入日志,然后写入其最终位置。

如果发生崩溃,可以重播日志,将数据和元数据带入一致的 state。 这种模式是最慢的,除非需要同时从磁盘读取数据和将数据写入磁盘,它的性能优于所有其他模式。 启用此模式将禁用延迟分配和 O_DIRECT 支持。

在这里我有几个问题,请看一下:

  1. 配置data=journal,然后用户调用write(),是数据写入journal成功后write()返回,还是进入pagecache后返回用户成功? 如果是后者,就说明journal是异步提交的,那么ext4的journal的意义就是保证文件系统本身的一致性,不保证用户数据不会丢失?

  2. 如果ext4异步提交日志,什么时候触发日志?

  3. 是否有任何其他文件系统允许在 write() 成功返回之前同步日志?

根据我本地实验的结果,推断该期刊应该是异步提交的。 我使用了一个单独的 ssd 分区作为 journal_dev。 我用fio测试写文件的时候发现journal_dev的io是断断续续的,不是一直都有IO。

  1. write() 将在进入页面缓存后返回用户成功(假设您没有在open()上使用任何额外选项)。
  2. 至少定期(参见https://www.kernel.org/doc/Documentation/filesystems/ext4.txt中的commit= )并且可能在任何待处理的sync / fsync等被允许完成之前。
  3. 否(否则它会破坏缓冲点)。

如果您要将O_SYNC传递给open()或进行额外的fsync ,您将了解 kernel 所知的稳定媒体何时写入。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM