命令行玩转KVM

知识点

1、RAW 采用预分配空间方式 , 也就是虚拟机磁盘 20G , 物理主机就会产生一个20G的文件
2、QCOW2 采用延迟分配方式 , 一开始磁盘文件在物理主机上只占很小的空间 , 随着向虚拟机写入数据 , 这个硬盘文件会自动增长

默认位置:/var/lib/libvirt/images

[root@localhost ~]# cat /proc/cpuinfo | egrep 'vmx|svm' #首先验证CPU是否支持虚拟化,输入有vmx或svm就支持,支持虚拟化则就支持KVM
[root@localhost ~]# lsmod | grep kvm #查看是否加载KVM
[root@localhost ~]# modprobe kvm #命令加载KVM

部署KVM环境

[root@localhost ~]# yum install qemu-kvm qemu-img  virt-manager libvirt libvirt-python virt-manager  libvirt-client virt-install virt-viewer -y

[root@localhost ~]# systemctl start libvirtd && systemctl enable libvirtd #启动libvirt并设置开机自启动

br0桥接到em1网卡

[root@localhost ~]# virsh iface-bridge em1 br0 #注意操作后会断网,需要修改br0中的网卡信息及添加DNS信息

禁用网络过滤器(可选)

向文件/etc/sysctl.conf添加以下代码:
net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0

[root@localhost ~]# sysctl -p 

brctl 命令详解

brctl addbr br0 #创建网桥br0
brctl delbr br0 #删除网桥br0
brctl addif br0 em1 #将em1端口加入网桥br0 brctl delif br0 em1
brctl delif br0 em1 #删除em1端口加入网桥br0
show brctl show br0 #查询网桥信息

VNC配置

[root@localhost ~]# yum install tigervnc-server -y
[root@localhost ~]# cp /lib/systemd/system/[email protected] /etc/systemd/system/vncserver@:1.service
[root@localhost ~]# cat>/etc/systemd/system/vncserver@:1.service<<"EOF"
[Unit]
Description=Remote desktop service (VNC)
After=syslog.target network.target
[Service]
Type=simple
User=<USER>
ExecStartPre=-/usr/bin/vncserver -kill %i
ExecStop=-/usr/bin/vncserver -kill %i
ExecStart=/sbin/runuser -l root -c "/usr/bin/vncserver %i"
PIDFile=/root/.vnc/%H%i.pid
#ExecStart=/sbin/runuser -l users -c "/usr/bin/vncserver %i"
#PIDFile=/home/users/.vnc/%H%i.pid
[Install]
WantedBy=multi-user.target
EOF

重启 systemd

[root@localhost ~]# systemctl daemon-reload

设置密码

[root@localhost ~]# vncpasswd

启动VNC

[root@localhost ~]# systemctl enable vncserver@:1.service
[root@localhost ~]# systemctl start vncserver@:1.service

防火墙开启VNC服务

[root@localhost ~]# firewall-cmd --permanent --add-service vnc-server
[root@localhost ~]# firewall-cmd --reload

安装KVM虚拟主机

[root@localhost ~]# mkdir -p /kvm/CentOS-1/

virt-install \
--name CentOS-1 \
--ram 4096 \
--vcpus=2 \
--disk path=/kvm/CentOS-1/CentOS-1.qcow2,size=40 \
--accelerate --cdrom /data/mirrors/CentOS-7-x86_64-Minimal-1810.iso \
--graphics vnc,listen=0.0.0.0,port=15901, \
--network bridge=br0,model=virtio \
--force \
--autostart \
--noautoconsole

virsh 相关命令

查看帮助
virsh --help

列出运行状态的虚拟机
virsh list

列出所有的虚拟机
virsh list --all

列出虚拟网络
virsh net-list

查看指定虚拟机的信息
virsh dominfo 虚拟机名称

启动虚拟机
virsh start 虚拟机名称

重启虚拟机
virsh reboot 虚拟机名称

关闭虚拟机
virsh shutdown 虚拟机名称

强制关闭虚拟机
virsh destroy 虚拟机名称

设置虚拟机开机自启
virsh autostart 虚拟机名称

创建虚拟机快照
virsh snapshot-create-as --domain 虚拟机名称 --name 快照名 --description "快照备注"

还原虚拟机快照
virsh snapshot-revert 虚拟机名称 快照名

删除虚拟机快照
virsh snapshot-delete --domain 虚拟机名称 --snapshotname 快照名

查询虚拟机快照详情
virsh snapshot-list --domain 虚拟机名称

删除虚拟机定义
virsh undefine 虚拟机名称

通过 virt-clone工具进行克隆 kvm 虚拟机

[root@localhost ~]# mkdir -p /kvm/CentOS-2/
[root@localhost ~]# virt-clone -o CentOS-2 -n CentOS-1 --file /kvm/CentOS-1/CentOS-2.qcow2 --file /kvm/CentOS-1/CentOS-2.qcow2

