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 磁盘镜像文件的创建、格式化、分区、挂载相关推荐

  1. 存储设备分区,格式化,挂载

    blkid:查看分区UUID以及类型 [root@localhost ~]# blkid /dev/sda2: UUID="8e6e21f9-c296-4493-986c-41204c8c4 ...

  2. linux 多块磁盘挂一个文件夹,Linux单目录挂载多块磁盘

    Linux将多块磁盘挂载到一个目录,特此记录,方便以后使用. 服务器需要保存大量图片,内含4块2T的磁盘,需要将磁盘挂载到影像目录. 单块磁盘挂载比较简单: 创建分区 格式化分区 挂载 同一目录无法重 ...

  3. 文件分区格式化及挂载

    创建一个5G的分区,文件系统为ext2,卷标为DATA,块大小为1024,预留管理空间为磁盘分区的8%:挂载至/backup目录,要求使用卷标进行挂载,且在挂载时启动此文件系统上的acl功能: 在虚拟 ...

  4. centos7 nbd 挂在qcow2或qcow,raw,虚机镜像,virsh,virt,使用qemu-nbd挂载qcow2镜像文件

    基本原理 nbd(网络块设备: Network Block Device),利用qemu-nbd将qemu虚拟机镜像挂载到Linux上. 展开来讲,nbd可以将一个远程主机的磁盘空间,当作一个块设备来 ...

  5. linux img文件 分区挂载

    首先是将制作的img文件比如hd5.img和loop设备建立联系. losetup /dev/loop0 hd5.img 然后用fdisk分区:fdisk /dev/loop0 mkfs.ext4 / ...

  6. linux 查看.img文件,linux img文件 分区挂载

    首先是将制作的img文件比如hd5.img和loop设备建立联系. losetup /dev/loop0 hd5.img 然后用fdisk分区:fdisk /dev/loop0 mkfs.ext4 / ...

  7. ubuntu20.04挂载qcow2磁盘镜像

    在主机系统挂载qcow2磁盘镜像后,无需登录虚拟机就可以直接浏览磁盘镜像的文件系统.可通过以下两种方法来进行挂载操作. 方法一:qemu-nbd 1.安装qemu-nbd命令行工具 $ sudo ap ...

  8. centos格式化优盘命令_centos 磁盘分区、格式化及挂载

    当新增硬盘时,要做的几个事情就是:先按需要进行分区.然后对分区进行格式化.再进行挂载即将指定分区挂到指定目录上:必要的时候做下校验: 常用的命令有: fdisk :磁盘分区相关指令  如:查看 新增 ...

  9. 文件系统管理 之 Linux 创建文件系统及挂载文件系统流程详解

    作者:北南南北 来自: LinuxSir.Org 摘要:本文对新增硬盘,切割硬盘,创建硬盘分区,为硬盘分区创建文件系统,以及加载文件系统的流程做总结性论述:主要是为初学者弄清楚这一操作过程:本文涉及f ...

最新文章

  1. getBytes等空指针异常
  2. python语言if语句-Python2 if 条件语句
  3. Java中static的作用
  4. Cloud for Customer的work center显示逻辑
  5. Java EE,Docker和Maven(技术提示#89)
  6. Mybatis高级-resultMap之collection聚集
  7. 研究人员发现Office Word 0Day攻击 这个漏洞绕过了word宏安全设置 绿盟科技、McAfee及FireEye发出警告...
  8. python画图去掉边框
  9. JSP中鼠标禁用代码
  10. 将两个DataTable合并成一个DataTable
  11. java weblogic admin,weblogic admin 不能重起服务(Server may already be running)
  12. ID为GUID类型时使用ObjectDataSource控件的时候的未找到DataObjectTypeName属性的解决方法...
  13. java中return提醒不兼容的_JAVA报return为不兼容类型
  14. 博弈论——取石子问题
  15. 计算流体力学编程作业matlab,中科大计算流体力学CFD之大作业二.doc
  16. 蓝桥杯第十届c语言试题答案,[蓝桥杯][2019年第十届真题]空间跳跃 - C语言网
  17. java版飞机大战代码
  18. Self-Attention Generative Adversarial Networks(SAGAN)理解
  19. 华为p10android版本,华为P10系列什么时候升级安卓8.0?官方给出答案
  20. 程序员别再迷茫,赚钱,方法比你想的更多

热门文章

  1. MTK android 可修改IMEI方法
  2. 哪些单位可以解决户口?附落户北京渠道
  3. 推荐这几个不错的提取伴奏在线软件给大家
  4. HCNP——RIPv1和RIPv2概况
  5. 利用子集构造法实现NFA到DFA的转换
  6. NFA到DFA的子集构造法
  7. Manjaro 20 安装/切换中文输入法
  8. OCTAFX滑点滑到令人发指 现在出金也不给出金是黑平台无疑了
  9. java-极光短信以及通知回调整合
  10. (vant新手坑)引入Vant组件并改变其样式