1.虚拟机管理命令
命令 | 含义 |
---|---|
virt-manager | 开启虚拟机管理器 |
virsh list | 显示正在运行的虚拟机 |
virsh list --all | 查看所有虚拟机 |
virsh start desktop | 打开虚拟机 |
virsh shutdown desktop | 正常关闭虚拟机 |
virsh destroy desktop | 强行关闭虚拟机 |
virt-viewer desktop | 显示虚拟机 |
举例:
<1>先在真实主机中切换到root用户下
<2>开启虚拟机管理器
<3>显示正在运行的虚拟机
<3>查看所有的虚拟机
<4>打开名字为bai的虚拟机
<5>正常关闭名字为bai的虚拟机
<6>强行关闭名字为bai的虚拟机
<7>显示名字为bai的虚拟机
注意:显示虚拟机之前必须打开虚拟机
2.如何在别人主机中转移一个虚拟机
1.在别人主机中发现1个已经安装好的虚拟机(可以先切换到别人的主机,打开别人的虚拟机管理器,查看想要转移的虚拟机的硬盘的目录在哪里,具体的“克隆步骤”如下)
假设主机中存在已经安装好的虚拟机“gege”,其硬盘所在的目录为/var/lib/libvirt/images/gege.qcow2,其硬件所在的信息的目录为/etc/libvirt/qemu/uc.xml(管理硬件资源)
2.复制虚拟机所需文件(将别的用户的硬盘转移到自己的目录下)
scp root@172.25.154.28:/var/lib/libvirt/images/uc.qcow2 /var/lib/libvirt/images/ ##硬盘所在目录
scp root@172.25.154.28:/etc/libvirt/qemu/uc.xml /mnt/un.xml ##硬件信息
3.对虚拟机进行恢复
<1>virsh create /mnt/gege.xml ##用虚拟机硬件文件一次性开启虚拟机,关闭则没有了(临时开启)
输入临时开启的命令:
在图形管理下看可以看见虚拟机gege已经存在
使用关闭命令对虚拟机gege进行关闭的命令如下
发现使用关闭命令后图形管理器下的虚拟机gege也消失了
<2>virsh define /mnt/gege.xml ##永久恢复(永久开启)
输入永久开启的命令,当输入关闭命令时,发现无法关闭,因为还没有使虚拟机开机
在图形管理下看可以看见虚拟机gege已经存在’
使用关闭命令对虚拟机gege进行关闭的命令如下
发现使用关闭命令后图形管理器下的虚拟机gege不会消失
注意:
<1>如果先开始传输硬件信息,必须通过在virt-manager下新建一个虚拟机来导入别人的虚拟机。
<2>如果硬件的位置没有在本来应该在的目录下,就需要复制到应该在的目录下.
补充:
<1>IDE Disk 1 是它的硬盘
<2>超文本标记语言是html5,可扩展标记语言是xml(一般用作数据封装)。
<3>尝试在硬件中手动删除光驱后,再次查看硬件信息内的文件内是没有光驱的设置的
3.虚拟机的快照
(1)简单步骤:
<1>qemu-img create -f qcow2 -b /var/lib/libvirt/images/gege.qcow2 /var/lib/libvirt/images/node1.qcow2
<2>把生成的快照导入到虚拟机图形控制器中
<3>虚拟机可以使用
<4>快照虚拟机损坏,那么删除快照从新制作快照即可
<5>当使用快照后请不要对母盘做任何操作
(2)举例:
<1
>[root@foundation28 ~]# qemu-img create -f qcow2 -b /var/lib/libvirt/images/gege.qcow2 /var/lib/libvirt/images/node1.qcow2 ##生成快照
Formatting '/var/lib/libvirt/images/node1.qcow2', fmt=qcow2 size=8589934592 backing_file='/var/lib/libvirt/images/gege.qcow2' encryption=off cluster_size=65536 lazy_refcounts=off
<2>
[root@foundation28 ~]# ls /var/lib/libvirt/images ##进入目录下查看是否生成了快照
bai.qcow2 rh124-desktop-vdb.ovl rh124-server-vdb.ovl
gege.qcow2 rh124-desktop-vdb.qcow2 rh124-server-vdb.qcow2
node1.qcow2 rh124-desktop.xml rh124-server.xml
rh124-desktop-vda.ovl rh124-server-vda.ovl yyy.qcow2
rh124-desktop-vda.qcow2 rh124-server-vda.qcow2
<3>将快照导入虚拟机:
-1
-[kiosk@foundation28 ~]$ su - root
Password:
Last login: Fri Jan 18 11:32:21 CST 2019 on pts/2
[root@foundation28 ~]# virt-manager ##首先进入虚拟机图形控制器
-2-点击Create a new virtual machine
-3-然后点击import existing disk image
-4-将快照的硬盘导入
-5-设置RAM,name
-6-设置成功后,在虚拟机图形控制器中便可以看见新创建的快照
<4>在虚拟机图形控制器中
改变快照的大小
首先在真实主机中查看快照的容量大小
[root@foundation28 images]# cd /var/lib/libvirt/images
[root@foundation28 images]# ls
bai.qcow2 rh124-desktop-vdb.ovl rh124-server-vdb.ovl
gege.qcow2 rh124-desktop-vdb.qcow2 rh124-server-vdb.qcow2
node1.qcow2 rh124-desktop.xml rh124-server.xml
rh124-desktop-vda.ovl rh124-server-vda.ovl yyy.qcow2
rh124-desktop-vda.qcow2 rh124-server-vda.qcow2
[root@foundation28 images]# du -sh node1.qcow2
28M node1.qcow2
再次在快照中查看快照的容量大小
[root@foundation28 images]# cd /var/lib/libvirt/images
[root@foundation28 images]# ls
bai.qcow2 rh124-desktop-vdb.ovl rh124-server-vdb.ovl
gege.qcow2 rh124-desktop-vdb.qcow2 rh124-server-vdb.qcow2
node1.qcow2 rh124-desktop.xml rh124-server.xml
rh124-desktop-vda.ovl rh124-server-vda.ovl yyy.qcow2
rh124-desktop-vda.qcow2 rh124-server-vda.qcow2
[root@foundation28 images]# du -sh node1.qcow2
33M node1.qcow2
<5>如果快照出现了问题,重新建立一个快照即可
首先删除快照中根目录下的所有内容,会发现快照无法正常启动了
然后删除已经崩溃掉的快照
最后重新建立一个快照(具体的建立过程可以看上述)
简单的过程如下:
注意:
<1>生成快照中,-f是指类型,-b是指母盘的目录
<2>对快照进行内容的改变时,快照的容量大小也会发生改变
<3>更改的内容都在一个虚拟机(相当于快照)中,查看的在另外一个虚拟机中。
<4>如果在原始虚拟机中已经有了一个快照,那尽量就不要再动原始虚拟机了,否则快照也会崩溃
4.使用命令删除虚拟机
使用方法:
virsh underfine 虚拟机名称(只删除了前端文件,前端文件较小)
rm -fr /var/lib/libvirt/images/虚拟机硬盘.qcow2
<1>首先在真实主机下切换到root用户并打开虚拟机图形控制器
<2>使用命令虚拟机名称为node1.qcow2的快照,删除前端文件
<3>查看虚拟机硬盘下的目录下是否还存在快照的相关内容
<4>之后删除快照中的存在的硬盘文件
<5>查看虚拟机硬盘的目录,发现没有了node1.qcow2文件,说明已经彻底删除了名称为node1.qcow2的快照
注意:
图形是不能进行批量操作的,使用命令做比较快
5.自动安装虚拟机及快照
(1)自动安装虚拟机(指定虚拟机的名称)
<1>新建一个/scripts目录,进入目录并在目录下创建vm_creath.sh文件(shell脚本)
[root@foundation28 ~]# mkdir /scripts
[root@foundation28 ~]# cd /scripts
[root@foundation28 scripts]# vim vm_create.sh
<2>在vm_create.sh文件下对自动安装虚拟机进行配置
配置的内容如下:
#!/bin/bash ##指此文件在shell下运行
virt-install \ ##安装虚拟机
--cdrom /home/kiosk/Desktop/rhel-server-7.3-x86_64-dvd.iso \ ##导入光驱的目录
--memory 1000 \ ##内存的大小为1000
--vcpus 1 \ ##设置cpu为1个
--disk /var/lib/libvirt/images/wo.qcow2,size=8,bus=virtio \ ##导入硬盘的地址,设置其大小为8,其总线为virtio(快),8是指硬盘的大小为8GB
--network bridge=br0,model=virtio \ ##设置网关中的网桥,将设备模式设为虚拟
--name wo & ##设置名字为所输入的字符中的第一个,“wo”是虚拟机指定的名称
<3>再次输入其命令,发现会报错,因为已经存在了一个名为“wo”的虚拟机
<4>运行创建的shell脚本
[root@foundation28 scripts]# sh vm_create.sh
注意:
<1>$1是一个占位符,指的是所跟的第一串字符,$2指的是所跟的第二串字符
<2>\指的是换行符,换行符后面不能有空格
<3>装机过程的自动化和虚拟化管理不同
补充:光驱的目录可以通过以下命令进行查询
(2)自动安装虚拟机(不指定虚拟机的名称)
要解决随时设定虚拟机名称,主要是通过添加一个占位符即可实现。
<1>新建一个/scripts目录,进入目录并在目录下进入vm_creath.sh文件
[root@foundation28 ~]# mkdir /scripts
[root@foundation28 ~]# cd /scripts
[root@foundation28 scripts]# vim vm_create.sh
<2>在vm_create.sh文件下对自动安装虚拟机进行配置
配置的内容如下:
#!/bin/bash ##指此文件在shell下运行
virt-install \ ##安装虚拟机
--cdrom /home/kiosk/Desktop/rhel-server-7.3-x86_64-dvd.iso \ ##导入光驱的目录
--memory 1000 \ ##内存的大小为1000
--vcpus 1 \ ##设置cpu为1个
--disk /var/lib/libvirt/images/$1.qcow2,size=8,bus=virtio \ ##导入硬盘的地址,设置其大小为8,其总线为virtio(快),,8是指硬盘的大小为8GB
--network bridge=br0,model=virtio \ ##设置网关中的网桥,将设备模式设为虚拟
--name $1 & ##设置名字为所输入的字符中的第一个
<3>运行创建的shell脚本
[root@foundation28 scripts]# sh vm_create.sh po
[root@foundation28 scripts]# sh vm_create.sh test
(3)自动安装快照(不指定快照的名称)
要解决随时设定虚拟机名称,主要是通过添加一个占位符即可实现。
<1>新建一个/scripts目录,进入目录并在目录下进入vm_snapshot.sh文件
[root@foundation28 scripts]# vim vm_snapshot.sh
<2>在vm_create.sh文件下对自动安装虚拟机进行配置
配置的内容如下:
#!/bin/bash ##指此文件在shell下运行
qemu-img create -f qcow2 -b \ ##生成快照
/var/lib/libvirt/images/$1.qcow2 \ ##导入母盘的目录
/var/lib/libvirt/images/$2.qcow2 &> /dev/null ##导入快照的目录
virt-install \ ##安装快照
--name $2 \ ##设置快照名字
--memory 1000 \ ##内存的大小为1000MB
--vcpus 1 \ ##设置cpu为1个
--disk /var/lib/libvirt/images/$2.qcow2,bus=virtio \ ##导入硬盘的目录,总线的设置
--network bridge=br0,model=virtio \ ##设置网关,将设备模式设为虚拟
--import &>/dev/null & ##导入快照,相当于图形界面中的Import existing disk image
<3>运行创建的shell脚本
[root@foundation28 scripts]# sh vm_snapshot.sh bai liu
注意:
在配置文件中加入“&>/dev/null”表示将所有报错都放入回收箱中