背景
嵌入式linux,将信息写入文件,存到磁盘里,异常关机导致数据丢失
处理逻辑:
修改数据时,新建一个文件,将数据写入文件,执行fflush,再执行fsync,再flose,再copy一个备份文件。
问题:
1. 异常关机,文件与备份文件都有损坏的可能
2. 正常掉电,较低概率出现损坏
原因:
1. 执行完fsync返回0后,并未真正将数据写入磁盘,这也是根因,查了资料问了大佬,目前暂未有方案解决。
2. fsync虽然概率性未实时写入,正常掉电测试,2秒后99.9%会写入磁盘,可尝试延时一会儿来规避出错
3. 若当前文件执行完fsync之后,未写入磁盘那么copy的备份文件也是不完整的。所以备份文件用缓存写入,可以降低概率
4. 确保逻辑上写完当前文件写完后再删除旧的备份文件,可以规避写备份文件之前掉电,确保上一个备份文件是对的
总结:可以在逻辑上做一些规避措施降低概率,但是由于无法确保执行完fsync之后数据完整写入磁盘,所以若出现,备份文件执行完fsync之后当前文件还未完全写入,那么久还是会造成数据完全丢失。
如大家有别的方法解决该问题的方法,欢迎纠正。
09-26
2356
06-13