1.虚拟磁盘概述
(1)虚拟化项目中存储的注意事项
·存储的性能几乎总是虚拟化的瓶颈
·通过多个硬盘驱动以分布磁盘I/O来实现存储解决方案
·驱动器的速度越快越好,考虑SSD与机械硬盘的混合使用
·考虑部署集中化的SAN/NFS来实现高可用性和实时迁移

(2)KVM存储模式
·基于文件系统的存储
dir dir: Filesystem Directory
fs: Pre-Formatted Block Device
netfs: Network Exported Directory
·基于设备的存储
Disk: Physical Disk Device
lscsi:iSCSI Target
logical: LVM Volume Group
·通过存储池来简介存储的管理

(3)虚拟磁盘类型
·固定 Fixed
在配置时,指定磁盘大小
不管在虚拟磁盘上实际存储多少数据,都将占用相同大小主机磁盘空间
·动态 Dynamic
增长到最大容量,但是只根据需求使用更多的空间
·差异 Differencing
因为创建是差异磁盘,所以只保存变更的数据
例如,将操作系统安装在父盘,然后创建差异化磁盘来执行进一步配置
(4)KVM支持的虚拟磁盘类型
·raw:
这并非是一种真正的磁盘格式,而是代表虚拟机所使用的原始镜像
它并不存储元数据,因此可以作为保证虚拟机兼容性的候选方案。与此正因为它并不存储元数据,所以只能支持某些高级特性,比如快照和压缩等
格式简单,容易转换为其他的格式,需要文件系统的支持才能支持spare file
·cow:copy-on-write格式
·qcow:QEMU早期的copy-on-write格式,过渡性方案
·qcow2:
按需进行分配磁盘空间,不管文件系统是否支持
支持快照
支持zlib的磁盘压缩
支持AES的加密
·vmdk(Virtual Machine Disk)
VMware环境当中默认使用的磁盘格式
·vhd\vhdx( Virtual Hard Disk)
微软默认采用的文件格式
·vdi(VirtualBox)
·…… 通过qemu-img --help查看支持的格式

2.使用qemu-img管理虚拟磁盘
(1)qemu-img概述
·是一个功能强制磁盘镜像管理工具
·qemu-img –-help 包括以下功能


(2)qcow2格式选项
·backingfile
于指定后端镜像文件。
·backingfmt
设置后端镜像的镜像格式。
·cluster_size
设置镜,象中的簇大小,取值在512到2M之间,默认值为64K。
·preallocation
设置镜像文件空间的预分配模式
·encryption
用于设置加密
(3)预分配策略
·off
·缺省策略,即不使用预分配策略
·metadata
·分配元数据(metadata) ,预分配后的虚拟
磁盘仍然属于稀疏映像类型
·full
·分配所有磁盘空间并置零,预分配后的虚 拟磁盘属于非稀疏映像类型
·falloc
·分配文件的块并标示它们的状态为未初始化,相对full模式来说,创建虚拟磁盘的速 度要快很多
(4)后备差异虚拟硬盘
·存储与基础镜像(父)磁盘的变化
基础镜像(父)磁盘不会改变
差异磁盘隔离变化
多个差异磁盘可以使用相同的基础镜像(父)磁盘
·优点:标准化基础镜像,节省空间
·缺点:增加了开销,较差的性能

(5)演示:backing_file
因为基础镜像文件不在当前目录,所以要指出文件绝对路径

发现两个错误

先授予qemu用户搜索文件所在目录访问权限
![]()
查看支持的操作系统和变体

发现可能是命令错误,重新修改输入

![]()
安装成功:

打开虚拟机查看没问题:

(6)虚拟磁盘格式转换+演示:导入OVF格式的虚拟机到KVM
虚拟磁盘格式转换语法格式

①VMware Workstation虚拟机中找一个关闭状态的虚拟机进行导出


②将.vmdk虚拟磁盘文件拷入到KVM虚拟机中

③磁盘的格式转换

