利用Device Mapper创建线性阵列
在之前的文章:《QEMU/KVM启动物理分区的Windows并调优》中笔者利用mdadm创建线性阵列,使VM启动物理硬盘分区上的Windows系统。这个做法思路清晰且具有实操性,但根据这个issue,Linux内核上游已将CONFIG_MD_LINEAR编译参数弃置了,这意味着在6.8及以后的内核中将无法利用mdadm创建线性阵列,相干模块已不再被内核包罗,modprobe linear命令将失效。 好在创建线性阵列的方法不止这一种,利用device mapper也可以实现同样的目的。参考这个帖子,这里提供一个新的libvirt hook脚本,利用device mapper动态创建和销毁线性阵列:
#!/usr/bin/env bash
#
# Author: yjzzjy4 (https://github.com/yjzzjy4)
#
# This script creates and distroys /dev/mapper/win10-kvm for booting physical windows drive.
#
WIN_PART=/dev/disk/by-uuid/7CEA3A30EA39E6D4
EFI_DIR=/etc/libvirt/hooks/qemu.d/win10/vdisk
VM_ACTION="$2/$3"
if [[ "$VM_ACTION" == "prepare/begin" ]]; then
if [[ -e /dev/mapper/win10-kvm ]]; then
echo "/dev/mapper/win10-kvm already exists" > /dev/kmsg 2>&1
exit 1
fi
if mountpoint -q -- "${WIN_PART}"; then
echo "Unmounting ${WIN_PART}..." > /dev/kmsg 2>&1
umount ${WIN_PART}
fi
modprobe loop
table=""
cur_size=0
LOOP0=$(losetup -f "${EFI_DIR}/win10-vdisk-loop0" --show)
sector_size=$(blockdev --getsz $LOOP0)
table+="$cur_size $sector_size linear $LOOP0 0\n"
cur_size=$((cur_size+sector_size))
sector_size=$(blockdev --getsz $WIN_PART)
table+="$cur_size $sector_size linear $WIN_PART 0\n"
cur_size=$((cur_size+sector_size))
LOOP1=$(losetup -f "${EFI_DIR}/win10-vdisk-loop1" --show)
sector_size=$(blockdev --getsz $LOOP1)
table+="$cur_size $sector_size linear $LOOP1 0"
cur_size=$((cur_size+sector_size))
echo -e "$table" | dmsetup create win10-kvm
elif [[ "$VM_ACTION" == "release/end" ]]; then
dmsetup remove win10-kvm
losetup | grep "win10-vdisk" | awk '{print $1}' | xargs sudo losetup -d
fi 利用这个hook脚本替代原文中manage-vdisk.sh即可。相较于之前的脚本,做了几个小优化:
[*]利用device mapper创建线性阵列;
[*]利用UUID标识分区(笔者碰到过在某次重启后分区名称发生改变的情况,利用UUID更准确);
[*]规范化脚本中利用的一些目录和文件定名。
接下来对脚本进行测试,首先是创建线性阵列:
https://img2024.cnblogs.com/blog/1498406/202406/1498406-20240629093655914-1158569214.png
然后是销毁阵列:
https://img2024.cnblogs.com/blog/1498406/202406/1498406-20240629093713240-451559804.png
至此,脚本可以作为libvirt hook正常利用,当然,不要忘记修改VM对应的配置,将启动盘设置为/dev/mapper/win10-kvm,如下图所示:
https://img2024.cnblogs.com/blog/1498406/202406/1498406-20240629093745914-471949885.png
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]