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
若是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
2.2 基于LVM分区的qcow2镜像
2.2.1 qemu-nbd连接镜像
采用设备nbd0连接
qemu-nbd -n -c /dev/nbd0 centos-7.6.qcow2
2.2.2 识别分区
partprobe /dev/nbd0
2.2.3 读取physical volumes
vgscan --cache
2.2.4 激活volume group
vgchange -ay
2.2.5 挂载设备
通过lvdisplay查看lv信息,然后挂载分区(根据镜像系统中lv信息挂载)
mount /dev/centos/root /mnt/
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
2.3 基于普通分区的qcow2镜像
2.3.1 qemu-nbd连接镜像
采用设备nbd1连接
qemu-nbd -n -c /dev/nbd1 kylin-v10-arm64-minimal-20210603.qcow2
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 文件系统
2.3.3 挂载分区
挂载根分区,针对根分区可进行chroot等操作,然后退出
mount /dev/nbd1p3 /mnt/
chroot /mnt
......
exit
2.3.4 卸载分区
umount /mnt
qemu-nbd -d /dev/nbd1
3. 问题记录
无
4. 参考文献
无