文章目录
一、虚拟化介绍
虚拟化
技术简单讲,就是把一台物理计算机虚拟成多台逻辑计算机
,每个逻辑计算机里面可以运行不同的操作系统,相互不受影响,这样就可以充分利用硬件资源。VMware Workstation就是虚拟化。
虚拟机管理器Hypervisor
(VMM
),它是用来管理逻辑计算机的。
虚拟化技术分为全虚拟化和半虚拟化全虚拟化
:早期的CPU硬件不支持虚拟化,虚拟机上的操作系统(guestos)要想使用cpu资源,需要通过VMM来翻译指令
,这个过程比较耗费资源,这种虚拟化技术叫做全虚拟化。例如:VMware Workstation半虚拟化
:通过修改guestos内核
,让guestos可以直接使用CPU资源,而不需要翻译指令了,从而节省了资源,但修改内核比较鸡肋。例如:XEN
因为后续cpu厂商直接支持虚拟化,不需要通过VMM翻译指令了,无所谓半虚拟化和全虚拟化。
参考文章 :http://itoedr.lofter.com/post/1472ba_69c62fa
二、常见虚拟化软件
- VMware系列
VMware workstation
适合单独计算机VMware vsphere
(VMware esxi)用于多台计算机(服务器),方便迁移虚拟机,从A物理机上的虚拟机迁移到B物理机上。可以让现有的模板环境去快速搭建其他机器的环境。VMware Fusion
(Mac)苹果系统(Unix)上使用的。
VirtualBox
开源 Sun公司开发,后Oracle收购Sun。类似于VMwareHyper-V
商业,厂商微软,适合在Windows server上安装Xen
开源的 半虚拟化(需要改内核)XenServer
Xen的分支软件,商业化,厂商Ctirx。Openvz
开源 基于linux 虚拟机和宿主机共用一个内核,可以虚拟更多的虚拟机,缺点不够稳定,用于早期的vpsKVM
开源 基于linux内核模块(不需要改Linux内核)
参考文章:http://developer.huawei.com/ict/forum/thread-23385-1-1.html
三、虚拟化架构
类型I
:虚拟机直接运行在系统硬件上,创建硬件全仿真实例,被称为“裸机”,也称为裸金属架构。类型II
:虚拟机运行在传统操作系统上,同样创建的是硬件全仿真实例,被称为“托管”hypervisor。也称为宿主架构。- 还有一种
容器虚拟化
(docker):容器指虚拟机里面没有操作系统,只有应用。容器运行在真实操作系统上,创建一个独立的虚拟化实例(应用),指向底层托管操作系统,被称为“操作系统虚拟化。
现在有4种虚拟化技术是当前最为成熟而且应用最为广泛的,分别是:VMWARE的ESX、微软的Hyper-V、开源的XEN和KVM。其中
VMWARE的ESX
,Hyper-V
和XEN
都是属于类型I
。KVM
是属于类型II
。
参考文章 :http://developer.huawei.com/ict/forum/thread-23385-1-1.html
四、KVM介绍
- KVM是以色列初创公司Qumranet开发,2008年9月RedHat公司收购了Qumranet
- KVM是完全开源的,RedHat基于KVM的虚拟化解决方案叫做RHEV
- KVM是Linux内核的一个模块,它把Linux内核变成了一个Hypervisor
- KVM在Linux操作系统里面以进程的形式出现,由标准的Linux调度程序进行调度,这使得KVM能够使用Linux内核的已有功能
- 只有一个KVM内核模块还不能实现虚拟化的全部功能,就好比操作系统只有内核还不能成为一个完整的操作系统一样
- QEMU是一个开源的虚拟化软件,纯软件,可以虚拟化所以的硬件,但性能不强
- KVM基于QEMU开发了一个能够运行在用户空间的工具QEMU-KVM
- 磁盘、网络设备等都是通过QEMU-KVM这个工具模拟出来KVM和QEMU-KVM通信是通过/dev/kvm实现的
- libvirt是用来管理KVM虚拟机的API,其命令为virsh
总结
KVM模块可以让Linux内核变为Hypervisor。QEMU-KVM可以虚拟硬件,KVM和QEMU-KVM通讯是通过/dev/kvm完成的。管理KVM是通过libvirt来操作的,命令是virsh。
五、Centos7上安装KVM
- 在VMware上设置内存2G
处理器2核,虚拟化引擎两个虚拟化相关的选项打上对勾
增加一个20G的虚拟磁盘,用于挂载存放虚拟机系统
- 检查cpu个数
[root@zyj-01 ~]# cat /proc/cpuinfo |grep -c 'processor'
2
[root@zyj-01 ~]# grep -c 'processor' /proc/cpuinfo
2
- 检查cpu参数是否支持虚拟化
[root@zyj-01 ~]# grep -Ei 'vmx|svm' /proc/cpuinfo
vmx
表示支持intel虚拟化
svm
表示支持amd虚拟化
- 格式化新硬盘并挂载
[root@zyj-01 ~]# mkfs.xfs /dev/sdb
[root@zyj-01 ~]# blkid /dev/sdb ##查看格式化的格式
/dev/sdb: UUID="5aedc2e7-ad52-44d6-aed4-6979bcaf323a" TYPE="xfs"
[root@zyj-01 ~]# mkdir /kvm_data
[root@zyj-01 ~]# mount /dev/sdb /kvm_data ##把新硬盘挂载到该目录下
[root@zyj-01 ~]# vim /etc/fstab ##系统设置开机启动挂载
/dev/sdb /kvm_data xfs defaults 0 0
- 关闭防火墙
[root@zyj-01 ~]# systemctl stop firewalld
[root@zyj-01 ~]# systemctl stop iptables
[root@zyj-01 ~]# systemctl disable firewalld
[root@zyj-01 ~]# systemctl disable iptables
[root@zyj-01 ~]# setenforce 0
- 下载安装kvm相关的包
[root@zyj-01 ~]# yum install -y virt-* libvirt bridge-utils qemu-img
六、配置网卡
-
网络模式分两种:
桥接
:让虚拟机和物理机同一网段的IP,相当于虚拟机和物理机串联在一起NAT
:物理机相当于是路由器让虚拟机连接他,他们网段不一样,相当于虚拟机和物理机并联在一起
这里是桥接模式,其中会建立一块桥接网卡作为中介,来联系虚拟机和物理机
-
创建桥接网卡
[root@zyj-01 ~]# cd /etc/sysconfig/network-scripts/
[root@zyj-01 network-scripts]# cp ifcfg-ens33 ifcfg-br0
- 修改br0和ens33参数
[root@zyj-01 network-scripts]# vim ifcfg-br0
TYPE=Bridge
BOOTPROTO=static
NAME=br0
DEVICE=br0
ONBOOT=yes
IPADDR=192.168.80.102
NETMASK=255.255.255.0
GATEWAY=192.168.80.2
DNS1=119.29.29.29
[root@zyj-01 network-scripts]# vim ifcfg-ens33
TYPE=Ethernet
BOOTPROTO=static
NAME=ens33
DEVICE=ens33
ONBOOT=yes
#IPADDR=192.168.80.102
#NETMASK=255.255.255.0
#GATEWAY=192.168.80.2
#DNS1=119.29.29.29
BRIDGE=br0
BRIDGE=br0
表示ens33指定到br0上
- 重启网卡
[root@zyj-01 network-scripts]# systemctl restart network
br0上已经获取IP地址,ens33没有地址
[root@zyj-01 network-scripts]# ifconfig
br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.80.102 netmask 255.255.255.0 broadcast 192.168.80.255
inet6 fe80::2c4f:d9ff:febf:c3a1 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:8e:31:e8 txqueuelen 1000 (Ethernet)
RX packets 17 bytes 1150 (1.1 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 18 bytes 1576 (1.5 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
ether 00:0c:29:8e:31:e8 txqueuelen 1000 (Ethernet)
RX packets 4437 bytes 2411669 (2.2 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 2661 bytes 285910 (279.2 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
- 启动libvirtd服务
[root@zyj-01 network-scripts]# systemctl start libvirtd
[root@zyj-01 network-scripts]# ps aux |grep libvirt
root 16556 1.5 0.7 634628 14408 ? Ssl 20:42 0:00 /usr/sbin/libvirtd
- 查看桥接网卡
格式:brctl show
[root@zyj-01 network-scripts]# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.000c298e31e8 no ens33
virbr0 8000.525400e96738 yes virbr0-nic
br0是我们刚刚建立模式的网卡,模式是桥接,virbr0是KVM默认桥接网卡,模式是NAT模式。当新添加的网卡网络模式看他指定哪个模式的网卡。
七、创建虚拟机安装CentOS7
- 上传系统镜像
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-W3Vcb7JF-1575507014285)(48888E2A663743048E3785A6D89EE9E4)]
- 命令行安装Centos
[root@zyj-01 kvm_data]# virt-install --name=centos7 --memory=512,maxmemory=1024 --vcpus=1,maxvcpus=2 --os-type=linux --os-variant=rhel7 --location=/kvm_data/CentOS-7-x86_64-DVD-1708.iso --disk path=/kvm_data/centos7.img,size=10 --bridge=br0 --graphics=none --console=pty,target_type=serial --extra-args="console=tty0 console=ttyS0"
--name
定义虚拟机的名字
--memory
定义内存大小 maxmemory
指定最大的内存大小
--vcpus
定义CPU个数 maxvcpus
指定最多CPU个数
--os-type
操作系统类型
--os-variant
系统版本
--location
指定iso镜像路径 也可以指定网络上镜像
--disk path
指定虚拟机硬盘的路径
--bridge
指定网络模式
--graphics
定义是否开启图像
--console=pty,target_type=serial --extra-args="console=tty0 console=ttyS0"
定义终端的属性
Ctrl +]
离开当前终端
- 设置centos属性
Installation
1) [x] Language settings 2) [!] Time settings
(English (United States)) (Timezone is not set.)
3) [!] Installation source 4) [!] Software selection
(Processing...) (Processing...)
5) [!] Installation Destination 6) [x] Kdump
(No disks selected) (Kdump is enabled)
7) [ ] Network configuration 8) [!] Root password
(Not connected) (Password is not set.)
9) [!] User creation
(No user will be created)
Please make your choice from above ['q' to quit | 'b' to begin installation |
'r' to refresh]:
1.设置语言 2.设置时间
3.安装源 4.选择的软件
5.安装的目标 6.Kdump
7.网络模式 8.系统密码
9.创建普通用户
选择对应的数字来设置他们x
表示已经设置好的!
表示未设置c
表示确定b
表示开始安装
- 设置语言 选择
Chinese
—Simplified Chinese (China)
Language settings
Available languages
1) Afrikaans 25) Hindi 48) Oriya
2) Amharic 26) Croatian 49) Punjabi
3) Arabic 27) Hungarian 50) Polish
4) Assamese 28) Interlingua 51) Portuguese
5) Asturian 29) Indonesian 52) Romanian
6) Belarusian 30) Icelandic 53) Russian
7) Bulgarian 31) Italian 54) Sinhala
8) Bengali 32) Japanese 55) Slovak
9) Bosnian 33) Georgian 56) Slovenian
10) Catalan 34) Kazakh 57) Albanian
11) Czech 35) Kannada 58) Serbian
12) Welsh 36) Korean 59) Swedish
13) Danish 37) Lithuanian 60) Tamil
14) German 38) Latvian 61) Telugu
15) Greek 39) Maithili 62) Tajik
16) English 40) Macedonian 63) Thai
17) Spanish 41) Malayalam 64) Turkish
18) Estonian 42) Marathi 65) Ukrainian
19) Basque 43) Malay 66) Urdu
20) Persian 44) Norwegian Bokmål 67) Vietnamese
21) Finnish 45) Nepali 68) Chinese
22) French 46) Dutch 69) Zulu
Press ENTER to continue
23) Galician 47) Northern Sotho
24) Gujarati
Please select language support to install.
[b to return to language list, c to continue, q to quit]: 68
================================================================================
================================================================================
Language settings
Available locales
1) Simplified Chinese 3) Traditional Chinese 4) Simplified Chinese
(China) (Hong Kong) (Singapore)
2) Traditional Chinese
(Republic of China)
Please select language support to install.
[b to return to language list, c to continue, q to quit]: 1
- 设置时间 选择
Set timezone
—-Asia
—-Shanghai
Time settings
Timezone: not set
NTP servers:not configured
1) Set timezone
2) Configure NTP servers
Please make your choice from above ['q' to quit | 'c' to continue |
'r' to refresh]: 1
================================================================================
================================================================================
Timezone settings
Available regions
1) Europe 6) Pacific 10) Arctic
2) Asia 7) Australia 11) US
3) America 8) Atlantic 12) Etc
4) Africa 9) Indian
5) Antarctica
1) Aden 29) Hong_Kong 56) Pontianak
2) Almaty 30) Hovd 57) Pyongyang
3) Amman 31) Irkutsk 58) Qatar
4) Anadyr 32) Jakarta 59) Qyzylorda
5) Aqtau 33) Jayapura 60) Riyadh
6) Aqtobe 34) Jerusalem 61) Sakhalin
7) Ashgabat 35) Kabul 62) Samarkand
8) Atyrau 36) Kamchatka 63) Seoul
9) Baghdad 37) Karachi 64) Shanghai
10) Bahrain 38) Kathmandu 65) Singapore
11) Baku 39) Khandyga 66) Srednekolymsk
12) Bangkok 40) Kolkata 67) Taipei
13) Barnaul 41) Krasnoyarsk 68) Tashkent
14) Beirut 42) Kuala_Lumpur 69) Tbilisi
15) Bishkek 43) Kuching 70) Tehran
16) Brunei 44) Kuwait 71) Thimphu
17) Chita 45) Macau 72) Tokyo
18) Choibalsan 46) Magadan 73) Tomsk
19) Colombo 47) Makassar 74) Ulaanbaatar
20) Damascus 48) Manila 75) Urumqi
21) Dhaka 49) Muscat 76) Ust-Nera
22) Dili 50) Nicosia 77) Vientiane
Press ENTER to continue
23) Dubai 51) Novokuznetsk 78) Vladivostok
24) Dushanbe 52) Novosibirsk 79) Yakutsk
25) Famagusta 53) Omsk 80) Yangon
26) Gaza 54) Oral 81) Yekaterinburg
27) Hebron 55) Phnom_Penh 82) Yerevan
28) Ho_Chi_Minh
Please select the timezone.
Use numbers or type names directly [b to region list, q to quit]: 64
- 设置虚拟硬盘的路径 选择
10 GiB (vda)
—-Use All Space
—-Standard Partition
Probing storage...
Installation Destination
[x] 1) : 10 GiB (vda)
1 disk selected; 10 GiB capacity; 10 GiB free ...
Please make your choice from above ['q' to quit | 'c' to continue |
'r' to refresh]: c
================================================================================
================================================================================
Probing storage...
Installation Destination
[ ] 1) Replace Existing Linux system(s)
[x] 2) Use All Space
[ ] 3) Use Free Space
Installation requires partitioning of your hard drive. Select what space to use
for the install target.
Please make your choice from above ['q' to quit | 'c' to continue |
'r' to refresh]: c
================================================================================
================================================================================
Partition Scheme Options
[x] 1) Standard Partition
[ ] 2) Btrfs
[ ] 3) LVM
[ ] 4) LVM Thin Provisioning
Select a partition scheme configuration.
Please make your choice from above ['q' to quit | 'c' to continue |
'r' to refresh]: c
Generating updated storage configuration
Checking storage configuration...
- 设置系统密码
Please select new root password. You will have to type it twice.
Password:
Password (confirm):
Use of this product is subject to the license agreement found at /usr/share/centos-release/EULA
Installation complete. Press return to quit
注意:
出现上行文字表面系统已经安装好了,可以按Enter重启系统,但会让物理机系统一并重启,这里按
Ctrl + ]
退出终端来管理虚拟机
八、虚拟机管理
命令 | 含义 |
---|---|
virsh list | 查看虚拟机列表,只能看到运行的虚拟机 |
virsh list --all | 查看虚拟机列表,包括未运行的虚拟机 |
virsh console 虚拟机名字 | 进入指定虚拟机 |
virsh shutdown 虚拟机名字 | 关闭虚拟机 |
virsh start 虚拟机名字 | 开启虚拟机 |
virsh destroy 虚拟机名字 | 类似stop,这个是强制停止 |
virsh undefine 虚拟机名字 | 彻底销毁虚拟机,会删除虚拟机配置文件(/etc/libvirt/qemu/ ),virsh list --all就看不到了 |
virsh autostart 虚拟机名字 | 宿主机开机该虚拟机也开机 |
virsh autostart --disable 虚拟机名字 | 解除开机启动 |
virsh suspend 虚拟机名字 | 挂起 |
virsh resume 虚拟机名字 | 恢复 |
- 查看虚拟机
[root@zyj-01 ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
1 centos7 running
- 关闭虚拟机
[root@zyj-01 ~]# virsh shutdown centos7
域 centos7 被关闭
- 启动虚拟机
[root@zyj-01 ~]# virsh start centos7
域 centos7 已开始
- 进入虚拟机
[root@zyj-01 ~]# virsh console centos7
连接到域 centos7
换码符为 ^]
这里还需要按Enter才能进入虚拟机
- 新建的虚拟机并没有和物理机相同网段的ip地址,按
dhclient
获取
[root@localhost ~]# dhclient
- 查看虚拟机的配置文件
[root@zyj-01 ~]# ls /etc/libvirt/qemu/
centos7.xml networks
注意:
要把虚拟机彻底删除掉需要把配置文件和虚拟机的磁盘路径文件一起删除
- 设置虚拟机开机自启动
[root@zyj-01 ~]# virsh autostart centos7
域 centos7标记为自动开始
- 取消虚拟机开机自启
[root@zyj-01 ~]# virsh autostart --disable centos7
域 centos7取消标记为自动开始
- 挂起虚拟机
[root@zyj-01 ~]# virsh suspend centos7
域 centos7 被挂起
- 恢复虚拟机
[root@zyj-01 ~]# virsh resume centos7
域 centos7 被重新恢复
九、克隆虚拟机
格式:
virt-clone --original虚拟机名 --name 新虚拟机名 --file 指定新的虚拟磁盘路径
- 先把虚拟机关闭
[root@zyj-01 ~]# virsh shutdown centos7
域 centos7 被关闭
- 克隆虚拟机
[root@zyj-01 ~]# virt-clone --original centos7 --name centos7-1 --file /kvm_data/centos7-1.img
--original
指定克隆源虚拟机
--name
指定克隆后的虚拟机名字
--file
指定目标虚拟机的虚拟磁盘文件
十、快照管理
快照就是给虚拟机的某个状态做标签,可以让虚拟机回去当时的状态
命令 | 含义 |
---|---|
virsh snapshot-create 虚拟机名 | 给指定的虚拟机创建快照 |
virsh snapshot-list 虚拟机名 | 列出指定的虚拟机所有快照 |
virsh snapshot-current 虚拟机名 | 查看指定的虚拟机当前快照版本 |
virsh snapshot-revert 虚拟机名 快照tag | 恢复指定快照 |
virsh snapshot-delete 虚拟机名 快照tag | 删除指定快照 |
给虚拟机centos7做快照
[root@zyj-01 ~]# virsh snapshot-create centos7
已生成域快照 1540277111
- 查看虚拟机centos7对应的虚拟磁盘信息
[root@zyj-01 ~]# qemu-img info /kvm_data/centos7.img
image: /kvm_data/centos7.img
file format: qcow2
virtual size: 10G (10737418240 bytes)
disk size: 1.2G
cluster_size: 65536
Snapshot list:
ID TAG VM SIZE DATE VM CLOCK
1 1540277111 0 2018-10-23 14:45:11 00:00:00.000
Format specific information:
compat: 1.1
lazy refcounts: true
信息中可以看到快照列表,虚拟磁盘格式分两种:
raw格式的虚拟磁盘不支持做快照,qcow2支持快照
- 列出虚拟机centos7的所有快照
[root@zyj-01 ~]# virsh snapshot-list centos7
名称 生成时间 状态
------------------------------------------------------------
1540277111 2018-10-23 14:45:11 +0800 shutoff
列出虚拟机centos7的当前快照的版本
[root@zyj-01 ~]# virsh snapshot-current centos7
<domainsnapshot>
<name>1540277111</name>
<state>shutoff</state>
<creationTime>1540277111</creationTime>
<memory snapshot='no'/>
<disks>
<disk name='vda' snapshot='internal'/>
<disk name='hda' snapshot='no'/>
</disks>
<creationTime>1540277111</creationTime>
是当前最新快照的tag
- 查看快照的配置文件
[root@zyj-01 ~]# ls /var/lib/libvirt/qemu/snapshot/centos7/
1540277111.xml
快照的配置文件路径是
/var/lib/libvirt/qemu/snapshot/
虚拟机名字
- 虚拟机centos7恢复到指定快照
[root@zyj-01 ~]# virsh snapshot-revert centos7 1540277111
- 虚拟机centos7删除指定快照
[root@zyj-01 ~]# virsh snapshot-delete centos7 1540277111
已删除域快照 1540277111
十一、磁盘格式
虚拟磁盘常用格式有两种:
raw
、qcow2
- 区别:磁盘占中情况上qcow2保持一致,raw不一样。
raw定义磁盘多大就占多大,qcow2用多大就占多大
。raw 启动的虚拟机会比 QCOW2 启动的虚拟机 I/O 效率更高,qcow2
是一种当下比较主流的虚拟化磁盘格式,具有占用空间小,支持加密,支持压缩,支持快照
的。 raw格式的磁盘性能比qcow2要好,但是raw格式的磁盘无法做快照
[root@zyj-01 ~]# ll -h /kvm_data/centos7*
-rw-r--r-- 1 root root 193K 10月 23 22:18 /kvm_data/centos7.qcow2
-rw-r--r-- 1 root root 2.0G 10月 23 22:10 /kvm_data/centos7.raw
[root@zyj-01 ~]# du -sh /kvm_data/centos7*
196K /kvm_data/centos7.qcow2
0 /kvm_data/centos7.raw
命令 | 含义 |
---|---|
qemu-img info 虚拟磁盘路径 | 查看虚拟磁盘格式 |
qemu-img create -f 格式 虚拟磁盘路径 容量 | 创建对应格式的虚拟磁盘 -f 指定格式 |
qemu-img convert -O 格式 源虚拟磁盘路径 新虚拟磁盘路径 | 虚拟磁盘转换格式 -O 指定转化的新格式 |
virsh edit 虚拟机名 | 编辑虚拟机的配置文件 等同于vim /etc/libvirt/qemu/ |
- 查看虚拟磁盘格式
[root@zyj-01 ~]# qemu-img info /kvm_data/centos7.img
image: /kvm_data/centos7.img
file format: qcow2
- 创建2G的raw的格式磁盘
[root@zyj-01 ~]# qemu-img create -f raw /kvm_data/centos7.raw 2G
Formatting '/kvm_data/centos7.raw', fmt=raw size=2147483648
- 把raw格式的磁盘转换为qcow2格式
[root@zyj-01 ~]# qemu-img convert -O qcow2 /kvm_data/centos7.raw /kvm_data/centos7.qcow2 ##类似于复制
- 关闭虚拟机
[root@zyj-01 ~]# virsh shutdown centos7-1
- 转化磁盘格式
[root@zyj-01 ~]# qemu-img convert -O raw /kvm_data/centos7-1.img /kvm_data/centos7-1.raw
- 编辑虚拟机的配置文件中的格式和路径
[root@zyj-01 ~]# virsh edit centos7-1
<driver name='qemu' type='qcow2'/>
<source file='/kvm_data/centos7-1.img'/>
修改为raw
和 /kvm_data/centos7-1.raw
<driver name='qemu' type='raw'/>
<source file='/kvm_data/centos7-1.raw'/>
- 启动虚拟机
[root@zyj-01 ~]# virsh start centos7-1
域 centos7-1 已开始
十二、磁盘扩容(raw)
与VMware类似,磁盘扩容分两种。第一种是在已有的磁盘上扩容
,第二种是添加新的磁盘
。
在已有的磁盘上扩容
- 对centos7-1的raw磁盘增加2G
[root@zyj-01 kvm_data]# qemu-img resize /kvm_data/centos7-1.raw +2G
[root@zyj-01 kvm_data]# qemu-img info /kvm_data/centos7-1.raw ##查看是否多了2G
image: /kvm_data/centos7-1.raw
file format: raw
virtual size: 12G (12884901888 bytes)
disk size: 1.2G
- 进入虚拟机系统里面建立新分区来使用
[root@zyj-01 kvm_data]# virsh start centos7-1
[root@zyj-01 kvm_data]# virsh console centos7-1
- 进入虚拟系统后使用fdisk分区
[root@localhost ~]# fdisk -l
磁盘 /dev/vda:12.9 GB, 12884901888 字节,25165824 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000ceb76
设备 Boot Start End Blocks Id System
/dev/vda1 * 2048 2099199 1048576 83 Linux
/dev/vda2 2099200 4196351 1048576 82 Linux swap / Solaris
/dev/vda3 4196352 20971519 8387584 83 Linux
[root@localhost ~]# fdisk /dev/vda
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
命令(输入 m 获取帮助):n
Partition type:
p primary (3 primary, 0 extended, 1 free)
e extended
Select (default e): p
已选择分区 4
起始 扇区 (20971520-25165823,默认为 20971520):
将使用默认值 20971520
Last 扇区, +扇区 or +size{K,M,G} (20971520-25165823,默认为 25165823):
将使用默认值 25165823
分区 4 已设置为 Linux 类型,大小设为 2 GiB
添加新的磁盘
- 创建新的虚拟硬盘
[root@zyj-01 kvm_data]# qemu-img create -f raw /kvm_data/centos7-1-1st.raw 2G
[root@zyj-01 kvm_data]# qemu-img info /kvm_data/centos7-1-1st.raw
image: /kvm_data/centos7-1-1st.raw
file format: raw
virtual size: 2.0G (2147483648 bytes)
disk size: 0
- 编辑虚拟机配置文件添加新建磁盘的路径
[root@zyj-01 kvm_data]# virsh edit centos7-1
- 复制上段
<disk type='file' device='disk'>
<driver name='qemu' type='raw'/>
<source file='/kvm_data/centos7-1.raw'/>
<target dev='vda' bus='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
</disk>
- 改
source file='/kvm_data/centos7-1-1st.raw'
和target dev='vdb'
和slot='0x08'
<disk type='file' device='disk'>
<driver name='qemu' type='raw'/>
<source file='/kvm_data/centos7-1-1st.raw'/>
<target dev='vdb' bus='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/>
</disk>
slot中的数字必须和配置文件其他的slot不一样,否则报错
- 在虚拟机里面为新增的虚拟磁盘创建分区
[root@zyj-01 kvm_data]# virsh start centos7-1
[root@zyj-01 kvm_data]# virsh console centos7-1
[root@localhost ~]# fdisk /dev/vdb
命令(输入 m 获取帮助):n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p):
Using default response p
分区号 (1-4,默认 1):
起始 扇区 (2048-4194303,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-4194303,默认为 4194303):
将使用默认值 4194303
分区 1 已设置为 Linux 类型,大小设为 2 GiB
[root@localhost ~]# mkfs.xfs /dev/vdb1 ##格式化
[root@localhost ~]# mkdir /newdisk
[root@localhost ~]# mount /dev/vdb1 /newdisk/ ##挂载目录
[root@localhost ~]# vi /etc/fstab ##添加开机启动
/dev/vdb1 /newdisk xfs defaults 0 0
一般在生产环境中都会使用新增虚拟磁盘来扩容
十三、磁盘扩容(qcow2)
qcow2格式磁盘的扩容和raw格式磁盘一样都是有两种方式,但必须先把快照给删除掉才扩容
[root@zyj-01 ~]# qemu-img resize /kvm_data/centos7.img +2G
qemu-img: Can't resize an image which has snapshots
qemu-img: This image does not support resize
只能把虚拟机centos7的快照给删除掉
[root@zyj-01 ~]# virsh snapshot-delete centos7 1540366135
已删除域快照 1540366135
在已有的磁盘上扩容
[root@zyj-01 ~]# qemu-img resize /kvm_data/centos7.img +2G
[root@zyj-01 ~]# virsh start centos7
[root@zyj-01 ~]# virsh console centos7
[root@localhost ~]# fdisk /dev/vda
添加新qcow2格式磁盘
[root@zyj-01 ~]# qemu-img create -f qcow2 /kvm_data/centos7-1st.img 2G
[root@zyj-01 ~]# virsh edit centos7
- 添加
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2'/>
<source file='/kvm_data/centos7-1st.img'/>
<target dev='vdb' bus='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/>
</disk>
[root@zyj-01 ~]# virsh start centos7
[root@zyj-01 ~]# virsh console centos7
[root@localhost ~]# fdisk /dev/vdb ##创建分区
[root@localhost ~]# mkfs.xfs /dev/vdb1 ##格式化
[root@localhost ~]# mkdir newdisk
[root@localhost ~]# mount /dev/vdb1 /newdisk/ ##挂载目录
[root@localhost ~]# vi /etc/fstab ##添加开机启动
/dev/vdb1 /newdisk xfs defaults 0 0
十四、调整cpu内存和网卡
命令 | 含义 |
---|---|
virsh dominfo 虚拟机名 | 查看虚拟机cpu内存信息 |
virsh domiflist 虚拟机名 | 查看虚拟机网卡信息 |
virsh domblklist 虚拟机名 | 查看虚拟机磁盘信息 |
virsh setmem 虚拟机名 内存大小 | 动态调整虚拟机内存 |
virsh setvcpus 虚拟机名 cpu个数 | 动态调整虚拟机CPU |
virsh attach-interface 虚拟机名 –type 模式 –source 源网卡 | 动态添加虚拟机网卡 |
virsh dumpxml centos7 > /etc/libvirt/qemu/虚拟机名.xml | 保存配置 |
- 查看虚拟机centos7配置信息
[root@zyj-01 ~]# virsh dominfo centos7
Id: -
名称: centos7
UUID: 6f6ab168-26db-4f73-8041-2aba9471747f
OS 类型: hvm
状态: 关闭
CPU: 1
最大内存: 1048576 KiB
使用的内存: 524288 KiB
持久: 是
自动启动: 禁用
管理的保存: 否
安全性模式: none
安全性 DOI: 0
- 查看虚拟机centos7网卡信息
[root@zyj-01 ~]# virsh domiflist centos7
接口 类型 源 型号 MAC
-------------------------------------------------------
vnet0 bridge br0 virtio 52:54:00:38:70:49
- 查看虚拟机centos7-1磁盘信息
[root@zyj-01 ~]# virsh domblklist centos7-1
目标 源
------------------------------------------------
vda /kvm_data/centos7-1.raw
vdb /kvm_data/centos7-1-1st.raw
hda -
- 也可以直接编辑配置文件来查看信息来调整cpu 内存 网卡
[root@zyj-01 ~]# virsh edit centos7
<domain type='kvm'>
<name>centos7</name>
<uuid>6f6ab168-26db-4f73-8041-2aba9471747f</uuid>
<memory unit='KiB'>1048576</memory> ##分配了多少内存
<currentMemory unit='KiB'>524288</currentMemory> ##现在使用了多少内存
<vcpu placement='static' current='1'>2</vcpu> ##1表示现在使用cpu个数,2表示最大cpu个数
<os>
- 虚拟机启动时,在线调整内存
[root@zyj-01 ~]# virsh setmem centos7 800m
- 虚拟机启动时,在线调整cpu
[root@zyj-01 ~]# virsh setvcpus centos7 2
- 虚拟机启动时,在线添加网卡
[root@zyj-01 ~]# virsh attach-interface centos7 --type bridge --source virbr0
成功附加接口
增加一块新的网卡,并设置为nat网络模式
(virbr0类似vmware的vmnet8),这里如果写--source br0
,则网络模式为桥接
- 由于在线调整配置只是临时,还需要让配置文件
/etc/libvirt/qemu/
作更新下
[root@zyj-01 ~]# virsh dumpxml centos7 > /etc/libvirt/qemu/centos7.xml
十五、迁移虚拟机
迁移虚拟机就是拷贝xml文件和img文件到远程机器上。再使用define让他出现在virsh list上。克隆虚拟机只是在本机上。
步骤
- 拷贝xml配置文件到远程机器上
[root@zyj-01 ~]# rsync -av /etc/libvirt/qemu/centos7-1.xml 192.168.80.104:/tmp/
- 拷贝虚拟硬盘的文件到远程机器上
[root@zyj-01 ~]# virsh domblklist centos7-1 ##查看到centos7-1有两个磁盘文件
目标 源
------------------------------------------------
vda /kvm_data/centos7-1.raw
vdb /kvm_data/centos7-1-1st.raw
hda -
[root@zyj-01 ~]# rsync -av /kvm_data/centos7-1.raw 192.168.80.104:/kvm_data/
[root@zyj-01 ~]# rsync -av /kvm_data/centos7-1-1st.raw 192.168.80.104:/kvm_data/
- 定义新的虚拟机
在zyj04上
[root@zyj04 ~]# cp /tmp/centos7-1.xml /etc/libvirt/qemu/ ##把配置文件拷贝到配置目录上
[root@zyj04 ~]# virsh define /etc/libvirt/qemu/centos7-1.xml ##定义指定配置文件
[root@zyj04 ~]# virsh start centos7-1 ##进入新虚拟机
[root@zyj04 ~]# virsh console centos7-1
总结
平时备份虚拟机只要备份(
/etc/libvirt/qemu/centos7.xml
)配置文件和(/kvm_data/centos7.img
)磁盘文件即可