什么文件系统可以提供最好的保护来防止数据因断电而损坏?

mat*_*975 9 filesystems embedded data-recovery

我运行一个小的uClibcbusybox一个x86设备上基于嵌入式系统。我正在使用 initramfs,但我还在ext3IDE 模式下的紧凑型闪存设备上安装了一个自定义目录,我用它来存储由自定义编写的 C++ 应用程序创建的持久测量日志记录数据。我选择了ext3文件系统,因为在我读过的几本书(Karim Yaghmour 的《构建嵌入式 Linux 系统》和Christopher Hallinan 的《嵌入式 Linux 入门》)中,在 IDE 模式下使用 CF 驱动器时,建议使用它来防止断电。这一点尤为重要,数据至关重要。

但是,由于我之前的问题混淆了如果在文件写入过程中发生断电,如何恢复损坏的 ext3 文件中的一些评论,看来实际上该文件系统并没有提供针对因电源造成的数据损坏的安全保证损失。所以我想知道是否

  1. 是否ext3实际上是这个设置的最佳选择?
  2. 磁盘写入操作期间断电是否只会损坏我定期附加到文件的数据部分,还是会损坏整个文件?
  3. 断电时写入的数据是否完全安全?特别是,我的initramfs.cpio文件是否也有损坏的风险?
  4. 有什么方法可以在我的应用程序代码中使用来保护数据(即创建一个额外的分区并将我的数据写入镜像,以便始终有 2 个副本)-速度对于我的应用程序来说不是一个真正的问题,如此昂贵的复制操作是可以接受的。

我已经看到并阅读了这个相关问题的答案:日志文件系统是否保证在断电后不会损坏?,但它并没有完全涵盖一些让我感到困惑的事情。

我意识到我问了很多问题,但似乎尽管阅读了很多材料,但我从根本上无法理解断电时我的数据所面临的风险。

Ale*_*ios 11

与所有与安全相关的事情一样,没有任何保证,但您还需要平衡风险(和成本)与概率。根据经验(自黑暗时代以来我一直在运行数十个 *nix boxen),我从来没有真正遇到过严重的电源导致的文件系统损坏。

其中一些机器甚至运行在非日志文件系统(通常是 ufs 和 ext2)上。其中一些是嵌入式的,还有一些是像诺基亚 N900 这样的手机——因此根本无法保证良好的电源供应。

并不是说文件系统损坏不会发生,只是它发生的概率足够低,您不必担心。尽管如此,没有理由不对您的赌注进行对冲。

回答你的字面问题:

  1. 至少您引用的第一本书是以前写的ext4——当作者建议使用 时ext3,他们实际上是在说'不要使用不稳定或非日志文件系统,如ext2')。试试吧ext4,它已经很成熟了,并且有一些不错的非旋转磁盘选项,可以延长闪存设备的预期寿命。
  2. 它可能会丢失最后一两个块,而不是整个文件。对于日志文件系统,这将是唯一的损失。在某些故障场景中,我可以看到随机数据散布在文件中,但它们看起来就像微陨石直接通过您的嵌入式设备粉碎一样。
  3. 参见 2。没有什么是 100.00% 安全的。
  4. 如果您有第二个 IDE 通道,请在其中插入第二个 CF 卡并定期获取文件系统的备份。有几种方法可以做到这一点:rsync, cp dump, dd, 即使使用md(4)(软件 RAID)设备(偶尔添加第二个驱动器,让它同步,然后将其删除——如果这两个设备一直处于活动状态,则它们运行相同的风险文件系统损坏)。如果您使用 LVM,您甚至可以抓取快照。对于数据收集嵌入式设备,我只使用临时解决方案,它安装第二个文件系统,复制数据日志,然后立即卸载它。如果您担心设备具有良好的启动映像,请将启动管理器的第二个副本和所有必要的启动映像粘贴到第二个设备上,并将计算机配置为从任一 CF 卡启动。

    我不会相信同一设备上的第二个副本,因为存储设备比稳定的文件系统更容易出现故障。很多更多的时候,在我的经验,到目前为止(在工作中,人们为周五下午磁盘故障惊人地高的机会苦半玩笑。这几乎是一会儿每周的事件)。无论磁盘是否在旋转,它都可能出现故障。因此,如果可以,请将鸡蛋放在两个篮子中,这样可以更好地保护您的数据。

    如果数据特别敏感,我会定期访问设备,将备份 CF 更换为新的,然后重新启动,让它的fsck所有文件系统保持良好状态。