使用 KVM/Qemu 是否可以为来宾伪造完整的磁盘布局?

使用 KVM/Qemu 是否可以为来宾伪造完整的磁盘布局?

我想知道的是 QCOW2(或任何其他格式)是否允许我伪造物理范围,以便我可以混合和匹配文件作为后备存储和分区。

也就是说,如果我有一个物理磁盘/dev/sda2,我希望来宾使用(当然,排他地),是否可以准备某种磁盘映像,其中包含其上的内容/dev/hda{1..4}以及/dev/sda2来自主机的内容比如说,出现/dev/hda1在来宾内部,磁盘映像中的其他分区将由文件(或自动增长的)磁盘映像本身支持。

kpartx本质上,我需要的可以通过(仅想象一种可能的方法)提供分区表和使用类似或之类的工具设置的图像来实现losetup,因为一旦我可以使用kpartx/ ,losetup事情应该相当灵活。

那里有类似的东西吗?

答案1

你可以这样做,但这并不是我真正推荐的。

以下是使用四个小磁盘映像文件的示例,您可以安全地使用它们进行实验。您可以根据需要用真实设备替换其中任何一个。

# Create four empty disk image files
dd bs=1M count=1 </dev/zero >img.1
dd bs=1M count=100 </dev/zero >img.2
dd bs=1M count=100 </dev/zero >img.3
dd bs=1M count=1 </dev/zero >img.4

# Convert them into block devices
losetup /dev/loop1 img.1
losetup /dev/loop2 img.2
losetup /dev/loop3 img.3
losetup /dev/loop4 img.4

# Build the array. There is no metadata written anywhere that records the array
# construction - you really are on your own with this one if it goes wrong
mdadm --build /dev/md0 --level linear --raid-devices 4 /dev/loop1 /dev/loop2 /dev/loop3 /dev/loop4

# Create partition table
# This should match the sizes of the image files (above)
parted --align none /dev/md0 <<'x'
  unit MiB
  mklabel gpt
  mkpart primary 1 101
  mkpart primary 101 201
  mkpart primary 201 100%
  quit
x

复合线性“磁盘”开头和结尾的 1MB 分区用于存储 GPT(写入两个)。两个 100MB 分区代表您的数据。

注意RAID0和LINEAR并不相同; RAID0 将数据条带化到所有“磁盘”上,而 LINEAR 只是将“磁盘”连接在一起。

在实际代码中,您不应依赖/dev/loop1可用的 等。相反,使用类似的东西lo1=$(losetup --show --find img.1),然后将循环设备引用为"$lo1"

相关内容