我正在尝试从 ext4 文件系统创建更新映像,该映像应仅包含更改的文件。所以基本上我有一个带有 ext4 根文件系统的 Debian 发行版。我想从中创建一个基础映像 A,然后安装更新(例如 apt update)。更新后我想创建另一个图像 B。有没有办法通过比较图像 A 和图像 B 之间的更改来创建“差异图像”,这样我就不必一直复制完整的图像 B?原因是最终映像应安装在另一台设备上,并且所有更改都应复制(将其视为使用第一台设备更新的更改来更新第二台设备)。
答案1
我不认为“差异图像”会像您希望的那样在文件系统级别工作。文件/目录、元数据校验和(在较新的系统上)、日志块等的放置中存在太多变量,这使得无法从一个文件系统获取块级差异并将其应用到另一个文件系统即使两个文件系统最初是相同的。如果有过任何在正常使用期间对第二个文件系统进行修改,然后应用块级diff 会损坏第二个文件系统。在某些情况下,损坏可能很小(例如,超级块或组描述符中的空闲块/索引节点计数不一致),在其他情况下,可能会出现严重损坏(例如,不正确的位图、日志块等)。
更实用的是使用文件级别diff,本质上是“rsync”(或其并行版本),并且不是特定于 ext4 的。您可以在升级期间在文件系统上使用 fsnotify 观察程序来生成所有已修改文件的列表,从而无需进行完整的文件系统扫描,从而加快 rsync 过程。