qcow2 磁盘镜像文件的创建、格式化、分区、挂载

本文详细介绍了QEMU支持的Qcow2磁盘镜像格式的使用方法,包括创建、分区、格式化、压缩及挂载过程。通过实际示例展示了Qcow2的高效压缩比和脚本自动化操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

QCOW2镜像格式是Qemu支持的磁盘镜像格式之一。它可以使用一个文件来表示一个固定大小的块设备。

主要优点是支持压缩,动态扩容!就是你要创建一个2G大小的镜像,放完你自己的文件,压缩完成之后,可能就只有40M!

创建 qcow2 镜像

# qemu-img create -f qcow2  test.qcow2  2G

# qemu-img create -f raw  test.img  2G

qcow2 镜像分区

 对于 QEMU 经常使用的 qcow2 镜像的分区需要借用到 "network block device" (nbd) driver 和  qemu-nbd (qemu-utils)命令来操作。

First, load the nbd kernel modules:

modprobe nbd max_part=12

Now use the command qemu-nbd to make the disk image available as network block device:

qemu-nbd --connect=/dev/nbd0 test.qcow2

fdisk can be used to list available partitions inside the disk image, and create partitions if you want.

fdisk -l /dev/nbd0

if you want to partiton, 1G+1G two partitions:

cat << END | fdisk /dev/nbd0
n
p
1

+1G
n
p
2


w
END

格式化

可以使用fdisk 命令看一下 分区后对应的 设备文件名称,执行 fdisk /dev/nbd0 输入p 即可以看到,也可以执行下面的命令来获取:

echo p | fdisk /dev/nbd0 | grep "nbd0" | awk 'NR==2{print $1}'
echo p | fdisk /dev/nbd0 | grep "nbd0" | awk 'NR==3{print $1}'

获取的结果分别为  /dev/nbd0p0   /dev/nbd0p1 , 可以用下面的命令格式化分区

mkfs.ext4 -F -L "rootfs" /dev/nbd0p0
mkfs.ext4 -F -L "data" /dev/nbd0p1

挂载 

可以使用下面的guestmount 和 guestumount来挂载和卸载qcow2的镜像,不过这个需要安装命令。这里不做介绍了。

我们还是使用 nbd的方法来操作。

mount -t ext4 /dev/nbd0p0 tmp1
mount -t ext4 /dev/nbd0p1 tmp2

umount tmp1 tmp2

操作完成之后,切记要释放 nbd的网络设备

qemu-nbd --disconnect /dev/nbd0

qcow2 镜像的压缩

我们先来看看 qcow2的压缩效率,整整 62.5%!是不是被吓到了 

# du * -h -d 1
42M     c_demo_armhf_rootfs.qcow2
112M    demo_armhf_rootfs.qcow2

下面两条命令分别是 qcow2压缩 和 raw img 压缩成qcow2 

qemu-img convert -c -f qcow2 -O qcow2 source.qcow2 new.qcow2


qemu-img convert -c -f raw -O qcow2 source.img new.qcow2

我这里实现了一个简单的创建 qcow2格式的镜像,然后分区,格式化,安装自己的apps的脚本

供大家参考

----------------------------------------------------------


#!/bin/bash

QCOW2_IMG=rootfs.qcow2
QCOW2_IMG_C=demo_armhf_rootfs.qcow2
IMG_SIZE=2G

APPS_PATH=$1

if [ "$#" != "1" ];then
        echo "usage : $0 APPS_PATH"
        exit -1
fi

if [ -f $APPS_PATH/apps.tar.gz ];then
        APPS_FILE=$APPS_PATH/apps.tar.gz
else
        echo "No such file! [$APPS_PATH/apps.tar.gz] not found"
        exit -1
fi


rm $QCOW2_IMG
qemu-nbd --disconnect /dev/nbd0

set -x
qemu-img create -f qcow2 $QCOW2_IMG $IMG_SIZE

modprobe nbd max_part=12
qemu-nbd --connect=/dev/nbd0 $QCOW2_IMG


# partition
cat << END | fdisk /dev/nbd0
n
p
1

+1G
n
p
2


w
END

echo p | fdisk /dev/nbd0
PT1_DEV=`echo p | fdisk /dev/nbd0 | grep "nbd0" | awk 'NR==2{print $1}'`
PT2_DEV=`echo p | fdisk /dev/nbd0 | grep "nbd0" | awk 'NR==3{print $1}'`


echo y | mkfs.ext4 $PT1_DEV

