3 个版本

0.1.2 2020年7月8日
0.1.1 2020年6月22日
0.1.0 2020年6月10日

#1129文件系统

MIT 许可证

37KB
736

一个用于执行高效 Linux 设备软件更新的实验性工具/服务。

示例用法

  1. 创建一个软件发布镜像(或您想挂载为块设备的任何内容)。它可以是一个根文件系统镜像(如 ext4/squashfs)或包含多个分区和文件系统的镜像。
  2. 使用 bita 压缩镜像:bita compress -i release_v2.ext4 release_v2.ext4.cba
  3. 将压缩后的镜像上传到某个 http 文件服务。
  4. 使用 ihop 将镜像克隆到您的设备块存储中:ihop clone https://server/release_v2.ext4.cba /path/to/chunk/store/release_v2
  5. 使用 ihop 在 NBD(网络块设备)上挂载镜像:ihop mount /path/to/chunk/store/release_v2 /dev/nbd1
  6. 在某个挂载点挂载并使用您的新文件系统:mount -o ro -t ext4 /dev/nbd1 /my/new/rootfs

压缩和分块

提供给 bita 的镜像(步骤 1)被分割成块,并描述了如何从这些块重建镜像。有关分块过程的更多详细信息,请参阅 bita

克隆

在克隆时,ihop 将检查哪些块已存在于块存储中,并且仅下载和将新的块写入磁盘。与块一起,还会存储重建原始镜像的描述。在上面的示例中,描述将是文件 /path/to/chunk/store/release_v2,而属于发布的块将根据块哈希存储在 /path/to/chunk/store/chunks 下的子目录中。块数据以未压缩的形式存储。

由于 ihop 只会下载和写入当前可用块与新块之间的差异,这使得更新非常快速、低带宽和高效。避免了不必要的网络流量和闪存磨损。这可能会降低块设备的读取速度。也可能比简单的将图像1:1写入分区更脆弱。

chunk-store1

挂载块设备

要使用 ihop mount,内核需要支持NBD(CONFIG_BLK_DEV_NBD)。尽管名字中包含 'Network',但在这种情况下,它只是让块设备驱动在用户空间中运行的一种方式。

运行 ihop mount 时,NBD块设备将像任何常规(只读模式)块设备一样操作。创建的设备由描述和块文件组成,其中 ihop 在块请求和块文件中查找之间映射。由于块 -> 块映射是在此过程中完成的,因此 ihop 需要运行与设备应挂载的时间一样长。

验证/安全启动

挂载的镜像将是原始发布文件的完美比特克隆(例如示例中的 release_v1.ext4),因此可以与 dm-verity 或启动时完整检查相结合以进行完整性检查。

依赖项

~23–37MB
~691K SLoC