gpt4 book ai didi

linux - 进程重启后恢复数据

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:39:52 25 4
gpt4 key购买 nike

我在运行 2.6.3x 内核的基于 x86 的 Linux 系统中有这个要求..

我的进程有一些动态数据(不多,在几兆字节范围内),如果进程崩溃则必须恢复这些数据。显而易见的解决方案是将数据存储在共享内存中,并在进程重新启动时再次读取。必须谨慎地写入共享内存,以免更新过程中的进程崩溃导致共享内存中的数据损坏。

在自己编写代码之前,我只想检查是否有任何开源程序/库提供此功能。谢谢。

-Santhosh.

最佳答案

我认为您提出的设计不合理。操作系统崩溃(例如电源故障等),可能会导致 mmap 区域部分同步到光盘(可能页面的写入顺序与您写入它们的顺序不同等),这意味着您的数据结构将得到以任意方式损坏。

如果您需要您的数据库更改是持久的和原子的(也许一致性和完整性也不会受到伤害,对吗?)那么我强烈建议使用支持 ACID 或适当子集的现有数据库系统。也许 sqlite 或 Berkeley DB 可以解决问题。

原则上,你可以自己做,但不是按照你描述的方式——你需要创建某种日志文件,该文件以一种可以自动读回的方式更新,并且能够从一些已知快照等“重放”事件,这在技术上具有挑战性。

请记住:

  • 操作系统故障可能导致由 msync() 或类似方法启动的写入部分完成到持久磁盘
  • mmap 不保证永远不会在其他时间写回数据,即当您有一段时间没有调用 msync() 时
  • 页面不一定按照您在内存中修改页面的顺序写回 - 例如您可以先写入 a[0],然后再写入 a[4096],并使 a[4096] 经久耐用,但 a[0] 不会在崩溃后发生。
  • 即使刷新单个页面也不能绝对保证是原子的。

我意识到对数据结构的每次读取或写入操作都使用库(例如 bdb 或 sqlite)是一种侵入式更改,但如果您想要这种稳健性,我认为这是必要的。

关于linux - 进程重启后恢复数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8109573/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com