图形化安装教程:https://blog.csdn.net/weixin_53678904/article/details/125950867?spm=1001.2014.3001.5501
KVM必须要配置⼀个⽬录当作他存储磁盘镜像(存储卷)的⽬录,我们称这个⽬录为存储池
qemu-img create -f qcow2 /kvm/images/vmtest1.qcow2 8G
注意:如果不指定文件类型的话,默认为raw类型
qemu-img convert -f raw -O qcow2 /kvm/images/vmtest1.raw /kvm/images/vmtest1.qcow2
选项:
-f:当前磁盘格式
-O:转换为的磁盘格式
[root@localhost images]# qemu-img info vmtest1.qcow2
image: vmtest1.qcow2
file format: qcow2
virtual size: 8.0G (8589934592 bytes)
disk size: 1.2G
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: false
-n NAME, --name=NAME 虚拟机名称
-r MEMORY, --ram=MEMORY 以MB为单位为客户端事件分配的内存
--vcpus=VCPUS 配置虚拟机的虚拟CPU(vcpu)数量,如:
--vcpus 5
--vcpus 5, maxcpus=10
--vcpus socket=2,cores=4,threads=2
--cpuset=CPUSET Set which physical CPUs domain can use.
--cpu=CPU CPU型号及功能,如:--cpu coreduo,+x2apic
--description=DESCRIPTION 在生成的XML中保存的可读VM描述。
--security=SECURITY 设定域安全驱动器配置。
--numatune=NUMATUNE 为域进程调整NUMA策略。
-c CDROM, --cdrom=CDROM 光驱安装介质
-l LOCATION, --location=LOCATION
安装源(例如:nfs:host:/path、http://host/path、ftp://host/path)
--pxe 使用 PXE 协议从网络引导
--import 在磁盘映像中构建客户机
--livecd 将光驱介质视为 Live CD
-x EXTRA, --extra-args=EXTRA 附加到使用--location引导的内核的参数
--os-type=DISTRO_TYPE 操作系统类型,'linux'、'unix'、'windows'
--os-variant=DISTRO_VARIANT 操作系统版本,如: 'fedora6','rhel5', 'solaris10', 'win2k'
--boot=BOOTOPTS 自选配置后安装引导顺序、菜单、永久kernel引导,等等。
--disk=DISKOPTS 用各种选项指定存储。 Ex.
--disk path=/my/existing/disk
--disk path=/my/new/disk,size=5 (单位GB)
--disk vol=poolname:volname,device=cdrom,bus=scsi,...
--nodisks 不要为该客户端设置任何磁盘。
--filesystem=FILESYSTEMS
将主机目录传递给虚拟机。例如:
--filesystem /my/source/dir,/dir/in/guest
--filesystem template_name,/,type=template
-w NETWORK, --network=NETWORK
配置客户网络接口。 Ex:
--network bridge=mybr0
--network network=my_libvirt_virtual_net
--network network=mynet,model=virtio,mac=00:11...
--nonetworks 不要为该客体创建网络接口。
--graphics=GRAPHICS
配置虚拟机显示设置。例如:
--graphics vnc
--graphics spice,port=5901,tlsport=5902
--graphics none
--graphics vnc,password=foobar,port=5910,keymap=ja
--noautoconsole 不要自动尝试连接到客户端控制台
--serial=SERIALS 配置虚拟机串口设备
--parallel=PARALLELS 配置虚拟机并口设备
--channel=CHANNELS 配置虚拟机沟通频道
--console=CONSOLES 配置虚拟机与主机之间的文本控制台连接
--host-device=HOSTDEVS 配置与客户相连的物理主机设备
--soundhw=SOUNDHW 配置客户声音设备仿真
--watchdog=WATCHDOG 配置虚拟机 watchdog 设备
--video=VIDEO 配置虚拟机视频硬件。
--smartcard=SMARTCARD 配置虚拟机智能卡设备。
例如:--smartcard mode=passthrough
--redirdev=REDIRDEV Configure a guest redirection device.
例如:--redirdev usb,type=tcp,server=192.168.1.1:4000
-v, --hvm 客户端应该是一个全虚拟客户端
-p, --paravirt 这个客户端是一个半虚拟客户端
--container This guest should be a container guest
--virt-type=HV_TYPE 要使用的管理程序名称(kvm、qemu、xen)
--arch=ARCH 模拟的 CPU 构架
--machine=MACHINE The machine type to emulate
--noacpi 为全虚拟客户端禁用 ACPI(在 os-type/os-variant db 中覆盖数值)
-u UUID, --uuid=UUID 客户端 UUID。
--autostart 引导主机时自动启动域。
--print-xml 输出所生成域的XML,而不是定义虚拟机。
--print-step=XMLSTEP 输出具体安装步骤
--noreboot 完成安装后不要引导虚拟机。
--wait=WAIT 要等待的时间(以分钟为单位)
--dry-run 完成安装步骤,但不要创建设备或者定义虚拟机。
--force 对任意应用程序提示强制回答‘yes’,终止其它提示
-q, --quiet 禁止无错误输出
--prompt 要求用户为模糊情况或者需要的选项输入
-d, --debug 输入故障排除信息
virt-install -n vm1 -r 1024 --vcpus=1 -l=/kvm/iso/CentOS-7.3-x86_64-DVD-1611.iso --disk path=/kvm/images/vmtest1.qcow2 --nographics
选项:
-n:指定虚拟机名称
-r:指定内存大小
--vcpus:CPU核数
-l:安装源
--disk path:存储池位置
--nographics:不安装图形化界面
virt-install --name grap -r 1024 --vcpus=1 -l /kvm/iso/CentOS-7.3-x86_64-DVD-1611.iso --accelerate --disk path=/kvm/images/vmtest2.qcow2 --graphics vnc,listen=0.0.0.0,port=5924 --noautoconsole --autostart
选项:
-n:指定虚拟机名称
-r:指定内存大小
--vcpus:CPU核数
-l:安装源
--disk path:存储池位置
--graphics:指定图形化连接服务端口
--noautoconsole 不要自动尝试连接到客户端控制台
--autostart 引导主机时自动启动域
到当前shell终端进行安装系统
virt-install --name centos6.9 -r 2048 --vcpus=2 --location=/home/softs/iso/CentOS-6.9-x86_64-bin-DVD1.iso --network bridge=br0 --disk path=/home/kvmos/centos6.9.qcow2,size=60,format=qcow2,sparse --nographics -x 'console=ttyS0'
virt-install --name user_1604 \
--ram 2048 \
--vcpus=2 \
--disk path=/home/kvmos/user_1604.qcow2,size=60,format=qcow2,sparse \
--accelerate \
--cdrom /home/softs/iso/ubuntu-16.04.4-server-amd64.iso \
--graphics vnc,listen=0.0.0.0,port=5924, \
--noautoconsole \
--network bridge=br0 \
--autostart
virsh -h
[root@localhost ~]# ll /etc/libvirt/qemu/
总用量 8
drwxr-xr-x 2 root root 22 6月 8 22:26 autostart
-rw------- 1 root root 3823 6月 8 22:26 grap.xml
drwx------ 3 root root 42 5月 26 17:21 networks
-rw------- 1 root root 3514 6月 8 22:12 vm1.xml
通过虚拟机配置文件定义虚拟机
virsh edit vm1 #编辑虚拟机配置文件
virsh dominfo vm1 #查看虚拟机信息
[root@localhost ~]# virsh list #查看开启状态虚拟机
Id 名称 状态
----------------------------------------------------
1 grap running
[root@localhost ~]# virsh list --all #查看所有的虚拟机
Id 名称 状态
----------------------------------------------------
1 grap running
- vm1 关闭
[root@localhost ~]# virsh list --inactive #查看关闭状态的虚拟机
Id 名称 状态
----------------------------------------------------
- vm1 关闭
[root@localhost ~]# virsh shutdown grap
域 grap 被关闭
[root@localhost ~]# virsh destroy grap #强制关闭
域 grap 被删除
[root@localhost ~]# virsh list --inactive
Id 名称 状态
----------------------------------------------------
- grap 关闭
- vm1 关闭
[root@localhost ~]# virsh start vm1
域 vm1 已开始
[root@localhost ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
2 vm1 running
- grap 关闭
[root@localhost ~]# virsh suspend vm1 #暂停虚拟机
域 vm1 被挂起
[root@localhost ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
2 vm1 暂停
- grap 关闭
[root@localhost ~]# virsh resume vm1 #恢复虚拟机
域 vm1 被重新恢复
[root@localhost ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
2 vm1 running
- grap 关闭
[root@localhost ~]# virsh reboot vm1
域 vm1 正在被重新启动
[root@localhost ~]# virsh reset vm1 #去电重启,速度快,但是不安全
重新设定域 vm1
[root@localhost ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
2 vm1 running
- grap 关闭
virsh create /etc/libvirt/qemu/vm1.xml
[root@localhost ~]# virsh autostart vm1 #设置为开机自启
域 vm1标记为自动开始
[root@localhost ~]# virsh list --all --autostart #查看开机自启
Id 名称 状态
----------------------------------------------------
2 vm1 running
- grap 关闭
[root@localhost ~]# virsh autostart --disable vm1 #去除开机自启
域 vm1取消标记为自动开始
[root@localhost ~]# virsh list --all --autostart
Id 名称 状态
----------------------------------------------------
- grap 关闭
[root@localhost ~]# virsh undefine vm1 #删除之前需要将虚拟机关机
[root@localhost ~]# virsh destroy vm1 #强制关机虚拟机
virsh console vm1 #连接虚拟机
#进入虚拟机后 ctrl+] 退出虚拟机
[root@localhost ~]# virsh dumpxml vm1 > /root/vm1.xml
[root@localhost ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
- grap 关闭
- vm1 关闭
[root@localhost images]# virt-clone -o vm1 -n vm1-01 -f /kvm/images/vmtest4.qcow2
正在分配 'vmtest4.qcow2' | 8.0 GB 00:00:12
成功克隆 'vm1-01'。
[root@localhost images]# virsh list --all
Id 名称 状态
----------------------------------------------------
- grap 关闭
- vm1 关闭
- vm1-01 关闭
[root@localhost images]# virsh snapshot-create vm1
已生成域快照 1686304703
[root@localhost images]# virsh snapshot-create-as vm1 vm1-init
已生成域快照 vm1-init
[root@localhost images]# virsh snapshot-list vm1
名称 生成时间 状态
------------------------------------------------------------
1686304703 2023-06-09 17:58:23 +0800 shutoff
vm1-init 2023-06-09 17:59:17 +0800 shutoff
[root@localhost images]# virsh snapshot-current vm1
[root@localhost images]# virsh snapshot-revert vm1 vm1-init
[root@localhost images]# virsh snapshot-delete vm1 1686304703
已删除域快照 1686304703
注意:在操作虚拟机文件时,需要将电源关闭,个别命令需要将其关机,否则会报错
yum -y install libguestfs libguestfs-tools
[root@localhost images]# virt-
virt-admin virt-copy-out virt-format virt-log virt-resize virt-xml
virt-alignment-scan virt-customize virt-get-kernel virt-ls virt-sparsify virt-xml-validate
virt-builder virt-df virt-host-validate virt-make-fs virt-sysprep
virt-cat virt-diff virt-index-validate virt-manager virt-tar-in
virt-clone virt-edit virt-inspector virt-pki-validate virt-tar-out
virt-copy-in virt-filesystems virt-install virt-rescue virt-win-reg
格式:virt-inspector [实例名]
[root@localhost images]# virt-inspector vm1
[root@localhost images]# virt-inspector --format=qcow2 -a /kvm/images/vmtest1.qcow2
选项:
--format:文件类型
-a:存储文件位置
格式:virt-cat [-a] {实例名}
[root@localhost ~]# virt-cat vm1 /etc/hosts
#127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
#::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
[root@localhost ~]# virt-cat -a /kvm/images/vmtest1.qcow2 /etc/hosts
选项:
-a:指定存储文件位置
[root@localhost ~]# virt-edit vm1 /etc/hosts
[root@localhost ~]# virt-df vm1
文件系统 1K-blocks 已用空间 可用空间 使用百分比%
vm1:/dev/sda1 1038336 108080 930256 11%
vm1:/dev/cl/root 6486016 939816 5546200 15%
#将文件拷贝到虚拟机内
#格式:virt-copy-in -d {虚拟机名} /拷贝宿主机文件 /拷贝到虚拟机位置
[root@localhost ~]# virt-copy-in -d vm1 /root/hello.txt /tmp
#将虚拟机文件拷贝出来
#格式:virt-copy-out -d {虚拟机名} /虚拟机文件位置 /拷贝到宿主机位置
[root@localhost ~]# virt-copy-out -d vm1 /etc/passwd /tmp
[root@localhost ~]# ls /tmp
passwd
guestfish是什么?
格式:
挂载格式:
guestmount -a {存储文件} -m {虚拟机挂载目录} --rw {挂载位置}
选项:
--ro:只读
--rw:可读可写
-i:文件系统类型
-a:存储文件存放位置
[root@localhost ~]# virt-df vm1 #查看当前虚拟机的根目录位置
文件系统 1K-blocks 已用空间 可用空间 使用百分比%
vm1:/dev/sda1 1038336 108080 930256 11%
vm1:/dev/cl/root 6486016 939816 5546200 15%
[root@localhost ~]# guestmount -a /kvm/images/vmtest1.qcow2 -m /dev/cl/root --rw /kvmmount/
[root@localhost ~]# ls /kvmmount/
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
[root@localhost ~]# guestunmount /kvmmount/
[root@localhost images]# virt-clone -o vm1 -n vm1-01 -f /kvm/images/vmtest4.qcow2
[root@localhost images]# qemu-img create -f qcow2 -o backing_file=/kvm/images/vmtest1.qcow2 oa-disk0.qcow2
virt-install \
> --import \
> --name=oa \
> --vcpus=1 --ram=1024 \
> --disk path=oa-disk0.qcow2 \
> --network netwrok=default \
> --graphics vnc,listen=0.0.0.0 \
> --os-type=linux \
> --os-variant=centos7.0
qemu-img convert -f raw -O qcow2 /kvm/images/vmtest1.raw /kvm/images/vmtest1.qcow2
选项:
-f:当前磁盘格式
-O:转换为的磁盘格式
格式:resize [-q] filename [+ | -]size
命令格式:
qemu-img snaphost [option] [选项需要内容] {存储文件位置}
选项:
-a:切换到指定摸一个快照点
-c:创建一个快照
-d:删除一个快照
-l:列出指定虚拟机的所有快照
[root@localhost images]# qemu-img snapshot -l /kvm/images/vmtest1.qcow2
Snapshot list:
ID TAG VM SIZE DATE VM CLOCK
2 vm1-init 0 2023-06-09 17:59:17 00:00:00.000
3 1686474246 215M 2023-06-11 17:04:06 00:00:18.744
[root@localhost images]# qemu-img snapshot -d 2 /kvm/images/vmtest1.qcow2
[root@localhost images]# qemu-img snapshot -l /kvm/images/vmtest1.qcow2
Snapshot list:
ID TAG VM SIZE DATE VM CLOCK
3 1686474246 215M 2023-06-11 17:04:06 00:00:18.744
[root@localhost ~]# qemu-img snapshot -c init /kvm/images/vmtest1.qcow2
[root@localhost ~]# qemu-img snapshot -l /kvm/images/vmtest1.qcow2
Snapshot list:
ID TAG VM SIZE DATE VM CLOCK
3 1686474246 215M 2023-06-11 17:04:06 00:00:18.744
4 init 0 2023-06-12 23:57:29 00:00:00.000
[root@localhost ~]# qemu-img snapshot -a init /kvm/images/vmtest1.qcow2
[root@localhost ~]# virsh pool-list --details
名称 状态 自动开始 持久 容量 分配 可用
------------------------------------------------------------------------
default running 是 是 37.02 GiB 8.73 GiB 28.28 GiB
test running 是 是 37.02 GiB 8.73 GiB 28.28 GiB
[root@localhost ~]# virsh pool-info test
名称: test
UUID: 1e9c1654-e5fc-48b9-9dd8-233caf748cb6
状态: running
持久: 是
自动启动: 是
容量: 37.02 GiB
分配: 8.73 GiB
可用: 28.28 GiB
[root@localhost ~]# virsh vol-list test
名称 路径
------------------------------------------------------------------------------
vm1.qcow2 /var/lib/libvirt/images/test/vm1.qcow2
[root@localhost ~]# mkdir /dir_image
[root@localhost ~]# virsh pool-define-as dir-test dir --target '/dir_image/'
定义池 dir-test
[root@localhost ~]# virsh pool-list --all
名称 状态 自动开始
-------------------------------------------
dir-test 不活跃 否
iso 活动 是
test 活动 是
[root@localhost ~]# virsh pool-start dir-test
池 dir-test 已启动
[root@localhost ~]# virsh pool-autostart dir-test
池 dir-test 标记为自动启动
[root@localhost ~]# virsh pool-info dir-test
名称: dir-test
UUID: e3ba0635-82df-4d89-a905-8e9e40f1d297
状态: running
持久: 是
自动启动: 否
容量: 37.02 GiB
分配: 8.79 GiB
可用: 28.23 GiB
[root@localhost ~]# virsh pool-destroy dir-test
销毁池 dir-test
[root@localhost ~]# virsh pool-autostart --disable dir-test
取消将池 dir-test 标记为自动启动
[root@localhost ~]# virsh pool-undefine dir-test
池 dir-test 已经被取消定义
注意:如果创建的存储池的目录不存在的时候,需要先通过pool-build命令构建然后才能启动成功
[root@kvm001 ~]# virsh pool-build test
[root@localhost ~]# pvcreate /dev/sdb1
Physical volume "/dev/sdb1" successfully created.
[root@localhost ~]# vgcreate kvmvg /dev/sdb1
Volume group "kvmvg" successfully created
[root@localhost ~]# virsh pool-define-as kvmvg logical --source-name=kvmvg --target=/dev/kvmvg
定义池 kvmvg
[root@localhost ~]# virsh pool-start kvmvg
池 kvmvg 已启动
[root@localhost ~]# virsh pool-info kvmvg
名称: kvmvg
UUID: 4c5f7322-53ed-424d-a393-df4e37d74beb
状态: running
持久: 是
自动启动: 否
容量: 20.00 GiB
分配: 0.00 B
可用: 20.00 GiB
[root@localhost ~]# mkdir /nfs
[root@localhost ~]# vi /etc/exports
/nfs *(rw,sync,no_root_squash)
[root@localhost ~]# systemctl start nfs-server
#以上是NFS服务器端的配置
[root@localhost ~]# mkdir /kvmnfs
[root@localhost ~]# virsh pool-define-as --name kvmnfs --type netfs --source-host 192.168.2.12 --source-path /nfs --target /kvmnfs/
定义池 kvmnfs
[root@localhost ~]# virsh pool-start kvmnf
[root@localhost ~]# virsh pool-list
名称 状态 自动开始
-------------------------------------------
dir-test 活动 否
iso 活动 是
kvmnfs 活动 否
kvmvg 活动 否
test 活动 是
[root@localhost ~]# virsh pool-info dir-test
名称: dir-test
UUID: e3ba0635-82df-4d89-a905-8e9e40f1d297
状态: running
持久: 是
自动启动: 否
容量: 37.02 GiB
分配: 8.79 GiB
可用: 28.23 GiB
[root@localhost ~]# virsh vol-list dir-test
名称 路径
------------------------------------------------------------------------------
[root@localhost ~]# virsh vol-create-as dir-test test-voll.qcow2 4G --format qcow2
创建卷 test-voll.qcow2
[root@localhost ~]# virsh vol-list dir-test
名称 路径
------------------------------------------------------------------------------
test-voll.qcow2 /dir_image/test-voll.qcow2
[root@localhost ~]# virsh vol-create-as kvmvg vg-vol 4G
创建卷 vg-vol
[root@localhost ~]# virsh vol-list kvmvg
名称 路径
------------------------------------------------------------------------------
vg-vol /dev/kvmvg/vg-vol
pool-autostart 自动启动某个池
pool-build 建立池
pool-create-as 从一组变量中创建一个池
pool-create 从一个 XML 文件中创建一个池
pool-define-as 在一组变量中定义池
pool-define 在一个XML文件中定义(但不启动)一个池或修改已有池
pool-delete 删除池
pool-destroy 销毁(删除)池
pool-dumpxml 将池信息保存到XML文档中
pool-edit 为存储池编辑 XML 配置
pool-info 查看存储池信息
pool-list 列出池
pool-name 将池 UUID 转换为池名称
pool-refresh 刷新池
pool-start 启动一个(以前定义的)非活跃的池
pool-undefine 取消定义一个不活跃的池
pool-uuid 把一个池名称转换为池 UUID
vol-clone 克隆卷。
vol-create-as 从一组变量中创建卷
vol-create 从一个 XML 文件创建一个卷
vol-create-from 生成卷,使用另一个卷作为输入。
vol-delete 删除卷
vol-download 将卷内容下载到文件中
vol-dumpxml 保存卷信息到XML文档中
vol-info 查看存储卷信息
vol-key 根据卷名或路径返回卷的key
vol-list 列出卷
vol-name 根据给定卷key或者路径返回卷名
vol-path 根据卷名或key返回卷路径
vol-pool 为给定密钥或者路径返回存储池
vol-resize 重新定义卷大小
vol-upload 将文件内容上传到卷中
vol-wipe 擦除卷
桥接网络是指本地物理网卡和虚拟网卡通过VMnet0虚拟交换机进行桥接,物理网卡和虚拟网卡在拓扑图上处于同等地位
cd /etc/sysconfig/network-scripts/
cp ifcfg-ens33 ifcfg-br1
[root@localhost network-scripts]# cat ifcfg-br1
DEVICE="br1"
NAME=br1
ONBOOT="yes"
TYPE="Bridge"
BOOTPROTO=static
IPADDR=192.168.2.12
NETMASK=255.255.255.0
GATEWAY=192.168.2.254
DNS1=8.8.8.8
DEFROUTE=yes
[root@localhost network-scripts]# cat ifcfg-ens33
DEVICE="ens33"
ONBOOT="yes"
TYPE=Ethernet
BOOTPROTO=none
BRIDGE="br1"
NAME=ens33
systemctl restart network
[root@localhost network-scripts]# brctl show
bridge name bridge id STP enabled interfaces
br1 8000.000c29386a0c no ens33
vnet0
virbr0 8000.5254001fa3cf yes virbr0-nic
virsh pool-define-as kvmimage dir --target '/kvm/images/'
virsh pool-start kvmimage
virsh vol-create-as kvmimage kvmvol 5G
virt-install -n vm1 -r 1024 --vcpus=1 -l=/kvm/iso/CentOS-7.3-x86_64-DVD-1611.iso --network bridge=br1 --disk vol=kvmimage/kvmvol,format=qcow2 --nographics -x 'console=ttyS0'
[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE=Ethernet
BOOTPROTO=static
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=eth0
UUID=3138a40e-5ad1-4bc0-b7c1-094b6afecc25
DEVICE=eth0
ONBOOT=yes
IPADDR=192.168.2.10
GATEWAY=192.168.2.254
DNS1=8.8.8.8
使用NAT模式可以实现在虚拟系统里访问互联网。就是让虚拟系统借助NAT(网络地址转换)功能,通过宿主机器所在的网络来访问公网。
[root@localhost networks]# ifconfig virbr0
virbr0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 192.168.122.1 netmask 255.255.255.0 broadcast 192.168.122.255
ether 52:54:00:1f:a3:cf txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
默认还关联了一个虚拟网卡
[root@localhost networks]# brctl show virbr0
bridge name bridge id STP enabled interfaces
virbr0 8000.5254001fa3cf yes virbr0-nic
[root@localhost networks]# cat default.xml
<!--
WARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT ARE LIKELY TO BE
OVERWRITTEN AND LOST. Changes to this xml configuration should be made using:
virsh net-edit default
or other application using the libvirt API.
-->
<network>
<name>default</name>
<uuid>b96ea92e-d6f6-48f5-aa9c-4ed78d9ed32f</uuid>
<forward mode='nat'/>
<bridge name='virbr0' stp='on' delay='0'/>
<mac address='52:54:00:55:7a:56'/>
<ip address='192.168.122.1' netmask='255.255.255.0'>
<dhcp>
<range start='192.168.122.2' end='192.168.122.254'/>
</dhcp>
</ip>
</network>
[root@localhost network-scripts]# vi /etc/sysctl.conf
#最后添加一下
net.ipv4.ip_forward=1
[root@localhost network-scripts]# sysctl -p
virsh vol-create-as kvmimage kvm-nat 5G
virt-install -n vm2 -r 1024 --vcpus=1 -l=/kvm/iso/CentOS-7.3-x86_64-DVD-1611.iso --network network=default,model=virtio --disk vol=kvmimage/kvm-nat,format=qcow2 --nographics -x 'console=ttyS0'
[root@localhost ~]# dhclient
[root@localhost ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 52:54:00:cf:80:3f brd ff:ff:ff:ff:ff:ff
inet 192.168.122.79/24 brd 192.168.122.255 scope global dynamic eth0
valid_lft 3598sec preferred_lft 3598sec
inet6 fe80::5054:ff:fecf:803f/64 scope link
valid_lft forever preferred_lft forever
[root@localhost ~]# ping www.baidu.com
PING www.a.shifen.com (182.61.200.6) 56(84) bytes of data.
64 bytes from 182.61.200.6 (182.61.200.6): icmp_seq=1 ttl=127 time=12.5 ms
64 bytes from 182.61.200.6 (182.61.200.6): icmp_seq=2 ttl=127 time=18.7 ms
64 bytes from 182.61.200.6 (182.61.200.6): icmp_seq=3 ttl=127 time=7.94 ms
--- www.a.shifen.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2004ms
rtt min/avg/max/mdev = 7.947/13.111/18.797/4.444 ms
[root@localhost networks]# cp default.xml nat1.xml
[root@localhost networks]# vi nat1.xml
<!--
WARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT ARE LIKELY TO BE
OVERWRITTEN AND LOST. Changes to this xml configuration should be made using:
virsh net-edit nat1
or other application using the libvirt API.
-->
<network>
<name>nat1</name>
<uuid>b96ea93e-d6f6-48f5-aa9c-4ed78d9ed32f</uuid>
<forward mode='nat'/>
<bridge name='virbr1' stp='on' delay='0'/>
<mac address='52:54:00:55:8a:56'/>
<ip address='192.168.121.1' netmask='255.255.255.0'>
<dhcp>
<range start='192.168.121.2' end='192.168.121.254'/>
</dhcp>
</ip>
</network>
[root@localhost networks]# virsh net-define /etc/libvirt/qemu/networks/nat1.xml
从 nat1定义网络/etc/libvirt/qemu/networks/nat1.xml
[root@localhost networks]# virsh net-start nat1
网络 nat1 已开始
[root@localhost networks]# virt-install -n vm2 -r 1024 --vcpus=1 -l=/kvm/iso/CentOS-7.3-x86_64-DVD-1611.iso --network network=net1,model=virbr1 --disk vol=kvmimage/kvm-nat,format=qcow2 --nographics -x 'console=ttyS0'
[root@localhost networks]# cp default.xml private.xml
[root@localhost networks]# cat private.xml
<network>
<name>privatename>
<uuid>b96ea9ee-d6f6-48f5-aa9c-4ed78d9ed32fuuid>
<bridge name='private1' stp='on' delay='0'/>
<mac address='52:54:00:55:9a:56'/>
<ip address='192.168.9.1' netmask='255.255.255.0'>
<dhcp>
<range start='192.168.9.2' end='192.168.9.254'/>
dhcp>
ip>
network>
[root@localhost networks]# virsh net-define private.xml
从 private定义网络private.xml
[root@localhost networks]# virsh net-start private
网络 private 已开始
virsh net-edit default #编辑网卡信息
virsh net-define /etc/libvirt/qemu/networks/default.xml #重新定义网卡
virsh net-destory default #停止网卡
virsh net-start default #启动网卡
其他选项:
net-autostart 自动开始网络
net-create 从一个 XML 文件创建一个网络
net-define define an inactive persistent virtual network or modify an existing persistent one from an XML file
net-destroy 销毁(停止)网络
net-dhcp-leases print lease info for a given network
net-dumpxml XML 中的网络信息
net-edit 为网络编辑 XML 配置
net-event Network Events
net-info 网络信息
net-list 列出网络
net-name 把一个网络UUID 转换为网络名
net-start 开始一个(以前定义的)不活跃的网络
net-undefine undefine a persistent network
net-update 更新现有网络配置的部分
net-uuid 把一个网络名转换为网络UUID
静态迁移(冷迁移) 对于静态迁移,你可以在宿主机上保存一个完整的客户机镜像快照,然后在宿主机中关闭或 者暂停该客户机,然后将该客户机的镜像文件复制到另一台宿主机中,使用在源主机中启动该客户 机时的命令来启动复制过来的镜像。
动态迁移(热迁移) 如果源宿主机和目的宿主机共享存储系统,则只需要通过网络发送客户机的 vCPU 执行状 态、内存中的内容、虚机设备的状态到目的主机上。否则,还需要将客户机的磁盘存储发到目的主 机上。共享存储系统指的是源和目的虚机的镜像文件目录是在一个共享的存储上的。
[root@localhost ~]# qemu-img create -f qcow2 /kvm/images/vm1.qcow2 8G
Formatting '/kvm/images/vm1.qcow2', fmt=qcow2 size=8589934592 encryption=off cluster_size=65536 lazy_refcounts=off
[root@localhost ~]# virt-install -n vm1 -r 1024 --vcpus=1 -l=/kvm/iso/CentOS-7.3-x86_64-DVD-1611.iso --disk path=/kvm/images/vm1.qcow2 --nographics -x 'console=ttyS0'
注意:需要在关机情况下,如果在拷贝是一直卡着不动,就是没关机
[root@localhost network-scripts]# scp /kvm/images/vm1.qcow2 [email protected]:/kvm/images/
[root@localhost network-scripts]# scp /etc/libvirt/qemu/vm1.xml [email protected]:/etc/libvirt/qemu/
[root@localhost ~]# virsh define /etc/libvirt/qemu/vm1.xml
定义域 vm1(从 /etc/libvirt/qemu/vm1.xml)
[root@localhost ~]# virsh start vm1
域 vm1 已开始
[root@localhost ~]# virsh list
Id 名称 状态
----------------------------------------------------
1 vm1 running
[root@localhost ~]# virsh console vm1
案例实施步骤如下:
注意:将两台主机设置为桥接模式,创建虚拟机的网卡也是,方便测试
1、设置主机名、/etc/hosts 互相解析,保证网络连接和ssh互信
2、两台主机的KVM连接NFS共享存储
3、在源主机的KVM中新建虚拟机并安装操作系统
4、连接KVM,并进行迁移。
[root@localhost ~]# hostnamectl set-hostname vm2
[root@vm2 ~]# vi /etc/hosts
192.168.2.12 vm1
192.168.2.13 vm2
[root@localhost network-scripts]# ssh-keygen
[root@localhost network-scripts]# ssh-copy-id 192.168.2.12
[root@vm1 ~]# virsh pool-define-as --name kvmnfs --type netfs --source-host 192.168.2.5 --source-path /kvmdata --target /kvmnfs
定义池 kvmnfs
[root@vm1 ~]# virsh pool-start kvmnfs
池 kvmnfs 已启动
[root@vm1 ~]# virsh vol-create-as kvmnfs vm1.qcow2 8G --format qcow2
创建卷 vm1.qcow2
[root@vm1 ~]# virt-install -n vm2 -r 1024 --vcpus=1 -l /kvm/iso/CentOS-7.3-x86_64-DVD-1611.iso --disk vol=kvmnfs/vm1.qcow2 --nographics -x 'console=ttyS0'
[root@localhost ~]# systemctl start httpd
[root@localhost ~]# systemctl stop firewalld
[ 1067.622493] Ebtables v2.0 unregistered
[root@vm2 ~]# mkdir /kvmnfs
[root@vm2 ~]# virsh pool-define-as --name kvmnfs --type netfs --source-host 192.168.2.5 --source-path /kvmdata --target /kvmnfs
定义池 kvmnfs
[root@vm2 ~]# virsh pool-start kvmnfs
池 kvmnfs 已启动
[root@localhost ~]# virsh migrate --live --unsafe --verbose vm2 qemu+ssh://192.168.2.13/system
迁移: [100 %]
[root@vm1 ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
5 vm1 running
- vm2 关闭
[root@vm2 ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
2 vm2 running
测试:
[root@vm2 ~]# virsh migrate --help
NAME
migrate - 将域迁移到另一个主机中
SYNOPSIS
migrate <domain> <desturi> [--live] [--offline] [--p2p] [--direct] [--tunnelled] [--persistent] [--undefinesource] [--suspend] [--copy-storage-all] [--copy-storage-inc] [--change-protection] [--unsafe] [--verbose] [--compressed] [--auto-converge] [--rdma-pin-all] [--abort-on-error] [--postcopy] [--postcopy-after-precopy] [--migrateuri <string>] [--graphicsuri <string>] [--listen-address <string>] [--dname <string>] [--timeout <number>] [--timeout-suspend] [--timeout-postcopy] [--xml <string>] [--migrate-disks <string>] [--disks-port <number>] [--comp-methods <string>] [--comp-mt-level <number>] [--comp-mt-threads <number>] [--comp-mt-dthreads <number>] [--comp-xbzrle-cache <number>] [--auto-converge-initial <number>] [--auto-converge-increment <number>]
DESCRIPTION
将域迁移到另一个主机中。热迁移时添加 --live。
OPTIONS
[--domain] <string> 域名,id 或 uuid
[--desturi] <string> 客户端(常规迁移)或者源(p2p 迁移)中看到到目的地主机连接 URI
--live 热迁移
--offline 离线迁移
--p2p 点对点迁移
--direct 直接迁移
--tunnelled 管道迁移
--persistent 目的地中的持久 VM
--undefinesource 在源中取消定义 VM
--suspend 部启用目的地主机中的域
--copy-storage-all 使用全磁盘复制的非共享存储进行迁移
--copy-storage-inc 使用增值复制(源和目的地共享同一基础映像)的非共享存储进行迁移
--change-protection 迁移结束前不得对域进行任何配置更改
--unsafe 即使不安全也要强制迁移
--verbose 显示迁移进程
--compressed 实时迁移过程中压缩重复的页
--auto-converge force convergence during live migration
--rdma-pin-all support memory pinning during RDMA live migration
--abort-on-error 在迁移过程中忽略软错误
--postcopy enable post-copy migration; switch to it using migrate-postcopy command
--postcopy-after-precopy automatically switch to post-copy migration after one pass of pre-copy
--migrateuri <string> 迁移 URI, 通常可省略
--graphicsuri <string> 无空隙图形迁移中使用的图形 URI
--listen-address <string> listen address that destination should bind to for incoming migration
--dname <string> 在迁移过长中重新命名为一个新名称(如果支持)
--timeout <number> run action specified by --timeout-* option (suspend by default) if live migration exceeds timeout (in seconds)
--timeout-suspend suspend the guest after timeout
--timeout-postcopy switch to post-copy after timeout
--xml <string> 包含为目标更新的 XML 的文件名
--migrate-disks <string> comma separated list of disks to be migrated
--disks-port <number> port to use by target server for incoming disks migration
--comp-methods <string> comma separated list of compression methods to be used
--comp-mt-level <number> compress level for multithread compression
--comp-mt-threads <number> number of compression threads for multithread compression
--comp-mt-dthreads <number> number of decompression threads for multithread compression
--comp-xbzrle-cache <number> page cache size for xbzrle compression
--auto-converge-initial <number> initial CPU throttling rate for auto-convergence
--auto-converge-increment <number> CPU throttling rate increment for auto-convergence
[root@localhost ~]# virsh migrate --live --unsafe --verbose vm2 qemu+ssh://192.168.2.13/system
迁移: [100 %]
--live:热迁移
--unsafe:即使不安全也要强行迁移
--verbose:显示迁移进度