• qcow2等格式镜像磁盘冷访问


    1. 环境

    本文适用于在不启动虚拟机的场景下,想修改镜像里面的内容,比如chroot安装软件,拷贝文件进去等等。
    环境信息如下:
    HOST OS:Kylin-Server-10-SP1-Release-Build20
    镜像:centos-7.6.qcow2和kylin-v10-arm64-minimal-20210603.qcow2


    2. qcow2等格式镜像磁盘冷访问

    2.1 加载NBD模块

    对于Kylin Server V10系统默认集成了nbd模块

    modprobe nbd nbds_max=64
    
    • 1

    若是centos系统,需要编译nbd模块,附上centos 7.6上nbd模块编译内容如下:

    yum install kernel-devel kernel-headers gcc automake
    wget http://vault.centos.org/7.6.1810/os/Source/SPackages/kernel-3.10.0-957.el
    rpm -ihv kernel-3.10.0-957.el7.src.rpm 
    cd ~/rpmbuild/SOURCES
    tar Jxvf linux-3.10.0-957.el7.tar.xz -C /usr/src/kernels/
    cd /usr/src/kernels/
    mv 3.10.0-957.5.1.el7.x86_64 3.10.0-957.5.1.el7.x86_64-old
    mv linux-3.10.0-957.el7 3.10.0-957.5.1.el7.x86_64
    make mrproper
    cd 3.10.0-957.5.1.el7.x86_64
    make mrproper
    cp ../3.10.0-957.5.1.el7.x86_64-old/Module.symvers .
    cp /boot/config-3.10.0-957.el7.x86_64 ./.config
    make oldconfig
    make prepare
    make scripts
    make CONFIG_BLK_DEV_NBD=m M=drivers/block
    make CONFIG_BLK_DEV_NBD=m M=drivers/block/
    cp drivers/block/nbd.ko /lib/modules/$(uname -r)/kernel/drivers/block/
    depmod -a
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    2.2 基于LVM分区的qcow2镜像

    2.2.1 qemu-nbd连接镜像

    采用设备nbd0连接

    qemu-nbd -n -c /dev/nbd0 centos-7.6.qcow2
    
    • 1

    2.2.2 识别分区

    partprobe /dev/nbd0
    
    • 1

    2.2.3 读取physical volumes

    vgscan --cache
    
    • 1

    2.2.4 激活volume group

    vgchange -ay
    
    • 1

    2.2.5 挂载设备

    通过lvdisplay查看lv信息,然后挂载分区(根据镜像系统中lv信息挂载)

    mount /dev/centos/root /mnt/
    
    • 1

    2.2.6 卸载分区

    umount /mnt
    lvchange -an /dev/centos/root
    lvchange -an /dev/centos/swap
    vgchange -an centos
    qemu-nbd -d /dev/nbd0
    vgscan --cache
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    2.3 基于普通分区的qcow2镜像

    2.3.1 qemu-nbd连接镜像

    采用设备nbd1连接

    qemu-nbd -n -c /dev/nbd1 kylin-v10-arm64-minimal-20210603.qcow2
    
    • 1

    2.3.2 查看分区

    通过命令fdisk -l

    Disk /dev/nbd1:3.39 GiB,3629121536 字节,7088128 个扇区
    单元:扇区 / 1 * 512 = 512 字节
    扇区大小(逻辑/物理):512 字节 / 512 字节
    I/O 大小(最小/最佳):512 字节 / 512 字节
    磁盘标签类型:gpt
    磁盘标识符:7B5DFE79-DF47-47FC-BDD6-E93A3E5E91D4
    
    设备           起点    末尾    扇区  大小 类型
    /dev/nbd1p1    2048 1128447 1126400  550M EFI 系统
    /dev/nbd1p2 1128448 1144831   16384    8M BIOS 启动
    /dev/nbd1p3 1144832 7086079 5941248  2.9G Linux 文件系统
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    2.3.3 挂载分区

    挂载根分区,针对根分区可进行chroot等操作,然后退出

    mount /dev/nbd1p3 /mnt/
    chroot /mnt
    ......
    exit
    
    • 1
    • 2
    • 3
    • 4

    2.3.4 卸载分区

    umount /mnt
    qemu-nbd -d /dev/nbd1
    
    • 1
    • 2

    3. 问题记录


    4. 参考文献

  • 相关阅读:
    Spring自定义启动图标(个性化启动图标)
    Dubbo面试题汇总【40题】
    [ CTF ] WriteUp- 2022年第三届“网鼎杯”网络安全大赛(朱雀组)
    原神3D卡通动漫二次元角色模型Blender已绑骨骼
    Pytorch学习 day12(模型的保存和加载)
    Redis系列16:聊聊布隆过滤器(原理篇)
    一个springbatch的奇葩报错
    温故知新—Activity的五种启动模式
    Python网络爬虫项目开发实战:怎么解决表单交互
    241. 为运算表达式设计优先级(分治 +记忆化)
  • 原文地址:https://blog.csdn.net/nanhai_happy/article/details/125503246