KVM虚拟机 进阶
KVM虚拟机管理
虚拟机的基本管理命令
-
列出
在运行
状态中的虚拟机[root@kvm-server ~]# virsh list Id 名称 状态 ----------------------------------------------------
-
列出所有的虚拟机
[root@kvm-server ~]# virsh list --all Id 名称 状态 ---------------------------------------------------- - vm1 关闭
-
查看kvm虚拟机配置文件
virsh dumpxml vm_name
-
启动
kvm虚拟机[root@kvm-server ~]# virsh start vm1 域 vm1 已开始
-
暂停
kvm虚拟机[root@kvm-server ~]# virsh suspend vm1 域 vm1 被挂起
-
恢复
kvm虚拟机[root@kvm-server ~]# virsh resume vm1 域 vm1 被重新恢复
-
关闭
kvm虚拟机[root@kvm-server ~]# virsh shutdown vm1 域 vm1 被关闭
-
重启
kvm虚拟机[root@kvm-server ~]# virsh reboot vm1 域 vm1 正在被重新启动
-
重置
kvm虚拟机[root@kvm-server ~]# virsh reset vm1 #断电重启。速度快 Domain vm1 was reset
-
删除
kvm虚拟机[root@kvm-server ~]# virsh undefine vm1 Domain vm1 has been undefined
-
注意
虚拟机在开启的情况下undefine是无法删除的只是将配置文件删除了,不能删除磁盘文件。需要手动rm
-
-
kvm虚拟机
开机自动启动
如果虚拟机开机自启,里面的服务应该设置的有开机自启,不然没有意义
[root@kvm-server ~]# virsh autostart vm1 域 vm1 标记为自动开始
-
查看kvm虚拟机开机自启
此目录默认不存在,在有开机启动的虚拟机时自动创建
[root@kvm-server ~]# ls /etc/libvirt/qemu/autostart/ vm1.xml
-
关闭开机自启
kvm虚拟机[root@kvm-server ~]# virsh autostart --disable vm1 域 vm1取消标记为自动开始
-
此时查看开机自启目录
[root@kvm-server ~]# ls /etc/libvirt/qemu/autostart/ [root@kvm-server ~]#
-
-
查看
已启动
的kvm虚拟机的IP地址
- 前提是vm1虚拟机已启动
[root@kvm-server ~]# virsh domifaddr vm1 名称 MAC 地址 Protocol Address ------------------------------------------------------------------------------- vnet0 52:54:00:82:d6:3c ipv4 192.168.122.85/24
-
注意
如果VMware创建时用的是桥接,那么kvm虚拟机可能不显示IP 解决方法: 把VMware改为NAT模式,然后重启,就可以了
虚拟机添加设备
1.图形方式
首先,
关闭
要添加硬件的虚拟机
双击虚拟机,在打开的对话框点击上方的View,点击Details,点击Add Hardware可以选择要添加的虚拟硬件
按需求选择就可以
2.修改配置文件方式
我们给虚拟机vm3添加磁盘为例:
-
首先需要创建出要添加的磁盘
[root@kvm-server ~]# qemu-img create -f qcow2 /var/lib/libvirt/images/vm4-1.qcow2 5G
-
注意
创建空的磁盘文件:这里我们创建一个5G的磁盘,不过创建出来,通过ll -h查看大小,看不出它是5G,添加上之后才能看到
-
-
修改配置文件
[root@kvm-server ~]# cd /etc/libvirt/qemu/ [root@kvm-server qemu]# vim vm3.xml
-
启动虚拟机
[root@kvm-server qemu]# systemctl restart libvirtd [root@kvm-server qemu]# virsh list --all Id 名称 状态 ---------------------------------------------------- 6 vm1 running - vm3 关闭 [root@kvm-server qemu]# virsh start vm3
可以看到我们新添加的磁盘vdb #然后可以正常分区,制作文件系统,进行挂载
虚拟机克隆
1.图形界面
-
步骤
图形界面:Applications (左上角)-----> System Tools ------>Virtual Machine Manager 关闭要克隆的虚拟机,右键点击虚拟机选择Clone
2.终端执行命令克隆
[root@kvm-server ~]# virt-clone -o vm2 --auto-clone
正在分配 'vm2-clone.qcow2' | 5.0 GB 00:00
成功克隆 'vm2-clone'。
-o origin-原始
[root@kvm-server ~]# virt-clone -o vm2 -n vm5 --auto-clone
正在分配 'vm5.qcow2' | 5.0 GB 00:00
成功克隆 'vm5'。
-n :指定新客户机的名字
[root@kvm-server ~]# virt-clone -o vm2 -n vm6 -f /var/lib/libvirt/images/vm6.img
正在分配 'vm6.img' | 5.0 GB 00:00
成功克隆 'vm6'。
-f ,--file NEW_DISKFILE:为新客户机使用新的磁盘镜像文件
这条命令在克隆的同时,可以指定镜像文件的位置和名称。
[root@kvm-server ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
- vm2 关闭
- vm2-clone 关闭
- vm3 关闭
- vm5 关闭
- vm6 关闭
KVM高级命令
建立虚拟机磁盘镜像文件
磁盘镜像文件格式
-
qed
已经不用了,这里不做过多讲解
-
raw
原始格式,性能最好 直接占用你一开始给多少空间 系统就占多少空间 不支持快照
-
qcow
先去网上了解一下cow(写时拷贝copy on write) ,性能远不能和raw相比,所以很快夭折了,所以出现了qcow2(性能低下 早就被抛弃)
-
qcow2
性能上还是不如raw,但是raw不支持快照,qcow2支持快照。
写时拷贝
- raw
立刻分配
空间,不管你有没有用到那么多空间 - qcow2只是
承诺
给你分配空间,但是只有当你需要用空间的时候,才会给你空间。最多只给你承诺空间的大小,避免空间浪费
1.建立qcow2格式磁盘文件
[root@kvm-server images]# qemu-img create -f qcow2 test.img 5G
Formatting 'test.img', fmt=qcow2 size=5368709120 encryption=off cluster_size=65536 lazy_refcounts=off
2.建立raw格式磁盘文件
[root@kvm-server images]# qemu-img create -f raw test.raw 5G
Formatting 'test.raw', fmt=raw size=5368709120
查看已经创建的虚拟机磁盘文件
[root@kvm-server images]# qemu-img info test.img
[root@kvm-server images]# qemu-img info test.raw
挂载磁盘
-
为什么需要挂载磁盘
当kvm虚拟机不能正常打开时,里面的内容又比较重要 所以我们需要把磁盘挂载出来 把重要文件拷贝一份
-
这么做必须有一个前提
-
文件系统没有坏掉
这里以vm2虚拟机为例
查看vm2的磁盘镜像分区信息:
[root@kvm-server images]# virt-df -h -d vm2
文件系统 大小 已用空间 可用空间 使用百分比%
vm2:/dev/sda1 1014M 92M 922M 10%
vm2:/dev/centos/root 3.5G 863M 2.6G 25%
1.创建一个挂载目录
[root@kvm-server images]# mkdir /test
2.挂载虚拟机的根分区到test目录
[root@kvm-server images]# guestmount -d vm2 -m /dev/centos/root --rw /test/
[root@kvm-server images]# cd /test/
[root@kvm-server test]# ls
bin dev home lib64 mnt proc run srv tmp var
boot etc lib media opt root sbin sys usr
[root@kvm-server test]# cat etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:997:User for polkitd:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
取消挂载
[root@kvm-server ~]# guestunmount /test
KVM存储配置
存储池
-
概念
kvm必须要配置一个目录当作存储磁盘镜像(存储卷)的目录,我们称这个目录为存储池
-
kvm默认存储池的位置
/var/lib/libvirt/images/
这里只介绍命令方式
-
创建基于文件夹的存储池(目录,可自定义)
[root@kvm-server ~]# mkdir -p /data/vmfs
-
定义存储池与其目录
[root@kvm-server ~]# virsh pool-define-as vmdisk --type dir --target /data/vmfs Pool vmdisk defined
解释:vmdisk是新建的存储池的名称。可自定义
-
创建已定义的存储池
-
创建已定义的存储池
[root@kvm-server ~]# virsh pool-build vmdisk Pool vmdisk built
-
查看已定义的存储池,存储池不激活无法使用
[root@kvm-server ~]# virsh pool-list --all Name State Autostart ------------------------------------------- default active yes ISO active yes vmdisk inactive no
-
-
激活并自动启动已定义的存储池
[root@kvm-server ~]# virsh pool-start vmdisk #启动 Pool vmdisk started [root@kvm-server ~]# virsh pool-autostart vmdisk #开机自启 Pool vmdisk marked as autostarted
[root@kvm-server ~]# virsh pool-list --all Name State Autostart ------------------------------------------- default active yes ISO active yes vmdisk active yes
这里vmdisk存储池就已经创建好了,可以直接在这个存储池中创建虚拟磁盘文件了
-
在存储池中创建虚拟机存储卷
[root@kvm-server ~]# virsh vol-create-as vmdisk vm99.qcow2 2G --format qcow2 Vol vm99.qcow2 created
查看
[root@kvm-server ~]# ll /data/vmfs/ -h 总用量 196K -rw------- 1 root root 193K 10月 25 16:04 vm99.qcow2
-
存储池相关管理命令
-
在存储池中删除虚拟机存储卷
[root@kvm-server ~]# virsh vol-delete --pool vmdisk vm99.qcow2 Vol vm99.qcow2 deleted
-
取消激活存储池
[root@kvm-server ~]# virsh pool-destroy vmdisk Pool vmdisk destroyed
-
删除存储池定义的目录/data/vmfs
[root@kvm-server ~]# virsh pool-delete vmdisk Pool vmdisk deleted
-
取消定义存储池
[root@kvm-server ~]# virsh pool-undefine vmdisk Pool vmdisk has been undefined
-
到此kvm存储池配置与管理操作完毕
KVM快照
为虚拟机vm2创建一个快照(磁盘格式必须为qcow2)
[root@kvm-server ~]# virsh snapshot-create-as vm2 vm2.snap1
注意:如果在创建快照的时候报错:
error: unsupported configuration: internal snapshot for disk vda unsupported for storage type raw
raw不支持snapshot
查看磁盘文件格式
[root@kvm-server images]# qemu-img info /var/lib/libvirt/images/vm2.qcow2
image: /var/lib/libvirt/images/vm2.qcow2
file format: qcow2
virtual size: 5.0G (5368709120 bytes)
disk size: 5.0G
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: true
[root@kvm-server ~]# virsh snapshot-list vm2 #查看某台虚拟机设备的快照
Name Creation Time State
------------------------------------------------------------
创建一块磁盘
[root@kvm-server ~]# qemu-img create -f raw /var/lib/libvirt/images/vm2-1.raw 2G
Formatting '/var/lib/libvirt/images/vm2-1.raw', fmt=raw size=2147483648
[root@kvm-server ~]# ll -h /var/lib/libvirt/images/vm2-1.raw
-rw-r--r-- 1 root root 2.0G 10月 25 16:25 /var/lib/libvirt/images/vm2-1.raw
将其添加到vm2虚拟机上面
[root@kvm-server ~]# cd /etc/libvirt/qemu/
[root@kvm-server qemu]# vim vm2.xml
[root@kvm-server images]# virsh define /etc/libvirt/qemu/vm2.xml
[root@kvm-server images]# virsh start vm2
[root@kvm-server qemu]# virsh snapshot-create-as vm2 vm2.snap1
错误:不支持的配置:存储类型 vdb 不支持磁盘 raw 的内部快照
#磁盘格式的转换
由于raw的磁盘格式,不支持快照功能,我们需要将其转换为qcow2的格式
[root@kvm-server qemu]# qemu-img convert -O qcow2 /var/lib/libvirt/images/vm2-1.raw /var/lib/libvirt/images/vm2-1.qcow2
[root@kvm-server qemu]# cd /var/lib/libvirt/images/
[root@kvm-server images]# ll -h
总用量 21G
-rw------- 1 root root 5.1G 10月 24 18:59 centos7.0.qcow2
-rw-r--r-- 1 root root 193K 10月 25 16:44 vm2-1.qcow2
-rw-r--r-- 1 root root 2.0G 10月 25 16:25 vm2-1.raw
-rw------- 1 root root 5.1G 10月 25 16:13 vm2.qcow2
[root@kvm-server images]# qemu-img info /var/lib/libvirt/images/vm2-1.qcow2
image: /var/lib/libvirt/images/vm2-1.qcow2
file format: qcow2
virtual size: 2.0G (2147483648 bytes)
disk size: 196K
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: false
然后去修改vm2虚拟机的磁盘格式和名称
[root@kvm-server images]# vim /etc/libvirt/qemu/vm2.xml
[root@kvm-server images]# virsh define /etc/libvirt/qemu/vm2.xml
创建快照
[root@kvm-server qemu]# virsh snapshot-create-as vm2 vm2.snap2
已生成域快照 vm2.snap2
然后我们开始做快照,图形化方式不再介绍
登录vm2的虚拟机:
[root@vm2 ~]# mkdir /opt/test
[root@kvm-server ~]# virsh snapshot-create-as vm2 vm2-snap3
已生成域快照 vm2-snap3
再次登录vm2的虚拟:
[root@vm2 ~]# rm -rf /opt/test/
[root@kvm-server ~]# virsh shutdown vm2
[root@kvm-server ~]# virsh snapshot-create-as vm2 vm2-snap4
已生成域快照 vm2-snap4
查看快照
[root@kvm-server ~]# virsh snapshot-list vm2
名称 生成时间 状态
------------------------------------------------------------
vm2-snap3 2019-10-30 15:27:15 +0800 running
vm2-snap4 2019-10-30 15:29:37 +0800 shutoff
然后将vm2关闭,恢复到快照vm2.snap3
[root@kvm-server ~]# virsh snapshot-revert vm2 vm2-snap3
[root@kvm-server ~]# virsh start vm2
Domain vm2 started
在vm2虚拟机上查看
[root@vm2 ~]# ls /opt/
test
可以再恢复到vm2.snap4测试一下
删除虚拟机快照操作:
[root@kvm-server ~]# virsh shutdown vm2
[root@kvm-server ~]# virsh snapshot-list vm2
名称 生成时间 状态
------------------------------------------------------------
vm2-snap3 2019-10-30 15:27:15 +0800 running
vm2-snap4 2019-10-30 15:29:37 +0800 shutoff
[root@kvm-server ~]# virsh snapshot-delete --snapshotname vm2-snap3 vm2
已删除域快照 vm2-snap3
[root@kvm-server ~]# virsh snapshot-list vm2
名称 生成时间 状态
------------------------------------------------------------
vm2-snap4 2019-10-30 15:27:15 +0800 running
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 木偶
评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果