qcow2 磁盘镜像文件的创建、格式化、分区、挂载
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
2w
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 tmp2umount 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.qcow2qemu-img convert -c -f raw -O qcow2 source.img new.qcow2
我这里实现了一个简单的创建 qcow2格式的镜像,然后分区,格式化,安装自己的apps的脚本
供大家参考
----------------------------------------------------------
#!/bin/bashQCOW2_IMG=rootfs.qcow2
QCOW2_IMG_C=demo_armhf_rootfs.qcow2
IMG_SIZE=2GAPPS_PATH=$1if [ "$#" != "1" ];thenecho "usage : $0 APPS_PATH"exit -1
fiif [ -f $APPS_PATH/apps.tar.gz ];thenAPPS_FILE=$APPS_PATH/apps.tar.gz
elseecho "No such file! [$APPS_PATH/apps.tar.gz] not found"exit -1
firm $QCOW2_IMG
qemu-nbd --disconnect /dev/nbd0set -x
qemu-img create -f qcow2 $QCOW2_IMG $IMG_SIZEmodprobe nbd max_part=12
qemu-nbd --connect=/dev/nbd0 $QCOW2_IMG# partition
cat << END | fdisk /dev/nbd0
n
p
1+1G
n
p
2w
ENDecho 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_DEVmkdir -p tmp \&& mount -t ext4 $PT1_DEV tmp \&& cp rootfs/* tmp/ -ad && sync && sync \&& ls tmp && umount tmpecho y | mkfs.ext4 $PT2_DEVmount -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 tmpqemu-nbd --disconnect /dev/nbd0qemu-img convert -c -O qcow2 $QCOW2_IMG $QCOW2_IMG_C
rm $QCOW2_IMG tmp -rfdu -h $QCOW2_IMG_C
qcow2 磁盘镜像文件的创建、格式化、分区、挂载相关推荐
- 存储设备分区,格式化,挂载
blkid:查看分区UUID以及类型 [root@localhost ~]# blkid /dev/sda2: UUID="8e6e21f9-c296-4493-986c-41204c8c4 ...
- linux 多块磁盘挂一个文件夹,Linux单目录挂载多块磁盘
Linux将多块磁盘挂载到一个目录,特此记录,方便以后使用. 服务器需要保存大量图片,内含4块2T的磁盘,需要将磁盘挂载到影像目录. 单块磁盘挂载比较简单: 创建分区 格式化分区 挂载 同一目录无法重 ...
- 文件分区格式化及挂载
创建一个5G的分区,文件系统为ext2,卷标为DATA,块大小为1024,预留管理空间为磁盘分区的8%:挂载至/backup目录,要求使用卷标进行挂载,且在挂载时启动此文件系统上的acl功能: 在虚拟 ...
- centos7 nbd 挂在qcow2或qcow,raw,虚机镜像,virsh,virt,使用qemu-nbd挂载qcow2镜像文件
基本原理 nbd(网络块设备: Network Block Device),利用qemu-nbd将qemu虚拟机镜像挂载到Linux上. 展开来讲,nbd可以将一个远程主机的磁盘空间,当作一个块设备来 ...
- linux img文件 分区挂载
首先是将制作的img文件比如hd5.img和loop设备建立联系. losetup /dev/loop0 hd5.img 然后用fdisk分区:fdisk /dev/loop0 mkfs.ext4 / ...
- linux 查看.img文件,linux img文件 分区挂载
首先是将制作的img文件比如hd5.img和loop设备建立联系. losetup /dev/loop0 hd5.img 然后用fdisk分区:fdisk /dev/loop0 mkfs.ext4 / ...
- ubuntu20.04挂载qcow2磁盘镜像
在主机系统挂载qcow2磁盘镜像后,无需登录虚拟机就可以直接浏览磁盘镜像的文件系统.可通过以下两种方法来进行挂载操作. 方法一:qemu-nbd 1.安装qemu-nbd命令行工具 $ sudo ap ...
- centos格式化优盘命令_centos 磁盘分区、格式化及挂载
当新增硬盘时,要做的几个事情就是:先按需要进行分区.然后对分区进行格式化.再进行挂载即将指定分区挂到指定目录上:必要的时候做下校验: 常用的命令有: fdisk :磁盘分区相关指令 如:查看 新增 ...
- 文件系统管理 之 Linux 创建文件系统及挂载文件系统流程详解
作者:北南南北 来自: LinuxSir.Org 摘要:本文对新增硬盘,切割硬盘,创建硬盘分区,为硬盘分区创建文件系统,以及加载文件系统的流程做总结性论述:主要是为初学者弄清楚这一操作过程:本文涉及f ...
最新文章
- getBytes等空指针异常
- python语言if语句-Python2 if 条件语句
- Java中static的作用
- Cloud for Customer的work center显示逻辑
- Java EE,Docker和Maven(技术提示#89)
- Mybatis高级-resultMap之collection聚集
- 研究人员发现Office Word 0Day攻击 这个漏洞绕过了word宏安全设置 绿盟科技、McAfee及FireEye发出警告...
- python画图去掉边框
- JSP中鼠标禁用代码
- 将两个DataTable合并成一个DataTable
- java weblogic admin,weblogic admin 不能重起服务(Server may already be running)
- ID为GUID类型时使用ObjectDataSource控件的时候的未找到DataObjectTypeName属性的解决方法...
- java中return提醒不兼容的_JAVA报return为不兼容类型
- 博弈论——取石子问题
- 计算流体力学编程作业matlab,中科大计算流体力学CFD之大作业二.doc
- 蓝桥杯第十届c语言试题答案,[蓝桥杯][2019年第十届真题]空间跳跃 - C语言网
- java版飞机大战代码
- Self-Attention Generative Adversarial Networks(SAGAN)理解
- 华为p10android版本,华为P10系列什么时候升级安卓8.0?官方给出答案
- 程序员别再迷茫,赚钱,方法比你想的更多