linux ext4 文件系统数据丢失

操作系统: ubuntu 20.04.5 LTS,
内核版本:5.1.120-rt70
硬件平台:arm64

问题现象:使用C++ ofstream文件输出流写内容到制定文件。代码如下所示:

1 #include <fstream> 
2 #include <iostream>
3 ...
4 std::ofstream fs;
5 std::string filename{"test.txt"}
6 int32_t value = 0;
7 fs.open(file_name);
8 if (fs.is_open()) {
9   fs << value;
10  fs.close();
11 }

运行以上代码段后直接重启机器,会发现已经创建好了test.txt文件,但是文件内容是空的,这说明我们及时将文件对象正常关闭,真正的文件内容并不能及时保存到磁盘。

因为业务上依赖于test.txt文件内容。为了保证数据不丢失,在L9到L10之间尝试增加数据流flush()操作,在L10文件close之后增加延时(20s)让系统自动保存。经过一些列努力,文件内容还是没有被保存进磁盘,文件系统在关机中丢失了数据。

进一步考虑使用系统调用sync,但是也没有很好的将数据保存下来。

最后使用更加底层的C函数fsync(), 他可以很好的将数据刷到磁盘。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

言北万

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值