我有一些虚拟机。我想编写一个脚本来自动执行以下过程......

  • 它将虚拟机(以 linux 作为操作系统)安装到 /mnt/image 位置
  • 它修改 /etc/passwd (或等效文件)以更改用户的密码
  • 卸载虚拟机

因为我使用的是 libvirt,所以我有一些虚拟机的 qcow2 映像。为了将映像安装到我的 ubuntu 上,我使用 nbd 模块。以下是我正在尝试的命令:

modprobe nbd max_part=63
qemu-nbd -c /dev/nbd0 image.qcow2
mount /dev/nbd0p1 /mnt/image

它给了我错误:

mount: special device /dev/nbd0p1 does not exist

当我用 nbdo 替换 nbd0p1 时,出现以下错误(尽管我不确定我要做什么)

mount: you must specify the filesystem type

任何建议,可能是什么问题......?

有帮助吗?

解决方案

[不是对问题的直接答案,而是替代] 您可以尝试将QCOW2图像转换为RAW,然后安装原始图像。

转换:

qemu-img convert -f qcow2 image.qcow2 -O raw image_raw.raw
.

安装:

    sudo losetup /dev/loop0 image_raw.raw
    sudo kpartx -a /dev/loop0
    sudo mount /dev/mapper/loop0p3 /mnt/image
    sudo mount /dev/mapper/loop0p2 /mnt/image/boot
.

其他提示

检查一下 /sys/modules/nbd/parameters/max_part 具有预期值。如果为 0 或太低,则分区 /dev/nbd0p1, , ETC。不会被内核提供。如果 nbd 内核模块已经加载(使用不同的 max_part 参数)当你运行时 modprobe.

您可以通过卸载模块并再次对其进行 modprobing 来解决此问题。

是否该分区不在 MBR 的第一个插槽中,或者正在使用扩展分区?检查一下是否还有其他 nbdXpY 正在创建或运行设备节点 fdisk 在其上和 p打印分区表。

我偶然发现了同样的问题和同样的错误,但在 vdi 上

qemu-nbd -c /dev/nbd0 image.vdi

对我来说解决方案很简单我只是改变了 nbd0nbd1

qemu-nbd -c /dev/nbd1 image.vdi

进而:

sudo mount  /dev/nbd1p1 /media/eddie/virtual 

工作了。

如果这也适合您以及适用于什么类型的图像,请发表评论。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top