在 Linux 上模拟 EWF 效果

在 Linux 上模拟 EWF 效果

最近,我被要求在一个嵌入式项目中在 Linux 上进行模拟效果增强型写入过滤器Windows XP Embedded 的 EWF。

具体来说,我需要一种 EWF 来:

  1. 避免在磁盘上写入过多次数(我们使用 CF);
  2. 意外重启/故障/错误更改后保护程序/配置文件。

据我所知,Linux 没有类似 EWF 的功能,而且它在磁盘上的写入量也不如 Windows(见此答案),但我的上司要求我调查一些能够同时满足这两个要求的解决方案。

目前我正在尝试这个简单的战略

  1. 我有一个小分区(挂载点:/safe),其中包含我应该保护的数据/目录(即整个/etc 目录)
  2. 在系统启动期间,我将所有必须保护的目录挂载到 RAM(tmpfs)中,然后将数据从 /safe 复制到其中。
  3. 如果一切顺利,我可以卸载 /safe。如果需要,一个小脚本允许我挂载 /safe 并“提交”对文件的更改(如果需要)。
  4. 我可以强制/只读:我需要的所有程序都在 RAM 中,并且它们正在 RAM 中写入内容。

有什么想法/建议吗?

我在 x86 架构上使用精简版的 Debian Lenny 和 Ext2 格式的分区(顺便问一下,有没有适合这项任务的简单日志记录/COW 文件系统的建议?)。

谢谢。

答案1

按照以下优秀方法解决如何:构建只读 Linux 系统

从两个制造魔法的小脚本中的一个(使用奥夫斯联盟):

ro_mount_point="${rootmnt%/}.ro"
rw_mount_point="${rootmnt%/}.rw"

# Create mount points for the read-only and read/write layers:
mkdir "${ro_mount_point}" "${rw_mount_point}"

# Move the already-mounted root filesystem to the ro mount point:
mount --move "${rootmnt}" "${ro_mount_point}"

# Mount the read/write filesystem:
mount -t tmpfs root.rw "${rw_mount_point}"

# Mount the union:
mount -t aufs -o "dirs=${rw_mount_point}=rw:${ro_mount_point}=ro" root.union "${rootmnt}"

# Correct the permissions of /:
chmod 755 "${rootmnt}"

结果:系统受到保护并且应用程序可以写入其内容(在 RAM 中)。

如果我重新启动而不“提交”,系统上的所有更改都将丢失,但如果我需要某些更改保持永久,我可以重新将分区挂载为读写(这次 r/w 表示“在磁盘上”而不是“在 RAM 上”),执行“提交”并将分区重新挂载为只读。

脚本非常优雅,我还可以通过在 GRUB 中选择正确的标记条目在“受保护”(用于生产)或“不受保护”(用于开发)模式之间切换。

答案2

仅供参考,联合金融服务是 aufs 的另一个替代品,可以做很多相同的事情。流行的 Live Linux 发行版克诺皮克斯使用 UnionFS 将只读 CDROM 文件系统与读写 RAM 专用 tmpfs 文件系统合并。

相关内容