kvm虚拟机管理之一(磁盘压缩,用户密码重设,快照建立)

简介: kvm虚拟机管理之一(磁盘压缩,用户密码重设,快照建立)

kvm的虚拟机安装完毕后仅仅是万里长征的第一步,后面还有许多的事情要处理,比如,kvm镜像的定制--根据需求添加用户,更改root用户密码(为什么要说更改root用户密码?很多同学会有疑问,kvm镜像启动进系统passwd命令就搞定的事情,还需要说嘛?其实是官方的kvm镜像root密码是需要更改的,有的时候连初始密码都没有的哦),添加新的磁盘到kvm镜像内,或者出于安全考虑给kvm镜像做快照,如果有多个快照,如何管理这些快照也是一个问题。当然,如果有N个kvm镜像,这些镜像需不需要随系统启动而启动,如果停止了如何让它启动,等等都是需要做的管理工作。

kvm镜像的压缩

kvm镜像压缩目前知道的有两种方法,第一是使用qemu-img 直接操作kvm镜像压缩,第二是使用管理工具libguestfs-tools 里的工具virt-syprep和virt-sparsify压缩。

(1)qemu-img直接操作kvm镜像压缩

比如,我有一个自制的linux镜像 linux.img 这个文件,压缩成new.linux.img 这个文件,压缩命令为:

qemu-img convert -c -O qcow2 linux.img new.linux.img

那么,我们可以对比一下压缩前后镜像的大小,可以看到压缩效果比较明显,从1.3G缩小到了621M,并且新镜像也是可以用的哦:

[root@centos1 opt]# ls -alh
total 2.0G
drwxr-xr-x.  4 root root  162 May 14 22:39 .
dr-xr-xr-x. 17 root root  244 May 14 19:19 ..
drwxr-xr-x   3 root root  16K May 14 19:23 kvm-1.5.3
-rw-r--r--   1 root root 110M May 14 19:28 kvm-1.5.3.tar.gz
drwxr-xr-x   3 root root 4.0K May  9 20:26 libguestfs-tools
-rw-r--r--   1 root root  11M May 14 19:21 libguestfs-tools.tar.gz
-rw-r--r--   1 root root 1.3G May 15 09:40 linux.img
-rw-r--r--   1 root root 3.8K May 14 22:00 linux_mini.xml
-rw-r--r--   1 root root 621M May 14 22:41 new.linux.img

(2)

先通过virt-sysprep -d kvm镜像名称   清理机器信息,然后通过virt-sparsify --compress 原有镜像文件 压缩的镜像文件

这里需要注意一下,通过xml文件方式启动的kvm镜像,需要先define定义,然后在清理,说人话就是,虚拟机必须是关机状态,必须将xml文件先定义。否则虚拟机关闭后,virsh list 将不会看到虚拟机的domain也就是域。

执行清理命令前,需要export LIBGUESTFS_BACKEND=direct,一般报错提示会给这个的哦。

virt-sysprep -d kvm镜像名称 这里是virsh list --all 里面查到的那个名字,virt-sparsify --compress 原有镜像文件 指的是 img文件。

[root@centos1 opt]# virsh define linux_mini.xml 
Domain linux_mini defined from linux_mini.xml
[root@centos1 opt]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 -     linux_mini                     shut off
[root@centos1 opt]# virt-sysprep -d  linux_mini
[   0.0] Examining the guest ...
virt-sysprep: error: libguestfs error: could not create appliance through 
libvirt.
Try running qemu directly without libvirt using this environment variable:
export LIBGUESTFS_BACKEND=direct
Original error from libvirt: unsupported configuration: shared access for 
disk 'sdb' requires use of supported storage format [code=67 int1=-1]
If reporting bugs, run virt-sysprep with debugging enabled and include the 
complete output:
  virt-sysprep -v -x [...]
