目录
在KVM(Kernel-based Virtual Machine)虚拟化平台中,存储池(Storage Pool)是用来管理和存储虚拟机镜像及其相关数据的概念。存储池可以是物理存储设备(如硬盘、SSD)的一部分或者是由多个存储设备组成的逻辑汇集。
KVM存储池的重要概念和功能
-
存储池类型:
- Dir类型:简单的目录存储池,直接使用操作系统的文件系统来存储镜像文件。
- Logical类型:使用逻辑卷管理器(LVM)创建的存储池,允许更灵活的空间管理和快照功能。
- Network类型:使用网络文件系统(如NFS)作为存储池,可以在多个主机之间共享虚拟机镜像。
- iSCSI类型:利用iSCSI协议连接到远程存储设备,并将其作为存储池。
-
功能特性:
- 虚拟机镜像管理:存储池管理虚拟机的磁盘镜像文件,包括创建、删除、复制、移动虚拟机镜像等操作。
- 快照管理:有些存储池类型(如Logical类型)支持虚拟机快照功能,可以创建和管理虚拟机的快照,方便备份和回滚操作。
- 空间管理:存储池允许对存储资源进行空间管理,可以监控使用情况并进行容量规划。
- 性能优化:选择合适的存储池类型和配置可以优化虚拟机的性能和可靠性。
-
创建和管理:
- 在KVM管理工具(如virt-manager、virsh)或通过命令行(使用
virsh pool-create
等命令)可以创建和管理存储池。 - 配置存储池的路径、类型、权限以及其他参数,根据需求选择合适的存储池类型和配置。
- 在KVM管理工具(如virt-manager、virsh)或通过命令行(使用
-
使用案例:
- 本地存储池:适用于单一主机环境,直接使用主机上的硬盘或SSD作为存储池。
- 共享存储池:适用于多个主机共享虚拟机镜像,可以通过网络文件系统(如NFS)或专用存储设备(如iSCSI)实现。
- 灵活的存储管理:通过存储池可以灵活管理虚拟机的存储需求,根据虚拟化环境的需求进行扩展或调整。
KVM存储池的管理方式
创建方式:
- 目录存储池:直接使用主机文件系统中的目录来存储虚拟机镜像和相关数据。
- 逻辑卷管理器(LVM)存储池:使用LVM来管理逻辑卷,提供了更灵活的空间管理和快照功能。
操作一致性:
- 无论使用哪种存储池,一旦虚拟机存储卷创建完成,后续的虚拟机管理操作(如启动、关闭、迁移)与使用传统的存储方式没有任何区别。
KVM存储池在虚拟机迁移中的作用
虚拟机迁移需求:
- 存储池对于虚拟机迁移至关重要。当虚拟机在不同的物理主机间迁移时,存储池确保了虚拟机镜像和相关数据的一致性和可访问性。
迁移过程中的角色:
- 存储池不仅存储虚拟机镜像,还负责提供迁移过程中所需的数据访问能力。这包括在源主机上关闭虚拟机、传输镜像数据、在目标主机上重新打开虚拟机等操作。
制作存储池
查看初始存储池
[root@kvm-server ~]# virsh pool-list --all
名称 状态 自动开始
----------------------------
default 活动 是
opt 活动 是
定义存储池与其目录
virsh pool-define-as <存储池名称> --type <存储池类型> --target <目标路径>
这里使用的前面创建好的/test目录拿来这里使用
[root@kvm-server ~]# virsh pool-define-as cunchuku --type dir --target /test
定义池 cunchuku
创建已定义的存储池
[root@kvm-server ~]# virsh pool-build cunchuku
构建池 cunchuku
查看已定义的存储池,存储池不激活无法使用。
[root@kvm-server ~]# virsh pool-list --all
名称 状态 自动开始
--------------------------------
cunchuku 不活跃 否
default 活动 是
opt 活动 是
激活并自动启动已定义的存储池
[root@kvm-server ~]# virsh pool-start cunchuku
池 cunchuku 已启动
[root@kvm-server ~]# virsh pool-autostart cunchuku
池 cunchuku 标记为自动启动
[root@kvm-server ~]# virsh pool-list --all
名称 状态 自动开始
------------------------------
cunchuku 活动 是
default 活动 是
opt 活动 是
创建一个新的虚拟机磁盘镜像测试
[root@kvm-server ~]# virsh vol-create-as cunchuku vm1.img 2G --format qcow2
卷 vm1.img 创建了
[root@kvm-server ~]# ll /test/
总用量 196
-rw------- 1 root root 196640 8月 7 01:00 vm1.img
存储池相关管理命令
1. 在存储池中删除虚拟机存储卷
[root@kvm-server ~]# virsh vol-delete --pool cunchuku vm1.img
卷 vm1.img 被删除
2. 取消激活存储池
[root@kvm-server ~]# virsh pool-destroy cunchuku
销毁池 cunchuku
3. 删除存储池定义的目录/test
[root@kvm-server ~]# virsh pool-delete cunchuku
池 cunchuku 被删除
[root@kvm-server ~]# ll /test
ls: 无法访问 '/test': 没有那个文件或目录
4. 取消定义存储池
[root@kvm-server ~]# virsh pool-undefine cunchuku
池 cunchuku 已经被取消定义
[root@kvm-server ~]# virsh pool-list --all
名称 状态 自动开始
----------------------------
default 活动 是
opt 活动 是
KVM快照
在KVM(Kernel-based Virtual Machine)虚拟化环境中,快照(Snapshot)是一种非常有用的功能,它允许管理员在虚拟机运行时保存其当前状态的副本,以便日后需要时可以恢复到该状态。
KVM快照的概念和作用
-
定义:
- 快照是虚拟机当前状态的可写副本。它捕获了虚拟机的内存、磁盘和设备状态,使得管理员可以在以后的任何时间点恢复虚拟机到该状态。
-
作用:
- 备份和恢复:快照可以用作备份,允许在重大配置更改前捕获虚拟机的完整状态。如果更改后出现问题,可以快速恢复到之前的状态。
- 测试和开发:在测试和开发过程中,快照使得可以轻松地进行实验和回滚,而无需担心影响生产环境。
- 临时调试:对于故障排除或软件调试,可以在不影响生产环境的情况下快速创建虚拟机状态的副本。
注意事项
- 性能影响:创建和使用快照可能会对虚拟机的性能产生一定影响,特别是在磁盘写入和读取方面。
- 存储空间:快照占用额外的存储空间,尤其是在快照链变长时可能会占用大量空间。
建议给虚拟机关机打快照,会较快
先在开机状态下,随便创建几个文件用于测试
[root@kvm-server ~]# virsh list --all
Id 名称 状态
-------------------
- vm10 关闭
[root@kvm-server ~]# virsh start vm10
域 'vm10' 已启动
[root@kvm-server ~]# virsh console vm10
连接到域 'vm10'
转义字符是 ^] (Ctrl + ])
localhost login: root
Password:
Last failed login: Wed Aug 7 01:27:03 CST 2024 on ttyS0
There was 1 failed login attempt since the last successful login.
Last login: Tue Aug 6 23:52:35 on ttyS0
[root@localhost ~]# cd /
[root@localhost /]# mkdir tty
[root@localhost /]# touch ceshi.txt
[root@localhost /]# init 0 #关机
[root@kvm-server ~]# virsh list --all
Id 名称 状态
-------------------
- vm10 关闭
创建快照
[root@kvm-server ~]# virsh snapshot-create-as vm10 vm2-snap3
已生成域快照 vm2-snap3
再次登录vm10的虚拟机进行删除操作
[root@kvm-server ~]# virsh start vm10
域 'vm10' 已启动
[root@kvm-server ~]# virsh console vm10
连接到域 'vm10'
转义字符是 ^] (Ctrl + ])
localhost login: root
Password:
Last login: Wed Aug 7 01:32:11 on ttyS0
[root@localhost ~]# rm -rf /tty
[root@localhost ~]# rm -rf /var/local
[root@localhost ~]# init 0
再次打快照
[root@kvm-server ~]# virsh snapshot-create-as vm10 vm2-snap4
已生成域快照 vm2-snap4
查看该虚拟机的快照
[root@kvm-server ~]# virsh snapshot-list vm10
名称 生成时间 状态
--------------------------------------------------
vm2-snap3 2024-08-07 01:32:57 +0800 shutoff
vm2-snap4 2024-08-07 01:37:10 +0800 shutoff
恢复到快照vm2.snap3
[root@kvm-server ~]# virsh snapshot-revert vm10 vm2-snap3
域快照 vm2-snap3 恢复
再启动虚拟机,验证数据恢复
[root@kvm-server ~]# virsh start vm10
域 'vm10' 已启动
[root@kvm-server ~]# virsh console vm10
连接到域 'vm10'
转义字符是 ^] (Ctrl + ])
localhost login: root
Password:
Last login: Wed Aug 7 01:32:11 on ttyS0
[root@localhost ~]# ll / |grep tty
drwxr-xr-x. 2 root root 6 Aug 7 01:27 tty
[root@localhost ~]# ll /var |grep local
drwxr-xr-x. 2 root root 6 May 16 2022 local
按 ctrl + ] 不关机退出。
恢复到vm2-snap4快照
[root@kvm-server ~]# virsh snapshot-revert vm10 vm2-snap4
域快照 vm2-snap4 恢复
再次登录,会发现虚拟机自动关机了。
删除快照
[root@kvm-server ~]# virsh snapshot-list vm10
名称 生成时间 状态
--------------------------------------------------
vm2-snap3 2024-08-07 01:32:57 +0800 shutoff
vm2-snap4 2024-08-07 01:37:10 +0800 shutoff
# 删除vm2-snap3这个快照
[root@kvm-server ~]# virsh snapshot-delete vm10 --snapshotname vm2-snap3
已删除域快照 vm2-snap3
[root@kvm-server ~]# virsh snapshot-list vm10
名称 生成时间 状态
--------------------------------------------------
vm2-snap4 2024-08-07 01:37:10 +0800 shutoff
不指定 --snapshotname
参数,那么这个命令将会删除指定虚拟机的当前活动快照(即当前状态的快照)。
可以看到vm2-snap3已经删除。