常用命令
1、查看运行的虚拟机
# virsh list
查看所有的虚拟机(关闭和运行的,不包括摧毁的)
# virsh list --all
2.、启动虚拟机
# virsh start 虚拟机名称
虚拟机随物理机启动而启动
# virsh autostart 虚拟机名称
取消虚拟机随物理机启动而启动
# virsh autostart --disable 虚拟机名称
3、连接虚拟机
#virsh console 虚拟机名称
4、退出虚拟机
快捷键: ctrl+]
5、关闭虚拟机
virsh shutdown 虚拟机名称
#前提虚拟机需要(安装acpid服务)
yum install -y acpid
/etc/init.d/acpid start
6、在virsh list中删除该虚拟机
virsh destroy 虚拟机名称
7、彻底删除虚拟机
#解除标记
virsh undefine 虚拟机名称
然后删除虚拟机存储所在的位置
8、挂起虚拟机
virsh suspend 虚拟机名称 #挂起
virsh resume 虚拟机名称 #恢复被挂起的
virsh console 无法连接虚机
进入虚拟机操作
grubby --update-kernel=ALL --args="console=ttyS0"
reboot
未试过
1、在KVM(客户机)下开机启动并启动服务
systemctl enable serial-getty@ttyS0.service
systemctl start serial-getty@ttyS0.service
2、在宿主机下访问
virsh console KVM名称
其他
1,建立磁盘
#qemu-img create /opt/kvm/centos7.img 50G
#qemu-img create -f qcow2 -o preallocation=metadata /opt/kvm/centos7.qcow2 50G (支持快照)
以上两条命令都表示在/opt/kvm下创建50G系统盘。
第一是以默认格式img创建一个50G系统盘,测试使用时推荐使用。
第二条以qcow2格式创建一个50G系统盘,推荐在正式环境中使用,支持快照等高级功能,该功能将在拓展篇中记录。
验证方法:#ls -lh /opt/kvm/centos7.img 看是否显示占用空间与输入的一致
2,安装操作系统
#virt-install -n Centos --ram=1024 --disk centos7.img --location CentOS-6.7-x86_64-bin-DVD1.iso --graphics none --check all=off --network network=default --vcpus=1 --extra-args='console=tty0 console=ttyS0'
注:
以上命令在当前/opt/kvm目录下操作,所有文件都为使用绝对路径-n --指定系统名称
--ram --指定内存大小
--disk --指定系统盘
--location --指定安装的镜像盘路径、名称
--network network=default --指定使用的网卡
--vcpus=1 --指定CPU核实
--check all=off --可删除
--check path_in_use=off 或 --check all=off 选项覆盖
--extra-args='console=tty0 console=ttyS0' 这串表示可以通过console的方式连接已经创建的虚拟机。
--graphics none这一串是表示在把图形化输出到命令行终端上。
另外一种把图形化输出到命令行操作终端的方法是修改系统上的/boot/grub/grub.conf文件,在kernel后面加上console ttyS0,vim /etc/securetty,添加ttyS0,然后重启系统。
验证方法:
1)安装过程无报错、输入#virsh list --all可以查看到已安装的系统信息。
2)virsh start Centos
3)virsh console Centos
4)成功进入虚拟系统
来自:https://www.cnblogs.com/chenjiye/p/11271860.html
查看虚机ip
[root@data ~]# virsh dumpxml centos7.0 | grep mac
<partition>/machine</partition>
<type arch='x86_64' machine='pc-i440fx-rhel7.0.0'>hvm</type>
<mac address='52:54:00:74:ae:f5'/>
[root@data ~]# arp -a
? (192.168.0.106) at 52:54:00:74:ae:f5 [ether] on br0
######一个小脚本#########未测试
#!/bin/bash
#ping当前网段内在线的主机,以便产生arp记录.
for ip in 10.2.2.{1..253};do
{
ping -c1 $ip >/dev/null 2>&1
}&
done
#依次查找arp记录.
running_vms=`virsh list |grep running`
echo -ne "共有`echo "$running_vms"|wc -l`个虚拟机在运行.\n"
for i in `echo "$running_vms" | awk '{ print $2 }'`;do
mac=`virsh dumpxml $i |grep "mac address"|sed "s/.*'\(.*\)'.*/\1/g"`
ip=`arp -ne |grep "$mac" |awk '{printf $1}'`
printf "%-30s %-30s\n" $i $ip
done
------
安装kvm
概述
KVM(Kernel-based Virtual Machine, 即内核级虚拟机) 是一个开源的系统虚拟化模块。它使用Linux自身的调度器进行管理,所以相对于Xen,其核心
源码很少。目前KVM已成为学术界的主流VMM之一,它包含一个为处理器提供底层虚拟化 可加载的核心模块kvm.ko(kvm-intel.ko 或 kvm-amd.ko)。kvm
还需要一个经过修改的QEMU 软件(qemu-kvm),作为虚拟机上层控制和界面。KVM的虚拟化需要硬件支持(如 Intel VT技术或者AMD V技术)。是基于硬件的
完全虚拟化。 KVM可以运行多个其本身运行未改动的镜像的虚拟机,例如Windows,Mac OS X ,每个虚拟机都有各自的虚拟硬件,比如网卡、硬盘核图形适配
器等。
KVM和QEMU的关系
QEMU是个独立的虚拟化解决方案,从这个角度它并不依赖KVM。而KVM是另一套虚拟化解决方案,不过因为这个方案实际上只实现了内核中对处理器(Intel VT)
, AMD SVM)虚拟化特性的支持,换言之,它缺乏设备虚拟化以及相应的用户空间管理虚拟机的工具,所以它借用了QEMU的代码并加以精简,连同KVM一起构成了
另一个独立的虚拟化解决方案:KVM+QEMU。
组件
qemu-kvm 主要的KVM程序包
python-virtinst 创建虚拟机所需要的命令行工具和程序库
virt-manager GUI虚拟机管理工具
virt-top 虚拟机统计命令
virt-viewer GUI连接程序,连接到已配置好的虚拟机
libvirt C语言工具包,提供libvirt服务
libvirt-client 虚拟客户机提供的C语言工具包
virt-install 基于libvirt服务的虚拟机创建命令
bridge-utils 创建和管理桥接设备的工具
安装kvm
1)检查cpu是否支持虚拟化
[root@kevin ~]# grep vmx /proc/cpuinfo
如果有vmx信息输出,就说明支持VT;如果没有任何的输出,说明你的cpu不支持,将无法使用KVM虚拟机。
2)确保BIOS里开启虚拟化功能,即查看是否加载KVM模块
[root@kevin ~]# lsmod | grep kvm
kvm_intel 170086 0
kvm 566340 1 kvm_intel
irqbypass 13503 1 kvm
=========================================================
如果没有加载,运行以下命令:
[root@kevin ~]# modprobe kvm
[root@kevin ~]# modprobe kvm-intel
[root@kevin ~]# lsmod | grep kvm
kvm_intel 170086 0
kvm 566340 1 kvm_intel
irqbypass 13503 1 kvm
=========================================================
内核模块导出了一个名为/dev/kvm的设备,这个设备将虚拟机的的地址空间独立于内核或者任何应用程序的地址空间。
[root@kevin ~]# ll /dev/kvm
crw-rw-rw-. 1 root kvm 10, 232 1月 29 11:56 /dev/kvm
3)桥接网络
如果没有brctl命令(用来管理网桥的工具),则需要安装bridge-utils
[root@kevin ~]# yum -y install bridge-utils
[root@kevin ~]# systemctl restart network
配置KVM的网桥模式
[root@kevin ~]# cd /etc/sysconfig/network-scripts/
[root@openstack network-scripts]# cp ifcfg-eno1 ifcfg-br0
[root@openstack network-scripts]# cat ifcfg-br0
TYPE="Bridge" //这一行修改为Bridge
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="none"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="no"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="br0" //修改设备名称为br0
#UUID="fdbad04f-dae3-440e-8a8b-01d6a7bc9fe0" //这一行注释
DEVICE="br0" //修改设备为br0
ONBOOT="yes"
IPADDR="192.168.10.210"
PREFIX="24"
GATEWAY="192.168.10.1"
DNS1="8.8.8.8"
[root@openstack network-scripts]# cat ifcfg-eno1
TYPE="Ethernet"
BRIDGE=br0 //添加这一行
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="none"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="no"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="eno1"
UUID="fdbad04f-dae3-440e-8a8b-01d6a7bc9fe0"
DEVICE="eno1"
ONBOOT="yes"
#IPADDR="192.168.10.210" //注释掉这几行
#PREFIX="24"
#GATEWAY="192.168.10.1"
#DNS1="8.8.8.8"
#########################示例配置文件#########################
##网卡
cd /etc/sysconfig/network-scripts/
cat ifcfg-eth1
TYPE=Ethernet
#添加类型
BRIDGE=br0
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=eth1
UUID=f7920a47-e843-4c67-a85a-03081cb69305
DEVICE=eth1
ONBOOT=yes
#IPADDR=10.20.200.4
#PREFIX=16
##网桥
#原来网卡的基础上修改
cat ifcfg-br0
TYPE="Bridge" #类型
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME="br0" ##name
#UUID=f7920a47-e843-4c67-a85a-03081cb69305 ##注释掉
DEVICE=br0 ##device
ONBOOT=yes
IPADDR=10.20.200.4
PREFIX=16
#############################################################
重启网卡服务
[root@openstack network-scripts]# systemctl restart network
查看网卡
[root@openstack network-scripts]# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.0894ef518b22 no eno1
virbr0 8000.52540095d7c2 yes virbr0-nic
查看ip信息
[root@openstack network-scripts]# ifconfig |head -20
#
#这里安装必要的非图形即可
4)安装libvirt及kvm
libvirt是管理虚拟机的API库,不仅支持KVM虚拟机,也可以管理Xen等方案下的虚拟机。
[root@kevin ~]# yum -y install libcanberra-gtk2 qemu-kvm.x86_64 qemu-kvm-tools.x86_64 libvirt.x86_64 libvirt-cim.x86_64 libvirt-client.x86_64
libvirt-java.noarch libvirt-python.x86_64 libiscsi-1.7.0-5.el6.x86_64 dbus-devel virt-clone tunctl virt-manager libvirt libvirt-python python-virtinst
由于要用virt-manager图形化安装虚拟机,所以还需要安装X-window(这个在前面部署VNC环境里就已经安装了)
[root@kevin ~]# yum groupinstall "X Window System"
安装中文字符,解决界面乱码问题
[root@kevin ~]# yum install -y dejavu-lgc-sans-fonts
[root@kevin ~]# yum groupinstall -y "Fonts"
启用libvirt
[root@kevin ~]# systemctl enable libvirtd
[root@kevin ~]# systemctl start libvirtd
##创建磁盘并查看
qemu-img create -f qcow2 kvm-test.qcow2 10G
qemu-img info kvm-test.qcow2
##修改kvm配置文件使程序使用root用户启动
vim /etc/libvirt/qemu.conf
systemctl restart libvirtd ##启动服务
##创建命令
virt-install --name=study01 --memory=512,maxmemory=1024 --vcpus=1,maxvcpus=2 --os-type=linux --location=/root/CentOS-7-x86_64-Minimal-1810.iso --disk path=/root/kvm-test.qcow2,size=10 --bridge=br0 --graphics=none --console=pty,target_type=serial --extra-args="console=tty0 console=ttyS0"
执行后需要填写安装系统的选项
命令说明:
--name 指定虚拟机的名称
--memory 指定分配给虚拟机的内存资源大小
maxmemory 指定可调节的最大内存资源大小,因为KVM支持热调整虚拟机的资源
--vcpus 指定分配给虚拟机的CPU核心数量
maxvcpus 指定可调节的最大CPU核心数量
--os-type 指定虚拟机安装的操作系统类型
--os-variant 指定系统的发行版本
--location 指定ISO镜像文件所在的路径,支持使用网络资源路径,也就是说可以使用URL
--disk path 指定虚拟硬盘所存放的路径及名称,size 则是指定该硬盘的可用大小,单位是G
--bridge 指定使用哪一个桥接网卡,也就是说使用桥接的网络模式
--graphics 指定是否开启图形
--console 定义终端的属性,target_type 则是定义终端的类型
--extra-args 定义终端额外的参数
##查看运行的虚拟机:
virsh list --all
##常用命令url
https://www.cnblogs.com/kevingrace/p/5570504.html
##vnc 配置
https://www.cnblogs.com/kevingrace/p/5821450.html
##安装kvm
https://www.cnblogs.com/kevingrace/p/8377645.html
https://blog.csdn.net/dhRainer/article/details/83411555
https://blog.csdn.net/andy9900010/article/details/106108362
#虚拟机迁移
https://blog.csdn.net/swimming_in_IT_/article/details/53914197
##########################################
##kvm 使用
Kvm虚拟机默认配置文件位置
/etc/libvirt/qemu
virsh list ##正在运行的虚拟机
virsh list --all ##所有
virsh start CentOS6.5 ##启动虚机 名字
virsh shutdown CentOS6.5 ##关闭
virsh destroy CentOS6.5 ##强制关闭
virsh undefine CentOS6.5 ##移除
virsh autostart CentOS6.5 ##设置开机自启动
#默认情况下virsh工具不能对linux虚拟机进行关机操作
#linux操作系统需要开启与启动acpid服务。在安装KVM linux虚拟机必须配置此服务。
# yum -y install acpid
# /etc/init.d/acpid start
##通过配置文件启动虚拟机
virsh create /etc/libvirt/qemu/CentOS6.5.xml
virsh suspend CentOS6.5 #挂起虚机
virsh resume CentOS6.5 #恢复虚机
###重命名虚机
#停止虚拟机
[root@kvm qemu]# virsh shutdown CentOS6u5
#导出虚拟机的配置文件
[root@kvm qemu]# pwd
/etc/libvirt/qemu
[root@kvm qemu-img]# virsh dumpxml CentOS6u5 > test-CentOS6u5.xml
#更改配置文件
[root@kvm qemu]# sed -i 's/CentOS6u5/test-CentOS6u5/g' test-CentOS6u5.xml
#注 可以不用更改镜像名
#移除原有的虚拟机
[root@kvm qemu]# virsh undefine CentOS6u5
#加载新建的虚拟机
[root@kvm qemu]# virsh define test-CentOS6u5.xml
#启动虚拟机
[root@kvm qemu]# virsh start test-CentOS6u5
###虚拟机创建快照
https://blog.csdn.net/demonson/article/details/84140143
##通过vnc 连接
https://www.cnblogs.com/linuxprobe/p/5724546.html
##根据虚机生成xml 文件
virsh domxml-to-native qemu-argv –xml xxx.xml
https://blog.51cto.com/brighttime/2176928
yum -y install libcanberra-gtk2 qemu-kvm.x86_64 qemu-kvm-tools.x86_64 libvirt.x86_64 libvirt-cim.x86_64 libvirt-client.x86_64 libvirt-java.noarch libvirt-python.x86_64 libiscsi-1.7.0-5.el6.x86_64 dbus-devel virt-clone tunctl virt-manager libvirt libvirt-python python-virtinst
virt-install --name yon --ram=1024 --vcpus=2 --location=CentOS-7-x86_64-Minimal-1804.iso --disk path=kvm-test.qcow2,size=10 --network bridge=br0 --graphics=none --console=pty,target_type=serial --extra-args="console=tty0 console=ttyS0"
virt-install --name=study01 --memory=512,maxmemory=1024 --vcpus=1,maxvcpus=2 --os-type=linux --location=/root/CentOS-7-x86_64-Minimal-1810.iso --disk path=/root/kvm-test.qcow2,size=10 --bridge=br0 --graphics=none --console=pty,target_type=serial --extra-args="console=tty0 console=ttyS0"