[root@centos1 opt]# export LIBGUESTFS_BACKEND=direct
[root@centos1 opt]# virt-sysprep -d linux_mini
[   0.0] Examining the guest ...
[   4.7] Performing "abrt-data" ...
[   4.7] Performing "backup-files" ...
[   6.1] Performing "bash-history" ...
[   6.1] Performing "blkid-tab" ...
[   6.1] Performing "crash-data" ...
[   6.1] Performing "cron-spool" ...
[   6.1] Performing "dhcp-client-state" ...
[   6.1] Performing "dhcp-server-state" ...
[   6.1] Performing "dovecot-data" ...
[   6.1] Performing "logfiles" ...
[   6.3] Performing "machine-id" ...
[   6.3] Performing "mail-spool" ...
[   6.3] Performing "net-hostname" ...
[   6.3] Performing "net-hwaddr" ...
[   6.3] Performing "pacct-log" ...
[   6.3] Performing "package-manager-cache" ...
[   6.3] Performing "pam-data" ...
[   6.3] Performing "passwd-backups" ...
[   6.3] Performing "puppet-data-log" ...
[   6.3] Performing "rh-subscription-manager" ...
[   6.3] Performing "rhn-systemid" ...
[   6.3] Performing "rpm-db" ...
[   6.3] Performing "samba-db-log" ...
[   6.3] Performing "script" ...
[   6.3] Performing "smolt-uuid" ...
[   6.3] Performing "ssh-hostkeys" ...
[   6.3] Performing "ssh-userdir" ...
[   6.3] Performing "sssd-db-log" ...
[   6.3] Performing "tmp-files" ...
[   6.3] Performing "udev-persistent-net" ...
[   6.3] Performing "utmp" ...
[   6.3] Performing "yum-uuid" ...
[   6.3] Performing "customize" ...
[   6.3] Setting a random seed
[   6.4] Performing "lvm-uuids" ...
[root@centos1 opt]# virt-sparsify --compress linux.img newer.linux.img
[   0.0] Create overlay file in /tmp to protect source disk
[   0.1] Examine source disk
[   3.4] Clearing Linux swap on /dev/centos/swap
◓ 34% ⟦▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒═════════════════════════
略略略
▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒⟧ 00:00
[ 159.0] Copy to destination and make sparse
[ 336.8] Sparsify operation completed with no errors.
virt-sparsify: Before deleting the old disk, carefully check that the 
target disk boots and works correctly

可以看到,第二种方式压缩出来的文件更小了,达到了490M,比原来的1.3G小很多了。

[root@centos1 opt]# ls -alh
total 2.5G
drwxr-xr-x.  4 root root  185 May 15 10:01 .
dr-xr-xr-x. 17 root root  244 May 14 19:19 ..
drwxr-xr-x   3 root root  16K May 14 19:23 kvm-1.5.3
-rw-r--r--   1 root root 110M May 14 19:28 kvm-1.5.3.tar.gz
drwxr-xr-x   3 root root 4.0K May  9 20:26 libguestfs-tools
-rw-r--r--   1 root root  11M May 14 19:21 libguestfs-tools.tar.gz
-rw-r--r--   1 root root 1.3G May 15 09:57 linux.img
-rw-r--r--   1 root root 3.8K May 14 22:00 linux_mini.xml
-rw-r--r--   1 root root 490M May 15 10:04 newer.linux.img
-rw-r--r--   1 root root 621M May 14 22:41 new.linux.img

kvm镜像的用户密码重设问题

用户密码重设通常使用libguestfs-tools 工具集内的virt-customize命令重设。

例如我的kvm磁盘镜像文件存放在/opt目录下:

[root@centos1 opt]# ls -alh linux.img
-rw-r--r-- 1 root root 1.3G May 15 09:57 linux.img

如果有报错,需要执行环境变量的设置:

export LIBGUESTFS_BACKEND=direct

重置密码前需要确保该kvm镜像文件没有被任何domain使用。

[root@centos1 opt]# virt-customize -a /opt/linux.img --root-password password:123456
[   0.0] Examining the guest ...
[   6.4] Setting a random seed
[   6.4] Setting passwords
[   8.8] Finishing off

此时,再次启用这个kvm镜像,就可以使用密码123456登录啦。 root密码都有了,登录上去,也就别的任意密码都有了。

kvm镜像的快照建立和管理的问题

虚拟机快照按虚拟机的状态,分为两种,冷备和热备,冷备指的是kvm虚拟机是关机状态,热备指的是kvm虚拟机是开机状态,kvm的快照和vm的快照是基本一样的。

虚拟机的快照安装建立快照的方式分为三种,第一种是磁盘快照,对应的命令是 virsh snapshot第二种是内存状态快照,对应的命令是 virsh save

(1)

磁盘快照---类似vm里的快照功能,是一个独立的快照系统。

可以看到,通过virsh snapshot-create-as 命令打出来的快照时间,快照实际上做的是虚拟机的XML配置文件,默认快照XML文件在/var/lib/libvirt/qemu/snapshot/

,因此,kvm的快照速度是很快的,并且基本没有什么空间占用的问题,也因此,如果需要对快照进行管理,其实我们只需要将上述文件夹内的xml管理好就可以了。

