用户名
Email
论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
应用中心
帖子
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com技术社区
»
论坛
›
主机系统
›
linux
›
利用Device Mapper创建线性阵列
利用Device Mapper创建线性阵列
尚未崩坏
论坛元老
|
2024-6-29 13:16:27
|
显示全部楼层
|
阅读模式
楼主
主题
1886
|
帖子
1886
|
积分
5658
在之前的文章:《
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更准确);
规范化脚本中利用的一些目录和文件定名。
接下来对脚本进行测试,首先是创建线性阵列:
然后是销毁阵列:
至此,脚本可以作为libvirt hook正常利用,当然,不要忘记修改VM对应的配置,将启动盘设置为/dev/mapper/win10-kvm,如下图所示:
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
尚未崩坏
论坛元老
这个人很懒什么都没写!
楼主热帖
读高性能MySQL(第4版)笔记01_MySQL架 ...
SQL Server向表中插入数据
鸿蒙DevEco Studio3.0——开发环境搭建 ...
容器开发运维人员的 Linux 操作机配置 ...
Redis命令手册
关于对四维空间一些理解
Webpack的使用
Triple 协议支持 Java 异常回传的设计 ...
0基础下载并安装SQLite并新建数据库 ...
.NET现代化应用开发 - CQRS&类目管理代 ...
标签云
集成商
AI
运维
CIO
存储
服务器
浏览过的版块
Nosql
SQL-Server
登录参与点评抽奖加入IT实名职场社区
下次自动登录
忘记密码?点此找回!
登陆
新用户注册
用其它账号登录:
关闭
快速回复
返回顶部
返回列表