1、安装kvm虚拟化linux
#若是自己是图形化界面可忽略 [root@kvm-test ~]# yum -y groupinstall "GNOME Desktop" #安装GNOME桌面环境 [root@kvm-test ~]# yum -y install qemu-kvm # KVM模块 [root@kvm-test ~]# yum -y install qemu-kvm-tools # KVM调试工具,可不安装 [root@kvm-test ~]# yum -y install virt-install # 构建虚拟机的命令行工具 [root@kvm-test ~]# yum -y install qemu-img # qemu组件,建立磁盘、启动虚拟机等 [root@kvm-test ~]# yum -y install bridge-utils # 网络支持工具 [root@kvm-test ~]# yum -y install libvirt # 虚拟机管理工具 [root@kvm-test ~]# yum -y install virt-manager # 图形界面管理虚拟机 [root@kvm-test ~]# yum -y install libguestfs-tools # 用来管理虚拟机磁盘格式 #若是自己就是图形化界面可忽略下一步 [root@kvm-test ~]# ls -sf /lib/systemd/system/graphical.target /etc/systemd/system/default.target #将系统默认运行的target更改成graphical.target,若不执行该命令,重启时可能会报错。
二、安装完毕后,需重启系统,执行下面命令对系统进行检查:web
[root@kvm-test ~]# cat /proc/cpuinfo | grep vmx #查看Intel的CPU是否支持虚拟化,如果AMD的CPU,需 “cat /proc/cpuinfo | grep smv” [root@kvm-test ~]# lsmod | grep kvm #检查KVM模块是否安装 kvm_intel 188688 0 kvm 636965 1 kvm_intel irqbypass 13503 1 kvm [root@kvm-test ~]# systemctl start libvirtd # 启动libvirtd服务 [root@kvm-test ~]# systemctl enable libvirtd # 设置该服务为开机自启
三、在命令行模式中建立虚拟机(图形化建立虚拟机可参考博文:图形化桌面新建虚拟机)vim
[root@kvm-test ~]# mkdir -p /kvm/{iso,disk} [root@kvm-test ~]# ls /kvm/iso/ #准备要安装的虚拟机操做系统文件 CentOS-7-x86_64-DVD-1611.iso [root@kvm-test ~]# qemu-img create -f raw /kvm/disk/test1.raw 10G # 建立虚拟机磁盘 Formatting '/kvm/disk/test1.raw', fmt=raw size=10737418240 [root@kvm-test ~]# virt-install --os-type=linux --os-variant centos7.0 --name test1 --ram 1024 --vcpus 1 --disk /kvm/disk/test1.raw,format=raw,size=10 --location /kvm/iso/CentOS-7-x86_64-DVD-1611.iso --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole Starting install... Retrieving file .treeinfo... | 366 B 00:00:00 Retrieving file vmlinuz... | 5.1 MB 00:00:00 Retrieving file initrd.img... | 41 MB 00:00:00 Domain installation still in progress. You can reconnect to the console to complete the installation process. #根据上面的提示打开图形化控制台 [root@kvm-test ~]# virt-manager
输入打开控制台的命令后,便会弹出如下窗口:
单击“打开”后,会出现如下界面,和咱们本身安装系统同样了(自行操做便可):
至此,命令行建立虚拟机就完成了,接下来使用手动更改配置文件的方式,克隆test1,生成新的虚拟机test2(在我博文前面的那个博文连接中有专用于克隆的命令工具的使用方法,这里只是为了来了解虚拟机的配置文件)
2、手动更改配置文件的方式,克隆web01,生成新的虚拟机web02centos
[root@kvm-test ~]# virsh list --all #确保要克隆的虚拟机在关闭状态下 Id Name State ---------------------------------------------------- - test1 shut off [root@kvm-test ~]# cd /kvm/disk/ # 切换至虚拟机的虚拟磁盘存放目录 [root@kvm-test disk]# cp test1.raw test2.raw # 将要克隆的虚拟机磁盘复制一份,并更更名称 [root@kvm-test disk]# cd /etc/libvirt/qemu/ # 切换至KVM虚拟机配置文件的目录 [root@kvm-test qemu]# ls # 查看当前目录下的文件 networks test1.xml [root@kvm-test qemu]# virsh dumpxml test1 > ./test2.xml # 将test1的配置文件使用dumpxml工具进行备份为当前目录下的test1.xml [root@kvm-test qemu]# ls # 确保已经备份成功 networks test1.xml test2.xml [root@kvm-test qemu]# vim test2.xml <domain type='kvm'> <name>test2</name> # 更更名字为test2 <uuid>3f90fb61-b84c-4946-885f-e2827275e107</uuid> # 删除UUID这行配置,防止冲突 <memory unit='KiB'>1048576</memory> .............#省略部份内容 <devices> # 定位到此标签 <emulator>/usr/libexec/qemu-kvm</emulator> <disk type='file' device='disk'> <driver name='qemu' type='raw'/> <source file='/kvm/disk/test2.raw'/> #将这里的路径更改成刚才使用cp命令复制的test2.raw文件 <target dev='vda' bus='virtio'/> [root@kvm-test qemu]# virsh define test2.xml # 定义此配置文件 #(能够理解为载入该虚拟机,此时,须要注意当前的工做路径) Domain test2 defined from test2.xml [root@kvm-test qemu]# virsh list --all # 查看是否克隆成功 Id Name State ---------------------------------------------------- - test1 shut off - test2 shut off # OK!查看到了,能够自行运行test2,测试是否运行正常。 [root@kvm-test qemu]# virsh start test2 # 启动test2 Domain test2 started [root@kvm-test qemu]# virsh list --all # 能够看到已经成功启动 Id Name State ---------------------------------------------------- 2 test2 running - test1 shut off
3、将web01加入开机自启,与web02对比有何异同网络
[root@kvm-test ~]# virsh dominfo test1 # 查看指定虚拟机的信息 Id: - Name: test1 UUID: 3f90fb61-b84c-4946-885f-e2827275e107 OS Type: hvm State: shut off CPU(s): 1 Max memory: 1048576 KiB Used memory: 1048576 KiB Persistent: yes Autostart: disable # 默认此处为禁用状态 Managed save: no Security model: none Security DOI: 0 [root@kvm-test ~]# virsh autostart test1 # 设置test1为开机自启 Domain test1 marked as autostarted [root@kvm-test ~]# virsh dominfo test1 # 查看是否为开机自启 Id: - Name: test1 UUID: 3f90fb61-b84c-4946-885f-e2827275e107 OS Type: hvm State: shut off CPU(s): 1 Max memory: 1048576 KiB Used memory: 1048576 KiB Persistent: yes Autostart: enable # OK 已经开启 Managed save: no Security model: none Security DOI: 0 [root@kvm-test ~]# virsh dominfo test2 # 查看test2是否为开机自启 Id: 2 Name: test2 UUID: 375ec9f8-83ba-4c8f-bdcd-cd91bcc327f7 OS Type: hvm State: running CPU(s): 1 CPU time: 35.0s Max memory: 1048576 KiB Used memory: 1048576 KiB Persistent: yes Autostart: disable # 目前是禁用状态 Managed save: no Security model: none Security DOI: 0 #此时能够重启宿主机,而后查看虚拟机的状态(须要确保libvirtd服务的状态为开机自启,不然会出现问题) [root@kvm-test ~]# reboot # 重启 [root@kvm-test ~]# virsh list # 重启后查看正在运行的虚拟机 Id Name State ---------------------------------------------------- 1 test1 running #此时,只有test1处于运行状态,由于它设置了开机自启,在libvirtd服务开机自启的前提下,它会随着宿主机的启动而启动
4、远程链接虚拟机的两种方法
(1)使用VNC软件
VNC的安装比较简单,这里就不脏各位老板的眼了dom
[root@kvm-test ~]# virsh vncdisplay test1 :0 <!-- 查看出的结果是“:0”,解释以下: “:0”表示监听5900端口; “:1”表示监听5901端口; 以此类推...... -->
打开vnc进行链接(注意防火墙相关配置):
为了方便接下来使用console进行链接,此时须要调整虚拟机(test1)的内核参数,以下:ide
[root@test1 ~]# grubby --update-kernel=ALL --args="console=ttyS0" #在虚拟机中执行此命令 [root@test1 ~]# init 6 #重启此虚拟机,以便更改生效
(2)使用console登录web02
在KVM宿主机上执行如下命令便可登录成功(前提是在使用vnc登录时已经更改了web02的内核参数)工具
[root@kvm-test ~]# virsh console test1 Connected to domain test1 Escape character is ^] #敲一下回车 CentOS Linux 7 (Core) Kernel 3.10.0-514.el7.x86_64 on an x86_64 test1 login: root # 输入test1 的用户及密码便可登陆 密码: Last login: Tue Jul 28 11:31:28 on tty1 [root@test1 ~]#
5、使用默认的NAT网络类型使test1能够ping通外网
这里就进行ping百度的测试,务必保证KVM宿主机能够ping通百度。
(1)检查相关配置性能
[root@kvm-test ~]# virsh net-list --all # 检查当前的网络设置 Name State Autostart Persistent ---------------------------------------------------------- default active yes yes [root@kvm-test ~]# ifconfig # 检查当前网络接口 virbr0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.122.1 netmask 255.255.255.0 broadcast 192.168.122.255 ether 52:54:00:87:53:59 txqueuelen 1000 (Ethernet) #virbr0是由宿主机虚拟机支持模块安装时产生的虚拟网络接口, 也是一个switch和bridge,负责把内容分发到各虚拟机。 virbr0是一个桥接器,接收全部到网络192.168.122.*的内容。 从下面命令能够验证: [root@kvm-test ~]# brctl show bridge name bridge id STP enabled interfaces virbr0 8000.525400875359 yes virbr0-nic vnet0 [root@kvm-test ~]# route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface default gateway 0.0.0.0 UG 100 0 0 ens33 192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0 192.168.171.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33
(2)接下来开始配置nat网络测试
[root@kvm-test ~]# virsh net-define /usr/share/libvirt/networks/default.xml #若是没有上面指定的文件,可使用该命令定义一个虚拟网络,也能够修改该文件,建立本身的虚拟网络 [root@kvm-test ~]# virsh net-autostart default # 网络default标记为自动启动 [root@kvm-test ~]# virsh net-start default # 启动网络,若已启动,此处会报错 [root@kvm-test ~]# vim /etc/sysctl.conf # 修改此配置文件 ............省略部份内容 net.ipv4.ip_forward=1 #在文件末尾加入该行,以便容许IP转发 [root@kvm-test ~]# sysctl -p [root@kvm-test ~]# vim /etc/libvirt/qemu/test1.xml <interface type='network'> <mac address='52:54:00:40:21:38'/> <source network='default'/> <model type='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> </interface> #定位“interface”关键字,肯定有上述内容
(3)链接到虚拟机web02,更改网卡的配置:
[root@test1 ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0
更改网卡后,保存退出。
[root@test1 ~]# systemctl restart network
进行ping测试:
若要使用静态IP,配置文件可更改以下(更改完成后自行重启网卡,能够增长DNS配置):
6、KVM虚拟机管理命令汇总
[root@kvm ~]# virsh start 虚拟机名称 #开启虚拟机 [root@kvm ~]# virsh list #仅查看运行的虚拟机列表 [root@kvm ~]# virsh list --all #查看全部虚拟机列表 [root@kvm ~]# virsh shutdown 虚拟机名称 #正常的关闭虚拟机 [root@kvm ~]# virsh destroy 虚拟机名称 #强制关闭虚拟机(相似于拔电源) [root@kvm ~]# virsh dumpxml 虚拟机名称 > /root/test01-dum.xml #虚拟机备份 [root@kvm ~]# virsh undefine 虚拟机名称 #删除虚拟机(注意:取消定义以后,磁盘文件须要手动删除) [root@kvm ~]# virsh define 备份的.xml虚拟机文件 #还原虚拟机 [root@kvm ~]# virsh edit 虚拟机名称 #编辑虚拟机的配置文件 [root@kvm ~]# virsh domrename 原名字 要更改的名字 # 如:([root@kvm ~]# virsh domrename test01 test03) 更改虚拟机名称 [root@kvm qemu]# virsh dominfo test02 #查看虚拟机的详细信息 [root@kvm ~]# virsh autostart test02 #设置虚拟机为开机自启 [root@kvm ~]# virsh autostart --disable test02 #取消开机自启 [root@kvm ~]# virsh vncdisplay test02 #查看对应的VNC链接端口号;默认第一个端口号为:5900(用“:0”表示) [root@kvm ~]# virsh suspend test02 #挂起虚拟机 [root@kvm ~]# virsh resume test02 #取消挂起虚拟机 [root@kvm ~]# virsh console test02 #console登录虚拟机 [root@kvm ~]# qemu-img info /kvm/disk/test01.raw #查看虚拟机的磁盘信息 [root@kvm disk]# qemu-img create test.raw 2G #建立虚拟机使用的磁盘 [root@kvm disk]# qemu-img create -f qcow2 21.qcow2 2G #建立qcow2格式的虚拟机磁盘 [root@kvm disk]# qemu-img convert -f raw -O qcow2 test.raw test.qcow2 #将test.raw磁盘格式raw转换为qcow2 [root@kvm qemu]# virsh snapshot-create test02 #建立虚拟机快照 [root@kvm disk]# virsh snapshot-list test02 #查看虚拟机快照 [root@kvm disk]# virsh snapshot-revert test02 1570692304 #恢复快照 [root@kvm disk]# virt-clone --auto-clone -o test01 -n 指定要克隆的名字(可选) #自动克隆虚拟机 [root@kvm disk]# virt-clone -o test01 -n test04 -f /kvm/disk/test04.qcow2 #手动克隆 #上述都是属于完整克隆。 [root@kvm disk]# qemu-img create -f qcow2 -b test01.qcow2 lktest01.qcow2 # -f:指定要克隆为的磁盘格式; # -b:指定要转换的源文件及目标文件 #上述命令是在克隆虚拟机的磁盘文件
RAW:裸格式。占用空间较大,性能比较好,但不支持快照功能。
qcow:copy on write(写时复制机制)。
qcow2:占用空间较小,性能相比较RAW稍差,,但它支持快照功能。