[root@centos1 opt]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 -     linux_mini                     shut off
[root@centos1 opt]# virsh snapshot-create-as linux_mini linux_min-snap
Domain snapshot linux_min-snap created
[root@centos1 opt]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 -     linux_mini                     shut off
[root@centos1 opt]# virsh info newer.linux.img 
error: unknown command: 'info'
[root@centos1 opt]# qemu-img  info newer.linux.img 
image: newer.linux.img
file format: qcow2
virtual size: 15G (16106127360 bytes)
disk size: 496M
cluster_size: 65536
Snapshot list:
ID        TAG                 VM SIZE                DATE       VM CLOCK
1         linux_min-snap            0 2022-05-15 10:42:23   00:00:00.000
Format specific information:
    compat: 1.1
    lazy refcounts: false

快照的恢复分为两个步骤:第一,查询某个虚拟机的现有快照名称,第二,根据快照名称,使用snapshot-revert参数恢复快照。

建立一个快照,名称为new-snapshot,此时kvm虚拟机是开启的时候建立的快照

[root@centos1 linux_mini]# virsh snapshot-create-as linux_mini new-snapshot
Domain snapshot new-snapshot created

查询到了这个快照名称 

[root@centos1 linux_mini]# virsh snapshot-list linux_mini
 Name                 Creation Time             State
------------------------------------------------------------
 linux_min-snap       2022-05-15 10:42:23 +0800 shutoff
 new-snapshot         2022-05-15 14:34:29 +0800 running

 使用刚才建立的这个new快照,恢复,可以看到虚拟机状态从关机变为开机状态

[root@centos1 linux_mini]# virsh snapshot-revert   linux_mini new-snapshot
[root@centos1 linux_mini]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 9     linux_mini                     running

通过 virsh snapshot-current 虚拟机名称 可以看到,两个快照中的new快照有在运行。

[root@centos1 linux_mini]# virsh snapshot-current linux_mini
<domainsnapshot>
  <name>new-snapshot</name>
  <state>running</state>
  <parent>
    <name>linux_min-snap</name>
  </parent>
  <creationTime>1652596469</creationTime>

观察宿主机的磁盘使用率可以发现,每生成一个快照(开机状态下的kvm虚拟机),会增加一个kvm虚拟机的大小使用,而关机状态下的kvm虚拟机打快照基本没有什么占用。

/dev/mapper/centos-root   50G  4.1G   46G   9% /
/dev/mapper/centos-root   50G  4.6G   46G  10% /

因此,虚拟机快照应该是在关机状态下建立的哦,否则会多出很多磁盘空间占用。

多说一句,有建立快照的kvm镜像是不允许undefine的哦,如果想要undfine,需要将快照全部删除的哦:

[root@centos1 opt]# virsh undefine linux_mini
error: Failed to undefine domain linux_mini
error: Requested operation is not valid: cannot delete inactive domain with 4 snapshots

删除快照:

[root@centos1 opt]# virsh snapshot-list linux_mini
 Name                 Creation Time             State
------------------------------------------------------------
 linux_min-snap       2022-05-15 10:42:23 +0800 shutoff
 new-snapshot         2022-05-15 14:34:29 +0800 running
 newer-snapshot       2022-05-15 14:50:31 +0800 running
 newset-snapshot      2022-05-15 14:54:49 +0800 shutoff
[root@centos1 opt]# virsh snapshot-delete linux_mini linux_min-snap
Domain snapshot linux_min-snap deleted
[root@centos1 opt]# virsh snapshot-delete linux_mini new-snapshot
Domain snapshot new-snapshot deleted
[root@centos1 opt]# virsh snapshot-delete linux_mini newer-snapshot
Domain snapshot newer-snapshot deleted
[root@centos1 opt]# virsh snapshot-delete linux_mini newset-snapshot
Domain snapshot newset-snapshot deleted
[root@centos1 opt]# virsh  undefine  linux_mini 
Domain linux_mini has been undefined

逐个删除快照后,就可以undefine啦。

(2)内存快照---比较类似vm的克隆,但和克隆又不是一回事,一个独立的另一个快照系统。

[root@centos1 images]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 10    linux_mini                     running
[root@centos1 images]# virsh save linux_mini  /opt/linux_mini_save --bypass-cache --running
Domain linux_mini saved to /opt/linux_mini_save
[root@centos1 images]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 -     linux_mini                     shut off

此时可以看到,内存快照生成指定在了/opt目录下名字为linux_mini_save ,原来的虚拟机格式为qcow2格式,现在快照为raw格式,大小从621M变为了239M:

[root@centos1 opt]# qemu-img info linux_mini_save 
image: linux_mini_save
file format: raw
virtual size: 239M (250549248 bytes)
disk size: 239M

恢复快照就比较简单了,直接restore 快照文件就可以啦,当然了,save的快照文件不是通过libvrit服务管理的,因此,virsh snapshot-list 命令是看不到的哦:

