我在运行内核v3.4.34和rpm-5.4.9的嵌入式x86 Linux系统上将默认的RPM数据库更改为Berkeley;而事先我的系统运行的是内核2.6.34和rpm-5.1.9,默认的RPM数据库是SQLite。 我开始看到有关电源拉动的RPM数据库故障的报告。所以我想知道这个论坛上的专家是否在这个使用Berkeley而不是SQLite的领域有任何关于需要断电的系统的数据或建议?
在我的研究中,我遇到了以下手册页:Berkeley DB recoverability
我还发现“Berkeley DB使用与市场上最流行的企业关系系统相同的数据完整性和故障恢复技术,并且能够提供相同的可靠性保证。这些服务(包括两阶段锁定和预写日志记录)使Berkeley DB能够在不丢失数据的情况下承受系统故障。系统重新启动时的恢复处理可确保恢复所有已提交的数据库更新并使其可用,并且回滚任何中断的工作,以使其不会出现在数据库中。“
如果这是正确的,那么我们遇到的问题可能是Linux文件系统(ext4)和底层存储硬件(eMMC)之间的接口。
eMMC规范规定,在正常数据可靠性模式下运行时,存在以下风险:先前写入的数据可能因电源中断等意外事件而被破坏。说完这个,我不太确定这是不是我在测试中观察到的。鉴于条件相同,为什么SQLite在这方面会更好?
答案 0 :(得分:0)
是:rpm-5.4.9使用Berkeley DB事务,并且在下次重新打开rpmdb时应完全自动恢复(并丢弃未提交的事务)。如果您使用RPM + SQLITE,则情况并非如此。您使用的是BDB还是SQLITE?您是否希望使用BDB(推荐)或SQLITE?
我不完全理解为什么你认为ext4和eMMC之间存在联系?你在使用闪存吗?已经报告了在eMMC上运行RPM + BDB的许多问题。 BDB和eMMC的可靠性完全不同,具有不同的解决方案路径。
我不确定你在问什么“...... SQLite出来更好......”因为BDB与SQLITE的可靠性是一个与磁性与闪存存储完全不同的问题。