3 个版本
0.1.2 | 2020年7月8日 |
---|---|
0.1.1 | 2020年6月22日 |
0.1.0 | 2020年6月10日 |
#1129 在 文件系统
37KB
736 行
一个用于执行高效 Linux 设备软件更新的实验性工具/服务。
示例用法
- 创建一个软件发布镜像(或您想挂载为块设备的任何内容)。它可以是一个根文件系统镜像(如 ext4/squashfs)或包含多个分区和文件系统的镜像。
- 使用 bita 压缩镜像:
bita compress -i release_v2.ext4 release_v2.ext4.cba
- 将压缩后的镜像上传到某个 http 文件服务。
- 使用 ihop 将镜像克隆到您的设备块存储中:
ihop clone https://server/release_v2.ext4.cba /path/to/chunk/store/release_v2
。 - 使用 ihop 在 NBD(网络块设备)上挂载镜像:
ihop mount /path/to/chunk/store/release_v2 /dev/nbd1
。 - 在某个挂载点挂载并使用您的新文件系统:
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写入分区更脆弱。
挂载块设备
要使用 ihop mount
,内核需要支持NBD(CONFIG_BLK_DEV_NBD
)。尽管名字中包含 'Network',但在这种情况下,它只是让块设备驱动在用户空间中运行的一种方式。
运行 ihop mount
时,NBD块设备将像任何常规(只读模式)块设备一样操作。创建的设备由描述和块文件组成,其中 ihop 在块请求和块文件中查找之间映射。由于块 -> 块映射是在此过程中完成的,因此 ihop 需要运行与设备应挂载的时间一样长。
验证/安全启动
挂载的镜像将是原始发布文件的完美比特克隆(例如示例中的 release_v1.ext4
),因此可以与 dm-verity 或启动时完整检查相结合以进行完整性检查。
依赖项
~23–37MB
~691K SLoC