[root@centos1 opt]# virsh shutdown linux_mini
Domain linux_mini is being shutdown
[root@centos1 opt]# virsh restore linux_mini_save 
Domain restored from linux_mini_save
[root@centos1 opt]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 12    linux_mini                     running


目录
相关文章
|
1月前
|
数据库 虚拟化 Windows
虚拟机数据恢复—XenServer虚拟机磁盘文件丢失的数据恢复案例
虚拟机数据恢复环境: 某品牌服务器通过同品牌某型号的RAID卡,将4块STAT硬盘为一组RAID10阵列。上层部署XenServer虚拟化平台,虚拟机安装Windows Server系统,每台虚拟机有两个虚拟机磁盘(系统盘 + 数据盘),虚拟机作为Web服务器使用。 虚拟机故障&分析: 机房异常断电导致服务器中一台VPS(XenServer虚拟机)不可用,虚拟磁盘文件丢失。
|
9天前
|
存储 SQL 数据库
虚拟化数据恢复—Vmware虚拟机误还原快照的数据恢复案例
虚拟化数据恢复环境: 一台虚拟机从物理机迁移到ESXI虚拟化平台,迁移完成后做了一个快照。虚拟机上运行了一个SQL Server数据库,记录了数年的数据。 ESXI虚拟化平台上有数十台虚拟机,EXSI虚拟化平台连接了一台EVA存储,所有的虚拟机都存放在EVA存储上。 虚拟化故障: 工组人员误操作将数年前迁移完成后做的快照还原了,也就意味着虚拟机状态还原到数年前,近几年数据都被删除了。 还原快照相当于删除数据,意味着部分存储空间会被释放。为了不让这部分释放的空间被重用,需要将连接到这台存储的所有虚拟机都关掉,需要将不能长时间宕机的虚拟机迁移到别的EXSI虚拟化平台上。
84 50
|
1月前
|
Linux 测试技术 虚拟化
解决虚拟机文件因快照占用硬盘空间较多的情况(压缩虚拟机文件,节省硬盘空间)
解决虚拟机文件因快照占用硬盘空间较多的情况(压缩虚拟机文件,节省硬盘空间)
133 1
|
2月前
|
KVM 虚拟化
KVM虚拟机的热迁移
这篇文章详细介绍了KVM虚拟机的热迁移过程,包括临时迁移和永久迁移的步骤,以及可能遇到的故障和解决方案。
106 1
KVM虚拟机的热迁移
|
1月前
|
Kubernetes Linux 容器
解决删除快照后启动虚拟机显示指定的文件不是虚拟磁盘 打不开磁盘“路径”或它所依赖的某个快照磁盘。 模块“disk”启动失败。 未能启动虚拟
解决删除快照后启动虚拟机显示指定的文件不是虚拟磁盘 打不开磁盘“路径”或它所依赖的某个快照磁盘。 模块“disk”启动失败。 未能启动虚拟
128 0
|
2月前
|
存储 SQL 数据挖掘
虚拟化数据恢复—EXSI虚拟机误还原快照的数据恢复案例
虚拟化技术原理是将硬件虚拟化供不同的虚拟机使用,一台物理机上可以有多台虚拟机。人为误操作或者物理机故障会导致上层虚拟机不可用,甚至虚拟机里的重要数据丢失。下面给大家分享一个vmware虚拟化误操作还原快照的数据恢复案例。 虚拟化数据恢复环境: 一台由物理机迁移到EXSI上面的虚拟机,迁移完成后做了一个快照。该虚拟机上运行SQL Server数据库,记录了几年的数据。 EXSI虚拟化平台上一共有数十台虚拟机,EXSI连接了一台EVA存储,所有的虚拟机(包括故障虚拟机)都放在EVA存储上。
|
2月前
|
KVM 虚拟化
KVM虚拟机的冷迁移
这篇文章详细描述了KVM虚拟机的冷迁移过程,包括无依赖环境迁移、有链接克隆虚拟机迁移、多块磁盘迁移的案例,以及可能遇到的错误和解决方案。
86 3
|
29天前
|
安全 虚拟化 数据中心
Xshell 连接 VMware虚拟机操作 截图和使用
Xshell 连接 VMware虚拟机操作 截图和使用
48 4
|
1月前
|
Linux 虚拟化
vmware虚拟机安装2024(超详细)
vmware虚拟机安装2024(超详细)
277 6
|
1月前
|
虚拟化 网络虚拟化 网络架构
虚拟机 VMware Workstation 16 PRO 的网络配置
虚拟机 VMware Workstation 16 PRO 的网络配置