使用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 机制的具体实现和原理。同时,对于涉及到磁盘操作和系统配置的更改,务必谨慎操作,并确保你了解其潜在影响,最好在测试环境中先进行试验。

相关文章
|
8月前
|
存储 安全 Linux
Android安全启动学习(四):device-mapper-verity (dm-verity)和哈希树
Android安全启动学习(四):device-mapper-verity (dm-verity)和哈希树
386 0
|
安全
SD卡与TF卡的区别
SD卡与TF卡的区别
590 0
|
PyTorch 算法框架/工具
A网络的embedding层的权重参数已经初始化为F了,copy.deepcopy(A)的结果网络也跟着初始化为F了嘛?
A网络的embedding层的权重参数已经通过 self.embedding.weight.data.copy_(pretrained_embeddings)初始化为F,那么 copy.deepcopy(A)的结果网络也跟着初始化为F了嘛?
216 0
|
并行计算 开发工具 C++
CUDA存储单元的使用设备初始化
CUDA存储单元的使用设备初始化
180 0
sda增加磁盘大小扩展的另类方法
利用这种方法可以暴力扩展sda空间
470 0