使用Device Mapper创建线性阵列

简介: 【7月更文挑战第3天】这是一个用于创建和销毁Device Mapper线性阵列的bash脚本,用于KVM中模拟Windows驱动器。脚本检查/dev/mapper是否存在指定阵列,卸载挂载点,使用losetup分配loop设备,通过dmsetup创建线性映射,并在释放时移除阵列和释放loop设备。需设置Windows分区UUID和相关目录路径,以root权限运行,如sudo ./create_linear_array.sh prepare/begin来创建,sudo ./create_linear_array.sh release/end来销毁。

以下是一个使用 Device Mapper 创建线性阵列的示例脚本:

#!/usr/bin/env bash
# author:yjzzjy4(https://github.com/yjzzjy4)
# 这个脚本用于创建和销毁 /dev/mapper/win10-kvm,用于启动物理 Windows 驱动器。
win_part=/dev/disk/by-uuid/7cea3a30ea39e6d4  # 替换为你的 Windows 分区的 UUID
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 已经存在" > /dev/kmsg 2>&1
        exit 1
    fi
    if mountpoint -q -- "${win_part}"; then
        echo "正在卸载 ${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


使用上述脚本创建线性阵列的步骤如下:


  1. 将上述脚本保存为一个可执行文件,例如create_linear_array.sh
  2. 确保你已经安装了losetupblockdev工具。如果没有安装,可以使用相应的包管理器进行安装,例如在 Debian/Ubuntu 系统上使用apt-get install util-linux命令安装blockdev工具。
  3. 确定要用于创建线性阵列的 Windows 分区的 UUID,并将其赋值给变量win_part
  4. 根据实际情况设置efi_dir变量,即用于存放相关虚拟磁盘文件的目录。
  5. 运行脚本时,需要传入两个参数,第一个参数是操作类型,可以是prepare/begin表示创建线性阵列,或者release/end表示销毁线性阵列;第二个参数通常可以为空。


例如,要创建线性阵列,可以执行以下命令:

sudo./create_linear_array.sh prepare/begin


要销毁线性阵列,可以执行:

sudo./create_linear_array.sh release/end


请注意,在实际使用中,可能需要根据你的系统配置和需求进行适当的调整。此外,确保以 root 权限运行脚本,以获得足够的权限来执行相关的设备操作。

另外,关于 Device Mapper 的更多详细信息和复杂用法,可能需要进一步参考相关的文档和资料,特别是 Linux 内核中的 Device Mapper 机制的具体实现和原理。同时,对于涉及到磁盘操作和系统配置的更改,务必谨慎操作,并确保你了解其潜在影响,最好在测试环境中先进行试验。

相关文章
|
4月前
|
存储 安全 Linux
Android安全启动学习(四):device-mapper-verity (dm-verity)和哈希树
Android安全启动学习(四):device-mapper-verity (dm-verity)和哈希树
283 0
|
固态存储 Linux 内存技术
浅析PCI配置空间
每个Function都有一个大小为4KB的configuration space。在系统上电的过程中,在枚举整个PCI Bus之后,就会将所有的BDF的configuration space读到Host内存中。在Host内存中有一个大小256MB的Memory Block, 专门用来存放所有的configuration space.
sda增加磁盘大小扩展的另类方法
利用这种方法可以暴力扩展sda空间
442 0
|
调度 数据中心
10GBase-SR,LR,LRM,ER,ZR分别代表哪个SFP+光模块?
今天给大家介绍常见的10GBase-SR、10GBase-LRM、10GBase-LR、10GBase-ER和10GBase-ZR这五种以太网规范分别代表哪个SFP+光模块? 10G SFP+双纤系列光模块包括SR、LRM、LR、ER、ZR模块,它们的接口类型都是LC双工,且符合IEEE802.3ae、SFF-8472和SFF-8431标准,易天光通信ETU-LINK作为专业光模块制造商,接下来为大家详细分析这几种光模块。
5098 0
|
存储 监控 数据中心
干货:25G SFP28 SR光模块知识分享
通常在数据中心部署网络时需要考虑的到成本和节能这两方面,因为40G光模块和100G光模块的相对较高、功耗过大,而10G光模块的速率满足不了网络需求,25G SFP28光模块的诞生,不仅可以弥补了这三者之间的不足,而且可以整体提高了网络的端口密度、减少部署成本,有效降低功耗。
6695 0