我想知道的是 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"
。