mkdir -p tmp \
        && mount -t ext4 $PT1_DEV tmp  \
        && cp rootfs/* tmp/ -ad && sync && sync \
        && ls tmp && umount tmp



echo y | mkfs.ext4 $PT2_DEV

mount -t ext4 $PT2_DEV tmp \
        && mkdir tmp/sysuser tmp/root -p \
        && tar xf $APPS_FILE -C tmp/sysuser \
        && mv tmp/sysuser/.project tmp/sysuser/project \
        && sync && sync \
        && ls tmp && umount tmp

qemu-nbd --disconnect /dev/nbd0

qemu-img convert -c -O qcow2 $QCOW2_IMG $QCOW2_IMG_C
rm $QCOW2_IMG tmp -rf

du -h $QCOW2_IMG_C

<think>好的,用户现在想了解如何挂载qcow2文件。首先,我需要回忆一下qcow2是什么。qcow2QEMU的一种磁盘镜像格式,支持快照、压缩和加密,常用于虚拟化环境。用户可能在使用KVM或QEMU时遇到需要直接访问镜像内容的情况,比如修复系统、提取文件等。 接下来,用户的问题是如何挂载qcow2文件挂载这种镜像文件通常需要几个步骤:首先将qcow2转换为可挂载的格式,比如使用网络块设备(NBD)将镜像暴露为块设备,然后挂载相应的分区。 我需要考虑用户的操作系统环境,可能是在Linux下,因为qcow2常用于Linux的虚拟化。因此,步骤可能包括加载NBD内核模块、使用qemu-nbd工具连接镜像,然后挂载分区。此外,用户可能需要安装相关软件包,比如qemu-utils,这些需要提前检查是否已安装。 另外,用户可能不知道需要root权限,或者如何处理多个分区的情况。比如,使用kpartx来映射分区,或者直接挂载指定的分区(如/dev/nbd0p1)。需要提醒用户注意分区号,可以通过fdisk -l查看。 还要注意卸载时的正确步骤,确保数据安全,避免损坏镜像。可能需要提醒用户按顺序卸载分区,断开NBD连接,并移除内核模块。 潜在的问题可能有:用户未安装必要的工具,镜像有多个分区导致挂载错误,或者权限问题。需要给出相应的解决建议,比如安装软件包、检查分区表、使用sudo等。 此外,用户可能有不同的使用场景,比如只读挂载,这时需要加上-ro选项。或者需要挂载LVM分区,可能需要额外的步骤,比如激活卷组。但考虑到用户的问题比较基础,可能暂时不需要深入LVM部分,除非用户进一步询问。 最后,总结步骤,确保结构清晰,逐步引导用户完成操作,并强调注意事项,如权限和数据安全。同时,提供示例命令,帮助用户理解具体操作。</think>以下是qcow2镜像文件挂载的详细指南,qcow2QEMU虚拟化环境中常用的**动态分配存储格式**,支持快照和压缩。挂载qcow2文件常用于直接访问虚拟机磁盘内容(如修复系统、提取文件等)。 --- ### 一、挂载原理 1. **技术基础**: - 使用Linux内核的`nbd`(网络块设备)模块 - 通过`qemu-nbd`工具将qcow2镜像映射为块设备 - 注意:需要**root权限** 2. **依赖条件**: ```bash # 安装必要工具(Debian/Ubuntu) sudo apt install qemu-utils nbd-client # 加载内核模块 sudo modprobe nbd max_part=16 ``` --- ### 二、标准挂载流程 #### 步骤1:连接qcow2镜像到NBD设备 ```bash sudo qemu-nbd -c /dev/nbd0 --read-only your_image.qcow2 # 只读模式(安全) # 或可写模式(慎用) sudo qemu-nbd -c /dev/nbd0 your_image.qcow2 ``` #### 步骤2:识别分区结构 ```bash sudo fdisk -l /dev/nbd0 # 查看分区表 # 示例输出: # Device Start End Sectors Size Type # /dev/nbd0p1 2048 1050623 1048576 512M EFI System # /dev/nbd0p2 1050624 2097151 1046528 511M Linux filesystem ``` #### 步骤3:挂载目标分区 ```bash # 挂载第一个分区(假设是ext4文件系统) sudo mount /dev/nbd0p1 /mnt/qcow2_mount # 若使用LVM: sudo vgscan sudo vgchange -ay # 激活卷组 sudo mount /dev/VolGroupName/LogVolName /mnt/qcow2_mount ``` #### 步骤4:访问文件 ```bash ls /mnt/qcow2_mount # 验证挂载内容 ``` --- ### 三、卸载操作(关键步骤) ```bash # 卸载文件系统 sudo umount /mnt/qcow2_mount # 断开NBD连接 sudo qemu-nbd -d /dev/nbd0 # 移除内核模块 sudo rmmod nbd ``` --- ### 四、高级场景处理 #### 场景1:自动挂载脚本 ```bash #!/bin/bash IMAGE=$1 MOUNT_POINT="/mnt/qcow2_mount" sudo qemu-nbd -c /dev/nbd0 "$IMAGE" sudo mount /dev/nbd0p2 "$MOUNT_POINT" && echo "已挂载到 $MOUNT_POINT" ``` #### 场景2:Windows系统访问qcow2 1. 使用`qemu-img`转换为VHD格式: ```bash qemu-img convert -O vhdx image.qcow2 image.vhdx ``` 2. 在Windows中挂载VHD文件- 磁盘管理 → "操作" → "附加VHD" --- ### 五、常见问题排查 | 现象 | 解决方法 | |------|----------| | `qemu-nbd: Failed to connect socket` | 检查nbd模块是否加载:`lsmod | grep nbd` | | `mount: unknown filesystem type 'LVM2_member'` | 使用`vgscan`和`vgchange -ay`激活逻辑卷 | | 分区表不可见 | 尝试`partprobe /dev/nbd0`刷新分区表 | --- ### 六、性能优化建议 1. 使用缓存加速: ```bash sudo qemu-nbd -c /dev/nbd0 --cache=writeback your_image.qcow2 ``` 2. 多队列模式(高性能SSD): ```bash sudo qemu-nbd -c /dev/nbd0 --aio=io_uring your_image.qcow2 ``` --- **注意**:对生产环境中的qcow2文件操作前建议先创建快照: ```bash qemu-img create -f qcow2 -b original.qcow2 snapshot.qcow2 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值