④根据虚拟磁盘迁移前的VMware配置,导入到新的KVM虚拟机

⑤查看导入的虚拟机


(7)调整虚拟磁盘大小
·语法格式
·操作之前,一定要做好数据备份
·增加文件大小后,需要在客户机中使用fdisk、 parted等分区工具进行
相应的操作才能真正让客户机使用到增加后的镜像空间。
·缩小镜像之前,要在客户机中保证里面的文件系统有空余空间,否则
会数据丢失。
·qcow2不支持缩小镜像的操作。
![]()
3.快照管理
(1)快照/检查点 Snapshot/Checkpoint
·磁盘快照
对磁盘数据进行快照
主要用于虚拟机备份等场合
·内存快照
对虚拟机的内存/设备信息进行保存
该机制同时用于休眠恢复,迁移等场景
主要使用virsh save ( qemu migrate to file ) 实现,只能对运行的虚拟机进行
·检查点快照
同时保存虚拟机的磁盘快照和内存快照 用于将虚拟机恢复到某个时间点
可以保证数据的一致性

(2)磁盘快照分类
·按快照信息保存分为:
内置快照:快照数据和base磁盘数据放在一个qcow2文件中
外置快照:快照数据单独的qcow2文件存放
·按虚拟机状态可以分为:
关机态快照:数据可以保证一致性
运行态快照:数据无法保证一致性,类似与系统crash后的磁盘数据。使用时可能需要fsck等操作。
·按磁盘数量可以分为:
单盘:单盘快照不涉及原子性
多盘:涉及原子性。主要分两个方面:
- 是所有盘快照点相同
- 所有盘要么都快照成功,要么都快照失败。主要依赖于qemu的transaction实现
(3)磁盘快照原理

(4)调整虚拟磁盘大小
语法格式:

因为我没有创建快照,所以没有显示

创建oa快照重新查看,可以看到有大小时间等数据

(5)快照小结
·向虚拟机磁盘里写入文件,虚拟磁盘会变大。当删除该文件时候,虚拟磁盘大
小依然不变。
·当从一个原来的虚拟镜像base过来一个虚拟镜像,在首次启动新虚拟镜像之前,删除原来虚拟镜像某个文件,在新的虚拟镜像中一样看不到。在运行新的虚拟镜像后,在原始镜像中删除某个文件,在新的镜像中能看到,且依然能够访问。
·qemu-img snapshot实现的是内部快照
·qemu-img backing_file实现的是外部快照
·libvirt的快照实现是在qemu的基础上实现的
·libvirt的外部快照实现可能使用了qemu的base,rebase,commit功能
·从原代码来看一下libvirt创建非活动的内部快照其实调用了qemu-img snapshot功能。
4.存储池
(1)存储池的基本概念
·Libvirt可以以存储池的形式对存储进行统一管理、简化操作
·对于虚拟机操作来说,存储池和卷并不是必需的
·支持以下存储池

(2)virsh中的存储池相关命令

(3)virsh中的存储卷相关命令

(4)显示池与卷的信息


(5)基于目录的存储池 dir:Filesystem Directory
·准备目录
![]()
①设置目录权限
![]()
②配置目录的SELinux上下文

·通过virt-manager创建

·通过virsh创建


(6)基于分区的存储池 fs:Pre-Formatted Block Device
·libvirtd会自动mount分区
·准备分区并创建文件系统
![]()

·创建



(7)基于磁盘的存储池 disk:Physical Disk Device
·准备XML文件
![]()

·通过virsh创建


(8)基于LVM的存储池 logical:LVM Volume Group
·基于LVM的存储池要求使用全部磁盘分区
·创建时存储池,有两种方法
①使用现有的VG
②创建新的VG

·创建


(9)实验环境准备:安装Linux的存储服务器
·最小化安装的Linux
①编写Kickstart文件安装

②直接iso文件安装

在其加入一个磁盘

查看磁盘

查看显示未分区
![]()

创建一个新分区如何都使用默认使其用完所有空间

然后写入

查看

