在没有环回设备的情况下操作文件系统映像文件?

在没有环回设备的情况下操作文件系统映像文件?

我正在尝试在 Docker 虚拟机下自动创建 Raspberry Pi 映像,以便在CIbitbucket-pipelines 等常见系统中运行它。

在物理系统上,我使用“模板”映像,将其分区安装到本地目录,然后用脚本填充它并卸载。为了安装它,我使用如下脚本:

loopdevice=`losetup -f --show -P images/template.img`

echo $loopdevice > loopdevice

mkdir -p images/p1
mkdir -p images/p2
mkdir -p images/p3

mount ${loopdevice}p1 images/p1
mount ${loopdevice}p2 images/p2
mount ${loopdevice}p3 images/p3

(镜像包含3个分区,分别挂载到3个目录)。

不幸的是,如果没有特权,我无法在 Dcoker 容器内使用环回设备,并且我无法使其在 Bitbucket 管道内获得特权。我在这里看到了死胡同。

那么,问题是:是否有任何 Linux 工具可以操作文件系统映像文件而不将它们挂载到环回设备?

答案1

  1. 有一些工具可以根据您的要求来操作文件系统。其中之一就是工具箱包,它支持 FAT 文件系统。另一个是e2工具,它执行 EXT2 和 EXT3 文件系统。这两者都可以在 debian linux 以及其他许多操作系统中使用。
  2. 这些工具可能不会处理分区中的图像。这应该不是问题。只需将模板拆分为分区表和分区内容的单独文件(可能提前),将文件添加到文件系统映像中,然后cat按正确的顺序将各个部分组合在一起以生成最终的磁盘映像。

答案2

我使用并推荐guestfish,这是一部分libguestfs,用于访问和修改虚拟机磁盘映像的库

我发现 OpenStack 的文档包含不需要特权的工具的有用描述:修改镜像 — Virtual Machine Image Guide 文档

请注意,如果您要进行许多不相交的更改,您可能会受益于运行guestfish守护进程并使用其远程控制模式 - 这可以节省(并非微不足道的)启动时间。

guestfish通过插座进行远程控制手册的内容guestfish

相关内容