题
我有一些虚拟机。我想编写一个脚本来自动执行以下过程......
- 它将虚拟机(以 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
对我来说解决方案很简单我只是改变了 nbd0
到 nbd1
qemu-nbd -c /dev/nbd1 image.vdi
进而:
sudo mount /dev/nbd1p1 /media/eddie/virtual
工作了。
如果这也适合您以及适用于什么类型的图像,请发表评论。
不隶属于 StackOverflow