·安装targetcli软件包
![]()
·使用targetcli配置存储

(10)实验:配置Target
·创建存储对象
①创建块存储对象


②创建fileio对象



③创建ramdisk对象

·创建iSCSI Target
①查看数量为零

②创建

③查看

·配置target portal group(TPG)
①配置portals(创建iscsi时系统已自动创建,如没有则直接create手工创建)

②配置LUN:添加块设备、ramdisk、fileio三个LUN
![]()


③配置ACL
I.查看iSCSI initiator查看其IQN:
切换另一台主机查看
![]()
修改:
![]()
II.为每个initiator创建ACL
返回target主机,查看没有acl
![]()
进行创建(为查看的iqn)


·保存配置

·设置target服务为自动启动
![]()
·检查配置

(11)实验:Initiator连接Target
·检查是否可以发现

·测试挂载设备

查看挂载成功

·断开连接命令
![]()
(12)基于iSCSI的存储池 iscsi:iSCSI Target
·图形化界面操作
注意选择类型iscsi target

输入target端地址和iqn
![]()

创建完成

查看文件配置

·也可以用virsh命令进行创建


(13)基于NFS的存储池 netfs:Network Export Directory
·下载nfs

·创建一个nfs共享
![]()
·做权限设置
![]()

进行测试

kvm服务器测试,发现共享成功

·图像化创建

填入主机名和路径

成功

查看其目录
![]()

查看mount情况

virsh查看信息

查看生成的配置文件

·可以virsh命令创建

![]()
5.存储卷
(1)存储池概述
·存储池被分割为存储卷(Storage Volume)
·存储卷
①文件
②块设备(物理分区、LVM逻辑卷等)
③libvirt管理的其他类型存储的抽象

(2)存储卷管理
·创建

·克隆

·删除

·移动
①首先确定存储卷的路径

②使用文件系统命令复制或移动存储卷文件到新的位置。例如,使用cp或 mv命令
③ 更新存储卷的路径配置。
·修改大小

(3)演示:存储卷管理
·基于目录的存储池中的存储卷管理
查看:


创建卷:

查看创建卷:


查看真实磁盘占用情况:
![]()
·基于LVM的存储池中的存储卷管理
查看存储池:

找到一个空白磁盘进行创建:



查看:

可以看到lvm里未存在:

创建卷:

查看:




(4)向虚拟机添加卷
·attach-device
①通过XML添加新的设备
编写一个xml文档:

查看虚拟机设备(可以看到vad):

执行文件命令成功添加设备

验证查看:

·attach-disk
通过参数添加新的磁盘设备

查看验证


6.虚拟磁盘离线访问工具
(1)离线访问工具应用场景
·观看或下载位于虚拟机磁盘中的文件
·编辑或上传文件到虚拟机磁盘
·读取或写入的虚拟机配置
·准备新的磁盘映像,其中包含文件、目录、文件系统、分区、逻辑卷
和其他选项
·拯救和修复客户无法启动或需要更改启动配置的虚拟机
·监控虚拟机的磁盘使用情况
·根据组织安全标准审计虚拟机的合规性
·通过克隆和修改模板来部署虚拟机
·读取CD和DVD ISO和软盘映像
(2)guestfish Shell常用操作

·Libquestfs提供了一个简单地访问虚机磁盘镜像文件的方法,即使是在虚机无法启动的情况下
·Libquestfs是由一组丰富的工具集组成,可以让管理员访问虚机文件,甚至调整和挽救文件。
·guestfish是一个基于libquestfsAPI的交互shell
进行一个只读的操作:

查看帮助

list+tab+tab会列出所有list开头

探查:

读写探查后缀虚拟机名(可以修改写入配置)


(3)其他离线工具简介
·virt-df:监视磁盘使用
·virt-resize:离线调整虚拟磁盘大小
·virt-inspector:虚拟机检视
·virt-win-reg:Windows注册表读取和修改
·virt-sysprep:虚拟机设置重置

被折叠的 条评论
为什么被折叠?



