虚拟机的组成部分:
- 虚拟机配置文件
[root@localhost ~]# ls /etc/libvirt/qemu/ networks vm1.xml
- 储存虚拟机的介质
[root@localhost ~]# ls /var/lib/libvirt/images/ vm1.img
一、虚拟机的基本管理命令
#查看虚拟机
[root@localhost ~]# virsh list
Id 名称 状态
----------------------------------------------------
2 vm1 running
[root@localhost ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
2 vm1 running
- vm2 关闭
#查看配置文件
[root@localhost ~]# virsh dumpxml vm1
#将vm1虚拟机的配置文件保存至vm3.xml
[root@localhost ~]# virsh dumpxml vm1 > /etc/libvirt/qemu/vm3.xml
#修改vm3的配置文件
[root@localhost ~]# virsh edit vm3
如果直接用vim编辑器修改配置文件的话,需要重启libvirtd服务
#启动
[root@localhost ~]# virsh start vm2
域 vm2 已开始
#挂起虚拟机,注:宿主机关机,虚拟机也会关机
[root@localhost ~]# virsh suspend vm2
#恢复虚拟机
[root@localhost ~]# virsh resume vm2
#关闭虚拟机
方法1:
[root@localhost ~]# virsh shutdown vm2
方法2:不推荐此方法,有可能会对虚拟机产生损坏
[root@localhost ~]# virsh destroy vm2
#重启虚拟机
[root@localhost ~]# virsh reboot vm2
#重置虚拟机,不是100%恢复到初始状态
[root@localhost ~]# virsh reset vm2
#删除虚拟机,此步为删除了配置文件
[root@localhost ~]# virsh undefine vm2
手动删除镜像文件
[root@localhost ~]# rm -rf /var/lib/libvirt/images/vm2.img
注意:虚拟机在开启的情况下undefine是无法删除的,但是如果再destroy会直接被删除掉
#虚拟机开机自动启动
[root@localhost ~]# virsh autostart vm1
[root@localhost ~]# ls /etc/libvirt/qemu/autostart/ #此目录默认不存在,在有开机启动的虚拟机时自动创建
vm1.xml
#取消虚拟机开机自动启动
[root@localhost ~]# virsh autostart --disable vm1
[root@localhost ~]# ls /etc/libvirt/qemu/autostart/
#获取虚拟机IP
方式一:
[root@localhost ~]# virsh domifaddr vm1
名称 MAC 地址 Protocol Address
-------------------------------------------------------------------------------
vnet0 52:54:00:12:07:10 ipv4 192.168.122.55/24
方式二:
[root@localhost ~]# virsh dumpxml vm1 |grep 'mac address'
<mac address='52:54:00:12:07:10'/>
[root@localhost ~]# arp -a |grep "52:54:00:12:07:10"
? (192.168.122.55) at 52:54:00:12:07:10 [ether] on virbr0
二、虚拟机添加设备
1. 图形化方式
2. 修改配置文件方式
修改的机器需要先关机,修改完成后开机验证,添加磁盘的话,需要对新添加的分区
#修改vm2的配置文件
[root@localhost ~]# virsh edit vm2
#内存大小直接更改
<memory unit='KiB'>536000</memory>
<currentMemory unit='KiB'>536000</currentMemory>
#CPU直接更改
<vcpu placement='static'>2</vcpu>
#此区域为磁盘,添加新磁盘,复制此区域修改即可
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2'/>
<source file='/var/lib/libvirt/images/vm2.img'/> #需要创建 source file 实体镜像文件
<target dev='vda' bus='virtio'/> #修改 target dev 磁盘名称
<address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/> #修改 slot 插槽,找一个没被占用的
</disk>
#此区域为网卡,#添加新网卡,复制此区域修改即可
<interface type='network'>
<mac address='52:54:00:19:07:10'/> #需要修改 mac address mac地址
<source network='default'/>
<model type='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> #修改 slot 插槽,找一个没被占用的
</interface>
#创建空的磁盘文件
[root@localhost ~]# qemu-img create -f qcow2 /var/lib/libvirt/images/vm2_2.img 5G #-f类型,文件路径,文件大小
三、虚拟机克隆
1. 图形化方式
关机状态才可以克隆
2. 文本模式
[root@localhost ~]# virt-clone -o vm1 --auto-clone #-o指定克隆对象
[root@localhost ~]# virt-clone -o vm1 -n vm2 --auto-clone #-n指定克隆出的名称
[root@localhost ~]# virt-clone -o vm1 -n vm2 -f /var/lib/libvirt/images/vm2.img #-f指定克隆出的镜像
四、高级命令
1. 建立虚拟机磁盘镜像文件
- 磁盘镜像文件格式:
- raw 原始格式,性能最好 直接占用你一开始给多少 系统就占多少 不支持快照
- qcow 性能远不能和 raw 相比,很快夭折了,然后出现了qcow2。
qcow2 性能上还是不如raw,但是raw不支持快照,qcow2支持快照。
现在默认安装好的用的是raw格式,所有做快照要把他转换成qcow2格式
什么叫写时拷贝?
raw立刻分配空间,不管你有没有用到那么多空间
qcow2只是承诺给你分配空间,但是只有当你需要用空间的时候,才会给你空间。最多只给你承诺空间的大小,避免空间浪费工作当中用哪个?看你用不用快照。
工作当中虚拟机会有多个备份,一个坏了,再起一个就行了,所有没必要用快照。当然也不一定。
数据绝对不会存储到本地。qemu-kvm qemu是早先的一个模拟器,kvm是基于qemu发展出来的。
#建立qcow2格式磁盘文件
[root@localhost ~]#qemu-img create -f qcow2 test.qcow2 20G
#建立raw格式磁盘文件
[root@localhost ~]#qemu-img create -f raw test.raw 20G
#查看已经创建的虚拟磁盘文件
[root@localhost ~]#qemu-img info /var/lib/libvirt/images/vm2.img
2. 使用Libguestfs修复虚拟机
作为虚拟化环境管理员,你肯定遇到过虚拟机无法启动的情况。实施排错时,你需要对虚拟机的内部进行检查。而Libguestfs Linux工具集可以在这种情况下为你提供帮助。
Libguestfs允许在虚拟机上挂载任何类型的文件系统,以便修复启动故障。
使用Libguestfs,首先需要使用Libvirt。Libvirt是一个管理接口,可以和KVM、Xen和其他一些基于Liunx的虚拟机相互连接。Libguestfs的功能更加强大,可以打开Windows虚拟机上的文件。但是首先你需要将虚拟机迁移到libguestfs可用的环境当中,也就是Linux环境。
使用guestfish操作虚拟机磁盘镜像文件
[root@localhost ~]# yum -y install libguestfs-tools
[root@localhost ~]# guestfish --rw -a /path/to/windows.vmdk
><fs> run #进入交互式shell之后第一个命令
><fs> list-filesystems #列出磁盘镜像文件内的文件系统
/dev/vda1: ext4
/dev/vdb1: iso9660
/dev/VolGroup/lv_root: ext4
/dev/VolGroup/lv_swap: swap
><fs> mount /dev/VolGroup/lv_root / #将内容挂载到根目录下
><fs> ls / #ls命令查看跟下内容 ,不能使用cd命令
bin boot dev etc home lib lib64 lost+found
><fs> cat /etc/passwd #查看文件,不能像在其他shell环境中一样操作。目录所有路径必须从根开始
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
在guestfish shell当中可以使用像ls、cat、more、download这样的命令,来查看和下载文件以及目录
#查看帮助,这两个帮助显示的内容不一样
[root@localhost ~]# guestfish --help
[root@localhost ~]# guestfish -h
Virt-rescue提供直接访问方式
这种方式跟linux系统光盘的rescue模式几乎一样,进去之后首先需要查看文件系统,然后手动挂载到/sysroot目录下,进入/sysroot目录就可以随意操作虚拟磁盘镜像内的文件了
#进入修复模式,help查看帮助
[root@localhost ~]# virt-rescue vm1
><rescue>fdisk -l #列出分区
><rescue>mount /dev/mapper/VolGroup-lv_root /sysroot/ #挂载分区
><rescue>cd /sysroot/
><rescue>ls
#查看磁盘镜像分区信息
[root@localhost ~]# virt-df -h -d vm1
Filesystem Size Used Available Use%
vm1:/dev/sda1 484M 32M 428M 7%
vm1:/dev/sdb1 3.5G 3.5G 0 100%
vm1:/dev/VolGroup/lv_root 6.1G 1.1G 4.7G 18%
[root@localhost ~]# virt-filesystems -d vm1
/dev/sda1
/dev/sdb1
/dev/VolGroup/lv_root
#挂载磁盘镜像分区
[root@localhost ~]# guestmount -d vm1 -m /dev/VolGroup/lv_root --rw /vm1_mount #-d虚拟机,-m挂载的盘,--rw挂载的位置