文章目录
虚拟化介绍
简介
虚拟化,是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机。在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率
虚拟化使用软件的方法重新定义划分IT资源,可以实现IT资源的动态分配、灵活调度、跨域共享,提高IT资源利用率,使IT资源能够真正成为社会基础设施,服务于各行各业中灵活多变的应用需求。
虚拟化分类
虚拟化技术可分为:全虚拟化和半虚拟化。
- 全虚拟化:最流行的虚拟化方法使用名为Hypervisor的一种软件,在虚拟服务器和底层硬件之间建立一个抽象层。Hypervisor可以捕获CPU指令,为指令访问硬件控制器和外设充当中介。因而,完全虚拟化技术几乎能让任何一款操作系统不用改动就能安装到虚拟服务器上,而它们不知道自己运行在虚拟化环境下。主要缺点是,Hypervisor 给处理器带来的负荷会很大。
- 半虚拟化:完全虚拟化是处理器密集型技术,因为它要求Hypervisor管理各个虚拟服务器,并让它们彼此独立。减轻这种负担的一种方法就是,改动客户端操作系统,修改guestos内核,让guestos可以直接使用CPU资源,而不需要翻译指令了,从而节省了资源,同时让它以为自己运行在虚拟环境下,能够与Hypervisor 协同工作。这种方法就叫准虚拟化(para-virtualization)Xen。
虚拟化架构
- Type-I型
Hypervisor直接安装在物理机上,多个虚拟机在 Hypervisor 上运行。Xen和VMWare的ESXi 都属于这个类型。
- Type-II型
物理机上首先安装常规的操作系统,比如 RedHat、Ubuntu和Windows。Hypervisor作为OS上的一个程序模块运行,并对虚拟机进行管理。KVM、VirtualBox和 VMWare Workstation 都属于这个类型。
KVM介绍
简介
KVM(Kernel-Based Virtual Machines)是一个基于Linux内核的虚拟化技术, KVM是Linux内核的一个模块,可以直接将Linux内核转换为Hypervisor(系统管理程序)从而使得Linux内核能够直接管理虚拟机, 直接调用Linux内核中的内存管理、进程管理子系统来管理虚拟机。
KVM的虚拟化需要硬件支持(如Intel VT技术或者AMD V技术)。是基于硬件的完全虚拟化。
KVM是完全开源的,RedHat基于KVM的虚拟化解决方案叫做RHEV
KVM在Linux操作系统里面以进程的形式出现,由标准的Linux调度程序进行调度,这使得KVM能够使用Linux内核的已有功能
只有一个KVM内核模块还不能实现虚拟化的全部功能,就好比操作系统只有内核还不能成为一个完整的操作系统一样
QEMU是一个开源的虚拟化软件,纯软件,可以虚拟化所以的硬件,性能不强
KVM基于QEMU开发了一个能够运行在用户空间的工具QEMU-KVM
磁盘、网络设备等都是通过QEMU-KVM这个工具模拟出来的
KVM和QEMU-KVM通信是通过/dev/kvm实现的
libvirt是用来管理KVM虚拟机的API,其命令为virsh
架构
安装KVM
调整虚拟机
修改虚拟机内存,至少设置成2 GB,双击“编辑虚拟机设置”按钮,如下图所示:
将虚拟机的内存修改为“2048”,如图所示:
在“硬件”选项卡中单击“处理器”, 在虚拟化引擎中勾选如红框内所示选项,如下图所示:
接下来,我们添加硬盘,单击“添加”,如下图所示:
然后选择硬盘,单击“下一步”按钮,如下图所示:
选择“SCSI”,单击“下一步”按钮,如下图所示:
选中“创建新虚拟磁盘”选项,单击“下一步”按钮,如下图所示:
将最大磁盘大小修改为“50”,然后点击“下一步”按钮,如下图所示:
单击“完成”按钮,磁盘添加完成。如下图所示:
单击“确定”按钮,如下图所示:
至此,虚拟机设置完成。如图所示:
配置完成,我们启动虚拟机。
检查CPU参数
启动虚拟机,我们查看以下,内存是否更改成功,命令如下:
[root@kvm ~]# free
检查CPU是否开启虚拟化支持,命令如下:
[root@kvm ~]# grep -Ei ‘vmx|svm’ /proc/cpuinfo
//vmx为英特尔的cpu;svm为AMD的cpu。
挂载新磁盘
使用lsblk命令,检查虚拟机是否新增一块50 GB的磁盘,命令如下:
[root@kvm ~]# lsblk
我们可以看到确实新增了一块磁盘名为sdb。
接下来格式化这块磁盘,格式化成ext4格式,命令如下:
[root@kvm ~]# mkfs.ext4 /dev/sdb
[root@kvm ~]# blkid /dev/sdb
//blkid+磁盘:查看磁盘信息
格式化完成后,我们挂载磁盘,先创建挂载目录/kvm_data,然后进行挂载,命令如下:
[root@kvm ~]# mkdir /kvm_data
[root@kvm ~]# mount /dev/sdb /kvm_data/
这种方式挂载,重启虚拟机后,需要再次重新挂载,我们为了方便开机后可以自动挂载,编写/etc/fstab文件,添加文件最末一行,命令如下:
[root@kvm ~]# vi /etc/fstab
[root@kvm ~]# cat /etc/fstab
/dev/sdb /kvm_data ext4 defaults 0 0
关闭防火墙和selinux
关闭防火墙并设置开机不自启,命令如下:
[root@kvm ~]# systemctl stop firewalld
[root@kvm ~]# systemctl disable firewalld
关闭SELinux,编辑/etc/selinux/config,将enforcing修改为disabled,命令如下:
[root@kvm ~]# vi /etc/selinux/config
[root@kvm ~]# cat /etc/selinux/config
#This file controls the state of SELinux on the system.
#SELINUX= can take one of these three values:
#enforcing - SELinux security policy is enforced.
#permissive - SELinux prints warnings instead of enforcing.
#disabled - No SELinux policy is loaded.
SELINUX=disabled
//修改这一位置的内容
#SELINUXTYPE= can take one of three two values:
#targeted - Targeted processes are protected,
#minimum - Modification of targeted policy. Only selected processes are protected.
#mls - Multi Level Security protection.
SELINUXTYPE=targeted
修改完成后,重启虚拟机,使其生效,使用getenforce查看,命令如下:
[root@kvm ~]# getenforce
Disabled
使用Yum进行安装KVM:
[root@kvm ~]# yum install -y virt-* libvirt bridge-utils qemu-img
…………
Complete!
启动KVM
配置网卡
增加桥接网卡ifcfg-br0,命令如下:
[root@kvm ~]# cd /etc/sysconfig/network-scripts/
[root@kvm network-scripts]# cp ifcfg-ens33 ifcfg-br0
//ifcfg-ens33为配置IP的网卡,你的网卡可能与我的不同
修改桥接网卡ifcfg-br0的内容,命令如下:
[root@kvm network-scripts]# vi ifcfg-br0
[root@kvm network-scripts]# cat ifcfg-br0
TYPE=Bridge
BOOTPROTO=none
NAME=br0
DEVICE=br0
ONBOOT=yes
IPADDR=192.168.31.145
NETMASK=255.255.255.0
GATEWAY=192.168.31.2
DNS1=114.114.114.114
DNS2=8.8.8.8
修改NAT网卡ifcfg-en33,内容如下:
[root@kvm network-scripts]# vi ifcfg-ens33
[root@kvm network-scripts]# cat ifcfg-ens33
TYPE=Ethernet
BOOTPROTO=none
NAME=ens33
DEVICE=ens33
ONBOOT=yes
BRIDGE=br0
修改完成网卡内容后,重新启动网卡服务并查看网卡信息,命令如下:
[root@kvm network-scripts]# service network restart
[root@kvm network-scripts]# ifconfig
可以清楚的看到br0网卡出现并且带有IP,而以前的ens33网卡则没有IP。网卡配置完成
启动libvirtd服务
首先检查KVM模块是否加载,命令如下(lsmod命令用于显示已载入系统的模块):
[root@kvm network-scripts]# lsmod|grep kvm
启动libvirtd并检查是否成功启动,命令如下:
[root@kvm network-scripts]# systemctl start libvirtd
[root@kvm network-scripts]# ps -ef |grep libvirt
启动成功后,使用brctl命令可以看到两个网卡,如下代码所示:
[root@kvm ~]# cd
[root@kvm ~]# brctl show
命令行安装CentOS 7
CentOS7镜像下载地址:
http://mirrors.163.com/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-2003.iso
首先,通过SCRT上传CentOS 7镜像到/tmp目录下,如果没有镜像的可以自行下载。上传后,使用ll命令查看/tmp目录下是否存在CentOS 7镜像文件,命令如下:
[root@kvm ~]# ll /tmp/
镜像存在,接下来使用virt-install进行CentOS 7的安装,命令如下:
[root@kvm ~]# virt-install --name=test --memory=512,maxmemory=1024
–vcpus=1,maxvcpus=2 --os-type=linux --os-variant=rhel7
–location=/tmp/CentOS-7-x86_64-DVD-1810.iso
–disk path=/kvm_data/test.img,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:定义终端额外的参数。 - 打完上面那条命令后,等一会,就可以看见下面这段命令,这是系统基础设置,带[!]基本都是需要配置的,接下来我们开始配置“Timezone settings”,输入“2”,按Enter键,命令如下:(不同版本镜像文件设置内容顺序不一样)
Starting installer, one moment…
anaconda 21.48.22.56-1 for CentOS 7 started.
- installation log files are stored in /tmp during the installation
- shell is available on TTY2
- when reporting a bug add logs from /tmp as separate text/plain attachments
17:01:51 Not asking for VNC because we don’t have a network
================================================================================
================================================================================
Installation
- Language settings 2) [!] Timezone settings
(English (United States)) (Timezone is not set.) - [!] Installation source 4) [!] Software selection
(Processing…) (Processing…) - [!] Installation Destination 6) [x] Kdump
(No disks selected) (Kdump is enabled) - Network configuration 8) [!] Root password
(Not connected) (Password is not set.) - [!] User creation
(No user will be created)
Please make your choice from above [‘q’ to quit | ‘b’ to begin installation | ‘r’ to refresh]: 2
=====================================================================
输入2,进行时区设置
“Timezone settings”时区设置选择 5) Asia亚洲,再选择城市 62) Shanghai上海,命令如下:
Timezone settings
Available regions
- Africa 6) Atlantic 10) Pacific
- America 7) Australia 11) US
- Antarctica 8) Europe 12) Etc
- Arctic 9) Indian
- Asia
Please select the timezone.
Use numbers or type names directly [b to region list, q to quit]: 5
================================================================================
================================================================================
Timezone settings
Available timezones in region Asia
-
Aden 28) Irkutsk 54) Pyongyang
-
Almaty 29) Jakarta 55) Qatar
-
Amman 30) Jayapura 56) Qyzylorda
-
Anadyr 31) Jerusalem 57) Rangoon
-
Aqtau 32) Kabul 58) Riyadh
-
Aqtobe 33) Kamchatka 59) Sakhalin
-
Ashgabat 34) Karachi 60) Samarkand
-
Baghdad 35) Kathmandu 61) Seoul
-
Bahrain 36) Khandyga 62) Shanghai
-
Baku 37) Kolkata 63) Singapore
-
Bangkok 38)Krasnoyarsk 64) Srednekolymsk
-
Beirut 39) Kuala_Lumpur 65) Taipei
-
Bishkek 40) Kuching 66) Tashkent
-
Brunei 41) Kuwait 67) Tbilisi
-
Chita 42) Macau 68) Tehran
-
Choibalsan 43) Magadan 69) Thimphu
-
Colombo 44) Makassar 70) Tokyo
-
Damascus 45) Manila 71) Ulaanbaatar
-
Dhaka 46) Muscat 72) Urumqi
-
Dili 47) Nicosia 73) Ust-Nera
-
Dubai 48) Novokuznetsk 74) Vientiane
-
Dushanbe 49) Novosibirsk 75) Vladivostok
Press ENTER to continue -
Gaza 50) Omsk 76) Yakutsk
-
Hebron 51) Oral 77) Yekaterinburg
-
Ho_Chi_Minh 52) Phnom_Penh 78) Yerevan
-
Hong_Kong 53) Pontianak
-
Hovd
Please select the timezone.
Use numbers or type names directly [b to region list, q to quit]: 62
================================================================================
输入完毕后,可以发现2的[!]变成了[x],证明配置完毕。
接下来我们配置“Software selection”,选择“4”,在选择“c”,因为默认就是minimalinstall,按Enter键,命令如下:
Installation -
Language settings 2) [x] Timezone settings
(English (United States)) (Asia/Shanghai timezone) -
Installation source 4) [!] Software selection
(Local media) (Minimal Install) -
[!] Installation Destination 6) [x] Kdump
(No disks selected) (Kdump is enabled) -
Network configuration 8) [!] Root password
(Not connected) (Password is not set.) -
[!] User creation
(No user will be created)
Please make your choice from above [‘q’ to quit | ‘b’ to begin installation |
‘r’ to refresh]: 4
================================================================================
================================================================================
Base environment
Software selection
Base environment
-
Minimal Install 7) [ ] Server with GUI
-
Compute Node 8) [ ] GNOME Desktop
-
Infrastructure Server 9) [ ] KDE Plasma Workspaces
-
File and Print Server 10) [ ] Development and Creative Work
-
Basic Web Server station
-
Virtualization Host
Please make your choice from above [‘q’ to quit | ‘c’ to continue |
‘r’ to refresh]: c
接下来我们配置“Installation Destination”,选择“5”,其余的依次选择“c”,按Enter键,命令如下:
Installation -
Language settings 2) [x] Timezone settings
(English (United States)) (Asia/Shanghai timezone) -
[!] Installation source 4) [!] Software selection
(Processing…) (Processing…) -
[!] Installation Destination 6) [x] Kdump
(No disks selected) (Kdump is enabled) -
Network configuration 8) [!] Root password
(Not connected) (Password is not set.) -
[!] User creation
(No user will be created)
Please make your choice from above [‘q’ to quit | ‘b’ to begin installation |
‘r’ to refresh]: 5
================================================================================
================================================================================
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
================================================================================
Autopartitioning Options
[ ] 1) Replace Existing Linux system(s)
[x] 2) Use All Space
-
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
[ ]1) Standard Partition
[ ]2) Btrfs
[x] 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…
================================================================================
================================================================================
接下来配置“Root password”,选择8,按Enter键,命令如下:
Installation -
Language settings 2) [x] Timezone settings
(English (United States)) (Asia/Shanghai timezone) -
Installation source 4) [x] Software selection
(Local media) (Minimal Install) -
Installation Destination 6) [x] Kdump
(Automatic partitioning selecte (Kdump is enabled)
d) 8) [!] Root password -
Network configuration (Password is not set.)
(Not connected) -
[!] User creation
(No user will be created)
Please make your choice from above [‘q’ to quit | ‘b’ to begin installation |
‘r’ to refresh]: 8
================================================================================
================================================================================
Please select new root password. You will have to type it twice.
依次输入两次密码,密码相同,我设置的为123456,命令如下:
Password: 123456
//密码为密文,不显示。
Password (confirm): 123456
================================================================================
================================================================================
Question
You have provided a weak password: The password fails the dictionary check - it
is too simplistic/systematic
Would you like to use it anyway?
//这句话的意思:你的密码太过简单,是否使用它,输入yes即可。
Please respond ‘yes’ or ‘no’: yes
=========================================================
=========================================================
配置完成,选择“b”,按Enter键后,开始安装,命令如下:
Installation -
Language settings 2) [x] Timezone settings
(English (United States)) (Asia/Shanghai timezone) -
Installation source 4) [x] Software selection
(Local media) (Minimal Install) -
Installation Destination 6) [x] Kdump
(Automatic partitioning selecte (Kdump is enabled)
d) 8) [x] Root password -
Network configuration (Password is set.)
(Not connected) -
User creation
(No user will be created)
Please make your choice from above [‘q’ to quit | ‘b’ to begin installation |
‘r’ to refresh]: b
================================================================================
================================================================================
Progress
Setting up the installation environment
.
Creating disklabel on /dev/vda
.
Creating xfs on /dev/vda1
.
Creating lvmpv on /dev/vda2
.
Creating swap on /dev/mapper/centos-swap
.
……………………
Installing readline (34/297)
Installing gawk (35/297)
Installing elfutils-libelf (36/297)
Installing libgpg-error (37/297)
Installing libffi (38/297)
Installing libattr (39/297)
Installing libacl (40/297)
Installing libcap (41/297)
Installing libgcrypt (42/297)
Installing cpio (43/297)
Installing libxml2 (44/297)
Installing libnl3 (45/297)
Installing expat (46/297)
Installing p11-kit (47/297)
……………………
.
Performing post-installation setup tasks
.
Configuring installed system
.
Writing network configuration
.
Creating users
.
Configuring addons
.
Generating initramfs
.
Running post-installation scripts
.
Use of this product is subject to the license agreement found at /usr/share/centos-release/EULAInstallation complete. Press return to quit
//按回车
……………………
CentOS Linux 7 (Core)
Kernel 3.10.0-327.el7.x86_64 on an x86_64
localhost login: root
Password: 123456
[root@localhost ~]#
//按“Ctrl+]”键,退出终端,回到宿主机。
[root@kvm ~]#
虚拟机管理
KVM基本管理
完成虚拟机安装,已经退回到宿主机,接下来我们来通过宿主机virsh命令进行管理刚才安装的CentOS 7虚拟机。
查看虚拟机列表,命令如下:
[root@kvm ~]# virsh list
//查看虚拟机列表,只能看到正在运行的虚拟机
[root@kvm ~]# virsh list --all
//查看虚拟机列表,包括未运行的虚拟机
进入指定的虚拟,命令如下:
[root@kvm ~]# virsh console test
Connected to domain test
Escape character is ^]
//如果迟迟未动敲下回车就ok,下面就是正常登录时需要输入的用户名密码
CentOS Linux 7 (Core)
Kernel 3.10.0-327.el7.x86_64 on an x86_64
localhost login:
若发生以下报错信息,命令如下:
[root@kvm ~]# virsh console test
Connected to domain test
Escape character is ^]
error: operation failed: Active console session exists for this domain
解决方式,命令如下:
[root@kvm ~]# ps -ef |grep console
root 11167 10987 0 01:55 tty1 00:00:00 virsh console test
root 16017 15750 0 10:01 pts/1 00:00:00 grep --color=auto console
[root@kvm ~]# kill -9 11167
vrish常用命令,命令如下:
virsh shutdown test
//关闭虚拟机
virsh start test
//开启虚拟机
virsh destroy test
//类似stop,这个是强制停止
virsh undefine test
//彻底销毁虚拟机,会删除虚拟机配置文件,virsh list --all就看不到
virsh autostart test
//宿主机开机该虚拟机也开机
virsh autostart --disable test
//解除开机启动
virsh suspend test
//挂起
virsh resume test
//恢复
克隆虚拟机
克隆虚拟机之前,要先关闭虚拟机,不然会提示这种错误,命令如下:
[root@kvm ~]# virt-clone --original test --name test02 --file
/kvm_data/test02.img
关闭虚拟机后,再次进行克隆,命令如下:
[root@kvm ~]# virsh shutdown test
[root@kvm ~]# virt-clone --original test --name test02 --file
//克隆完成且成功
- 命令解释:
–original:指定克隆源虚拟机。
–name:指定克隆后的虚拟机名字。
–file:指定目标虚拟机的虚拟磁盘文件。
查看虚拟机配置文件/etc/libvirt/qemu/,看是否增加test02.xml文件,命令如下:
[root@kvm ~]# ls /etc/libvirt/qemu/
接下来,我们启动刚刚克隆的虚拟机test02,首先查看虚拟机列表,然后启动克隆的虚拟机test02,命令如下:
[root@kvm ~]# virsh list --all
[root@kvm ~]# virsh start test02
快照管理
快照是在我们使用Vmware的时候,很常用的一个功能。它可以回到之前的某一状态。在KVM中RAW格式的虚拟磁盘不支持做快照,qcow2支持。
创建快照,命令如下:
[root@kvm ~]# virsh snapshot-create test
查看test.img信息,同时会查看到快照列表,命令如下:
[root@kvm ~]# qemu-img info /kvm_data/test.img
列出所有快照,命令如下:
[root@kvm ~]# virsh snapshot-list test
查看当前快照详细信息,命令如下:
[root@kvm ~]# virsh snapshot-current test
查看所有快照配置文件,命令如下:
[root@kvm ~]# ls /var/lib/libvirt/qemu/snapshot/test/
恢复指定快照,命令如下:
[root@kvm ~]# virsh snapshot-revert test 1615951195
删除指定快照,命令如下:
[root@kvm ~]# virsh snapshot-delete test 1615951195
磁盘格式
查看虚拟磁盘格式,命令如下:
[root@kvm ~]# qemu-img info /kvm_data/test.img
创建2 GB的RAW格式磁盘,命令如下:
[root@kvm ~]# qemu-img create -f raw /kvm_data/test_1.img 2G
RAW格式的磁盘转换为qcow2格式,命令如下:
[root@kvm ~]# qemu-img convert -O qcow2 /kvm_data/test_1.img /kvm_data/test_1.qcow2
查看test1.img大小,命令如下:
[root@kvm ~]# ls -lh /kvm_data/test_1.img
[root@kvm ~]# ls -lh /kvm_data/test_1.qcow2
//可以看到qcow2文件比较小,raw文件大小和我们指定空间大小一样是2G
//raw格式的磁盘性能比qcow2要好,但是raw格式的磁盘无法做快照
将test02转成raw格式,命令如下:
[root@kvm ~]# qemu-img convert -O raw /kvm_data/test02.img /kvm_data/test02_2.img
更改磁盘格式和文件路径,然后启动test02虚拟机,命令如下:
[root@kvm ~]# virsh edit test02
…………
< disk type=‘file’ device=‘disk’>
< driver name=‘qemu’ type=‘qcow’/>
< source file=’/kvm_data/test02.img’/>
< target dev=‘vda’ bus=‘virtio’/>
< address type=‘pci’ domain=‘0x0000’ bus=‘0x00’ slot=‘0x06’ function=‘0x0’/>
< /disk>
//找到上面这部分将qcow修改为raw,/kvm_data/test02.img改为/kvm_data/test02_2.img,将type由qcow改为raw。
< disk type=‘file’ device=‘disk’>
< driver name=‘qemu’ type=‘raw’/>
< source file=’/kvm_data/test02_2.img’/>
< target dev=‘vda’ bus=‘virtio’/>
< address type=‘pci’ domain=‘0x0000’ bus=‘0x00’ slot=‘0x06’ function=‘0x0’/>
< /disk>
………………
查看磁盘所属用户和组,命令如下:
[root@kvm ~]# ls -l /kvm_data/
启动虚拟机test02,然后再次查看磁盘所属用户和组,命令如下:
[root@kvm ~]# virsh start test02
//启动后所属组变化成qemu的是test02_2.img,证明这个磁盘正在被使用
磁盘扩容
我们知道,在这里磁盘一共有两种格式,一种是RAW格式,一种是qcow2格式,接下来我们分别给这两种磁盘格式进行扩容。
首先扩容RAW格式,命令如下:
[root@kvm ~]# qemu-img resize /kvm_data/test02_2.img +2G
查看test02_2.raw信息,命令如下:
[root@kvm ~]# qemu-img info /kvm_data/test02_2.img
进入虚拟机test02,使用fdisk -l查看磁盘,命令如下:
[root@kvm ~]# virsh console test02
[root@localhost ~]# fdisk -l
//可以看到磁盘还是10 GB
退出终端,关闭test02虚拟机,重新启动,然后再次进入虚拟机test02,使用fdisk -l查看磁盘,命令如下:
[root@kvm ~]# virsh destroy test02
[root@kvm ~]# virsh start test02
[root@kvm ~]# virsh console test02
[root@localhost ~]# fdisk -l
Disk /dev/vda: 12.9 GB, 12884901888 bytes, 25165824 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x0005b865
Device Boot Start End Blocks Id System
/dev/vda1 * 2048 1026047 512000 83 Linux
/dev/vda2 1026048 20971519 9972736 8e Linux LVM
Disk /dev/mapper/centos-root: 9093 MB, 9093251072 bytes, 17760256 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/mapper/centos-swap: 1073 MB, 1073741824 bytes, 2097152 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
可以看到已经变成12 GB了。
接下来,我们怎么使用新增加的这2 GB磁盘,那就是分区,命令如下:
[root@localhost ~]# fdisk /dev/vda
Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help): n
//新建分区
Partition type:
p primary (2 primary, 0 extended, 2 free)
e extended
Select (default p): p
Partition number (3,4, default 3):
//按Enter键
First sector (20971520-25165823, default 20971520):
//按Enter键
Using default value 20971520
Last sector, +sectors or +size{K,M,G} (20971520-25165823, default 25165823):
//按Enter键
Using default value 25165823
Partition 3 of type Linux and of size 2 GiB is set
Command (m for help): p
//查看分区列表
Disk /dev/vda: 12.9 GB, 12884901888 bytes, 25165824 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x0005b865
Device Boot Start End Blocks Id System
/dev/vda1 * 2048 1026047 512000 83 Linux
/dev/vda2 1026048 20971519 9972736 8e Linux LVM
/dev/vda3 20971520 25165823 2097152 83 Linux
Command (m for help): w
//保存退出并退出终端
除了对已有磁盘扩容外,还可以额外增加磁盘,命令如下:
[root@kvm ~]# qemu-img create -f raw /kvm_data/test02_3.raw 5G
使用virsh edit编辑test02虚拟机,将新磁盘增加到test02虚拟机,命令如下
[root@kvm ~]# virsh edit test02
………………
< disk type=‘file’ device=‘disk’>
< driver name=‘qemu’ type=‘raw’/>
< source file=’/kvm_data/test02_2.img’/>
< target dev=‘vda’ bus=‘virtio’/>
< address type=‘pci’ domain=‘0x0000’ bus=‘0x00’ slot=‘0x06’
function=‘0x0’/>
< /disk>
//找到这一部分内容,在下面增加以下内容
< disk type=‘file’ device=‘disk’>
< driver name=‘qemu’ type=‘raw’/>
< source file=’/kvm_data/test02_3.raw’/>
< target dev=‘vdb’ bus=‘virtio’/>
< address type=‘pci’ domain=‘0x0000’ bus=‘0x00’ slot=‘0x09’
function=‘0x0’/>
< /disk>
………………
主要修改source file名称为/kvm_data/test02_3.raw,target dev改为vdb,slot改为0x09,不与0x06冲突即可。
关闭test02虚拟机,重新启动,然后进入该虚拟机,使用fdisk -l查看磁盘,命令如下:
[root@kvm ~]# virsh destroy test02
Domain test02 destroyed
[root@kvm ~]# virsh start test02
Domain test02 started
[root@kvm ~]# virsh console test02
[root@localhost ~]# fdisk -l
Disk /dev/vda: 12.9 GB, 12884901888 bytes, 25165824 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x0005b865
Device Boot Start End Blocks Id System
/dev/vda1 * 2048 1026047 512000 83 Linux
/dev/vda2 1026048 20971519 9972736 8e Linux LVM
/dev/vda3 20971520 25165823 2097152 83 Linux
Disk /dev/vdb: 5368 MB, 5368709120 bytes, 10485760 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/mapper/centos-root: 9093 MB, 9093251072 bytes, 17760256 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/mapper/centos-swap: 1073 MB, 1073741824 bytes, 2097152 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
可以看到多了一块5 GB的磁盘,退出终端。
接下来,我们扩容qcow2格式的磁盘,命令如下:
[root@kvm ~]# qemu-img resize /kvm_data/test.img +2G
//若提示qemu-img: Can’t resize an image which has snapshots,需要删除快照
查看test.img信息,命令如下:
[root@kvm ~]# qemu-img info /kvm_data/test.img
image: /kvm_data/test.img
file format: qcow2
virtual size: 12G (12884901888 bytes)
disk size: 1.1G
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: true
关闭test虚拟机,重新启动,然后再次进入虚拟机test02,使用fdisk -l查看磁盘,命令如下:
[root@kvm ~]# virsh destroy test
Domain test destroyed
[root@kvm ~]# virsh start test
Domain test started
[root@kvm ~]# virsh console test
[root@localhost ~]# fdisk -l
Disk /dev/vda: 12.9 GB, 12884901888 bytes, 25165824 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x0005b865
Device Boot Start End Blocks Id System
/dev/vda1 * 2048 1026047 512000 83 Linux
/dev/vda2 1026048 20971519 9972736 8e Linux LVM
Disk /dev/mapper/centos-root: 9093 MB, 9093251072 bytes, 17760256 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/mapper/centos-swap: 1073 MB, 1073741824 bytes, 2097152 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
分区新增加的2 GB磁盘,命令如下:
[root@localhost ~]# fdisk /dev/vda
/保存并退出终端
新增一块qcow2格式的磁盘,命令如下:
[root@kvm ~]# qemu-img create -f qcow2 /kvm_data/test_2.img 5G
使用virsh edit编辑test虚拟机,将新磁盘增加到test虚拟机,命令如下:
[root@kvm ~]# virsh edit test
关闭test虚拟机,重新启动,然后进入该虚拟机,使用fdisk -l查看磁盘,命令如下:
[root@kvm ~]# virsh destroy test
Domain test destroyed
[root@kvm ~]# virsh start test
Domain test started
[root@kvm ~]# virsh console test
[root@localhost ~]# fdisk -l
Disk /dev/vda: 12.9 GB, 12884901888 bytes, 25165824 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x0005b865
Device Boot Start End Blocks Id System
/dev/vda1 * 2048 1026047 512000 83 Linux
/dev/vda2 1026048 20971519 9972736 8e Linux LVM
/dev/vda3 20971520 25165823 2097152 83 Linux
Disk /dev/vdb: 5368 MB, 5368709120 bytes, 10485760 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/mapper/centos-root: 9093 MB, 9093251072 bytes, 17760256 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/mapper/centos-swap: 1073 MB, 1073741824 bytes, 2097152 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
退出终端
调整CPU内存、网卡
查看虚拟机配置信息,命令如下:
[root@kvm ~]# virsh dominfo test
编辑虚拟机内存,命令如下:
[root@kvm ~]# virsh edit test
…………
< memory unit=‘KiB’>1048576< /memory>
//最大内存
< currentMemory unit=‘KiB’>524288< /currentMemory>
//可用内存
< vcpu placement=‘static’ current=‘1’>2< /vcpu>
//最大cpu
………………
//将以上内容修改为如下内容
…………
< memory unit=‘KiB’>1048576< /memory>
< currentMemory unit=‘KiB’>624288< /currentMemory>
< vcpu placement=‘static’ current=‘1’>2< /vcpu>
…………
关闭虚拟机,重启动虚拟机,命令如下:
[root@kvm ~]# virsh destroy test
[root@kvm ~]# virsh start test
查看虚拟机配置信息,看是否修改成功,命令如下:
[root@kvm ~]# virsh dominfo test
Id: 10
Name: test
UUID: 49d7cb9c-20dc-42dd-a260-01532b5132e5
OS Type: hvm
State: running
CPU(s): 1
CPU time: 21.4s
Max memory: 1048576 KiB
Used memory: 624288 KiB
Persistent: yes
Autostart: disable
Managed save: no
Security model: none
Security DOI: 0
除了这种修改方式之外,还有一种动态修改,命令如下:
[root@kvm ~]# virsh setmem test 800m
//动态修改内存
[root@kvm ~]# virsh setvcpus test 2
//动态修改cpu,只可以增加不可以减少
查看配置信息,看是否修改成功,命令如下:
[root@kvm ~]# virsh dominfo test
[root@kvm ~]# virsh dumpxml test > /etc/libvirt/qemu/test.xml
//需要把配置写入到配置文件里
查看网卡列表,命令如下:
[root@kvm ~]# virsh domiflist test
增加一块新的网卡,并设置为NAT网络模式(virbr0类似VMware的VMnet8),这里如果写–source br0,则网络模式为桥接,命令如下:
[root@kvm ~]# virsh attach-interface test --type bridge --source virbr0
[root@kvm ~]# virsh domiflist test
把配置文件做备份。
[root@kvm ~]# virsh dumpxml test > /etc/libvirt/qemu/test.xml
进入test虚拟机,查看网卡信息,命令如下:
[root@kvm ~]# virsh console test
[root@localhost ~]# ifconfig
迁移虚拟机
首先关闭虚拟机,命令如下:
[root@kvm ~]# virsh shutdown test
Domain test is being shutdown
查看虚拟机磁盘所在目录,命令如下:
[root@kvm ~]# virsh domblklist test
[root@kvm ~]# virsh dumpxml test > /etc/libvirt/qemu/test03.xml
//如果是远程机器,需要把该配置文件拷贝到远程机器上
[root@kvm ~]# rsync -av /kvm_data/test.img /kvm_data/test03.img
//-bash: rsync: command not found则yum install -y rsync
//如果是迁移到远程,则需要把该磁盘文件拷贝到远程机器上
因为是迁移到本机,配置文件用的是test子机的配置,不改会有冲突,所以需要修改该文件。如果是远程机器不用修改,命令如下:
[root@kvm ~]# vi /etc/libvirt/qemu/test03.xml
< name>test03< /name>
//修改domname:
//修改uuid(随便改一下数字,位数不要变)
< disk type=‘file’ device=‘disk’>
< driver name=‘qemu’ type=‘qcow2’/>
< source file=’/kvm_data/test03.img’/>
< target dev=‘vda’ bus=‘virtio’/>
< address type=‘pci’ domain=‘0x0000’ bus=‘0x00’ slot=‘0x06’ function=‘0x0’/>
< /disk>
//修改磁盘路径
定义新虚拟机,命令如下:
[root@kvm ~]# virsh define /etc/libvirt/qemu/test03.xml
Domain test03 defined from /etc/libvirt/qemu/test03.xml
查看虚拟机列表,会发现新迁移的虚拟机test03,命令如下:
[root@kvm ~]# virsh list --all