- 主题:求教进程关闭时正在写文件的问题
最近遇到了疑似进程关闭时正在写文件导致文件系统损坏的问题,
网上搜了下,好像是有这个可能。
我的问题是:
1)如何避免这种问题?目前能想到的是,让写文件的处理尽量集中到独立线程中,在析构函数中做处理,要么等写完文件再关闭,要么就提示正在写文件无法关闭请稍后再试。
2)但是掉电怎么办呢?这个理论上无法彻底解决,能做的只有尽量降低写文件的频次和数据量?
PS:编程语言是C/C++和python
--
修改:elephant FROM 114.221.79.*
FROM 114.221.79.*
主要还是加强数据鲁棒性吧,确保部分写文件的操作不会影响其他完整数据
【 在 elephant 的大作中提到: 】
: 最近遇到了疑似进程关闭时正在写文件导致文件系统损坏的问题,
: 网上搜了下,好像是有这个可能。
: 我的问题是:
: ...................
--
FROM 222.128.63.59
掉电,UPS呀
--
FROM 60.1.3.*
不太懂,这个我理解是文件系统的问题。
例如正在写日志文件的时候掉电了,此时怎么确保不会影响日志文件中已经存在的数据呢?
【 在 sweetgun 的大作中提到: 】
: 主要还是加强数据鲁棒性吧,确保部分写文件的操作不会影响其他完整数据
:
--
FROM 114.221.79.*
UPS是掉电场景的不错方法。
那么手动关闭进程的场景,大佬有什么好建议吗?
【 在 fanjiyouyi 的大作中提到: 】
: 掉电,UPS呀
--
FROM 114.221.79.*
捕获退出信号,清理完之后再退出。
【 在 elephant 的大作中提到: 】
: UPS是掉电场景的不错方法。
: 那么手动关闭进程的场景,大佬有什么好建议吗?
--
FROM 117.133.52.*
每次数据写入新文件,当写完后再记录文件里写入完成状态
【 在 elephant 的大作中提到: 】
: UPS是掉电场景的不错方法。
: 那么手动关闭进程的场景,大佬有什么好建议吗?
:
--
FROM 60.1.3.*
比如顺序写出的数据,每条记录有长度标识和结束标识,只写出一半的记录不读就行了;
后来我采用了BerkeleyDB这样的文件数据库来记录数据,它对于文件写到一半、重新读取的问题明显会处理的比自己撸代码好。
【 在 elephant 的大作中提到: 】
: 不太懂,这个我理解是文件系统的问题。
: 例如正在写日志文件的时候掉电了,此时怎么确保不会影响日志文件中已经存在的数据呢?
--
FROM 222.128.63.59
有一类文件系统,可以提供掉电只丢失最后一次写入的内容,而不损坏整个文件的feature,比如LittleFS之类的。
【 在 elephant 的大作中提到: 】
: 最近遇到了疑似进程关闭时正在写文件导致文件系统损坏的问题,
: 网上搜了下,好像是有这个可能。
: 我的问题是:
: ...................
--
FROM 183.173.112.*
【 在 elephant 的大作中提到: 】
: 最近遇到了疑似进程关闭时正在写文件导致文件系统损坏的问题,
: 网上搜了下,好像是有这个可能。
: 我的问题是:
: ...................
程序要做到优雅退出, 如果是服务器或者后台程序, 这是基本要求。
换句话就是, 在程序退出的时候,需要等待,或者提前终止工作任务,
耗时不长的, 就等待, 耗时长的, 尽量终止并保持数据一致。
对于断电的问题, 这个可以不在软件的考虑之列,比较,断电终端的位置随机性太大,
很难做到处处更新逻辑一致性,尽管如此, 对于仅仅数据更新,也可以使用类似数据库写日志的方式, 从而可以redo或者undo, 但这样也会带来磁盘占用额外的容量。
--
FROM 115.171.245.*