virt-clone 参数介绍 Options(一些基本的选项):
–version:查看版本
-h,–help:查看帮助信息
–connect=URI:连接到虚拟机管理程序 libvirt 的URI

General Option(一般选项):
-o ORIGINAL_GUEST, --original=ORIGINAL_GUEST:原来的虚拟机名称
-n NEW_NAME, --name=NEW_NAME:新的虚拟机名称
–auto-clone:从原来的虚拟机配置自动生成克隆名称和存储路径。
-u NEW_UUID, --uuid=NEW_UUID:克隆虚拟机的新的UUID,默认值是一个随机生成的UUID

Storage Configuration(存储配置):
-f NEW_DISKFILE, --file=NEW_DISKFILE:指定新的虚拟机磁盘文件
–force-copy=TARGET:强制复制设备
–nonsparse:不使用稀疏文件复制磁盘映像

Networking Configuration:(网络配置)
-m NEW_MAC, --mac=NEW_MAC:设置一个新的mac地址,默认是一个随机的mac

查看 kvm 虚拟机的xml文件(kvm虚拟机配置信息)

[root@srv qemu]# ls -lh /etc/libvirt/qemu/CentOS-* 
-rw------- 1 root root 4.1K Mar 11 16:14 /etc/libvirt/qemu/CentOS-1.xml
-rw------- 1 root root 4.1K Mar 11 17:24 /etc/libvirt/qemu/CentOS-2.xml

编辑虚拟主机配置文件

[root@srv qemu]# virsh edit CentOS-2

查看 kvm 虚拟机的 img 文件(kvm虚拟机磁盘文件)

[root@srv qemu]# ll /kvm/* -h
/kvm/CentOS-1:
total 2.7G
-rw------- 1 root root  41G Mar 11 16:51 CentOS-1.qcow2
-rw------- 1 qemu qemu 1.3G Mar 11 17:30 CentOS-2.qcow2

查看 xml 文件总的 source file 信息 (kvm虚拟机img文件路径)

[root@srv qemu]# grep "source file" /etc/libvirt/qemu/CentOS-*
/etc/libvirt/qemu/CentOS-1.xml:      <source file='/kvm/CentOS-1/CentOS-1.qcow2'/>
/etc/libvirt/qemu/CentOS-2.xml:      <source file='/kvm/CentOS-1/CentOS-2.qcow2'/>

查看 xml 文件中的 mac address (kvm虚拟机mac地址)

[root@srv qemu]# grep "mac address" /etc/libvirt/qemu/CentOS-*                               
/etc/libvirt/qemu/CentOS-1.xml:      <mac address='52:54:00:76:90:e3'/>
/etc/libvirt/qemu/CentOS-2.xml:      <mac address='52:54:00:19:51:d3'/>

KVM迁移

复制CentOS-2目录到其他host机器的/var/lib/libvirt/images/ 或者 /kvm 目录下

复制CentOS-2.xml文件到其他机器的/etc/libvirt/qemu/目录下

修改CentOS-2.xml中的路径,确保CentOS-1.qcow2和CentOS-2.qcow2路径正确

在/etc/libvirt/qemu目录下 执行virsh define ./CentOS-2.qcow2.xml

virt-edit -d CentOS-2.qcow2 /etc/network/interfaces
修改其中的ip地址

virsh start CentOS-2.qcow2
如果以此为模板, clone多个的话,一定要设置不同的网卡地址,如何设置很简单,在/etc/network/interfaces文件中添加一行指令即可。

auto eth0iface eth0 inet dhcp hwaddress ether 01:02:03:04:05:06

冷导出

虚拟机CentOS-1是开启状态
保存当前的运行状态

[root@srv qemu]#  virsh save CentOS-1 /etc/libvirt/qemu/CentOS-1.xml.save

scp或者rsync把相关的文件都拷贝到被导出的宿主机

[root@srv qemu]# scp /etc/libvirt/qemu/kvm1.xml.save x.x.x.x:/etc/libvirt/qemu/  
[root@srv qemu]# scp /etc/libvirt/qemu/kvm1.xml x.x.x.x:/etc/libvirt/qemu/  
[root@srv qemu]# scp /var/lib/libvirt/images/kvm1.qcow2 x.x.x.x:/var/lib/libvirt/images/  

到x.x.x.x(也就是导出的目标宿主机)上操作

[root@srv qemu]#virsh define /etc/libvirt/qemu/kvm1.xml --define一下,然后就可以用virsh list --all查看到  
[root@srv qemu]#virsh restore /etc/libvirt/qemu/kvm1.xml.save  
发布了84 篇原创文章 · 获赞 2 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_46192300/article/details/105009154