File system IO可靠性

转载请附本文链接:https://blog.csdn.net/maxlovezyy/article/details/100254353

怎么能写出可靠地数据持久化引擎?假如你是基于VFS来做,那么下面这几点posix规范下的问题点很重要。

  1. 保证持久化的话,需要调用fsync。但也不是百分百OK,fsync只能保证数据到达了disk,由于disk有缓存,如果是write back(写缓存异步刷)而非write through(直写持久化)的策略,断电是不一定持久化了的。但企业硬盘特别是RAID卡一般都有备用保护电池。另外,也有指令刷缓存,ext4默认会保证刷缓存。所以ext4的fsync是安全的,别的不一定需要调查。
  2. close无论是c标准库的还是posix的都是不安全的,默认没有数据会在close前持久化的语义。
  3. 新建一个文件,写一些数据fsync之后不代表文件就一定存在了。它本身确实存在了,但不一定能被索引到,因为其父目录的目录项可能还在缓存中没有持久化。所以想百分百保证这个文件的持久化需要fsync其父目录一下。
  4. rename一个文件,系统调用成功了不代表父的目录项元数据真的持久化了,需要fsync其父目录才行。

转载请附链接:https://blog.csdn.net/maxlovezyy/article/details/100254353

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值