kvm系列之四:热添加技术

kvm虚拟机可以在线添加cpu、磁盘、内存、网卡等资源,也可以在线迁移虚拟机,这边博文记录这些技术的实现方法。有两点需要注意:

  • 这里主要操作是在web01虚拟机中进行,为了方便,我将它的网卡改成了桥接模式
  • 根分区的扩容时需要关机的

热添加磁盘

为虚拟机添加一块磁盘的流程:

  • 宿主机创建磁盘
  • 宿主机将磁盘附加给虚拟机
  • 虚拟机中格式化磁盘
  • 虚拟机中挂载并使用磁盘

操作过程记录如下:

虚拟机磁盘初始状态

[[email protected] ~]# fdisk -l

Disk /dev/vda: 10.7 GB, 10737418240 bytes, 20971520 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: 0x000b2376

   Device Boot      Start         End      Blocks   Id  System
/dev/vda1   *        2048    20971519    10484736   83  Linux
[[email protected] ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        10G  1.1G  9.0G  11% /
devtmpfs        486M     0  486M   0% /dev
tmpfs           496M     0  496M   0% /dev/shm
tmpfs           496M  6.7M  490M   2% /run
tmpfs           496M     0  496M   0% /sys/fs/cgroup
tmpfs           100M     0  100M   0% /run/user/0

宿主机操作

##创建磁盘
[[email protected] opt]# qemu-img create -f qcow2 web01-add1.qcow2 5G
Formatting ‘web01-add1.qcow2‘, fmt=qcow2 size=5368709120 encryption=off cluster_size=65536 lazy_refcounts=off 

##将磁盘附加给web01
[[email protected] opt]# virsh attach-disk web01 /opt/web01-add1.qcow2 vdb --subdriver qcow2
Disk attached successfully

web01上操作

###查看磁盘情况,发现已经添加了一块5g的磁盘
[[email protected] ~]# fdisk -l

Disk /dev/vda: 10.7 GB, 10737418240 bytes, 20971520 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: 0x000b2376

   Device Boot      Start         End      Blocks   Id  System
/dev/vda1   *        2048    20971519    10484736   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

###格式化新磁盘
[[email protected] ~]# mkfs.xfs /dev/vdb 

###挂载新磁盘
[[email protected] ~]# mkdir /add1
[[email protected] ~]# mount /dev/vdb /add1/

###测试新磁盘可用性
[[email protected] ~]# cp /etc/hostname /add1/
[[email protected] ~]# cat /add1/hostname
web01

热添加磁盘容量(在线扩容)

紧接着上一节,在web01中操作,以扩容新增加的磁盘vdb为例,流程如下:

  • web01中卸载磁盘
  • 宿主机中把目标磁盘从web01中剥离
  • 宿主机中更改磁盘容量
  • 重新将磁盘附加给web01
  • web01中重新挂载磁盘
  • 刷新磁盘容量
  • 测试磁盘可用性

操作记录如下:

web01中umount磁盘

[[email protected] ~]# df -h |grep add1
/dev/vdb        5.0G   33M  5.0G   1% /add1
[[email protected] ~]# umount /add1/

[[email protected] ~]# umount /add1/
umount: /add1/: not mounted

宿主机中操作

其中,剥离和重新附加操作,可以在web01中用fdisk -l命令验证效果,这里就不贴上来了。

###将磁盘从web01中剥离
[[email protected] opt]# virsh detach-disk web01 /opt/web01-add1.qcow2
Disk detached successfully

###更改磁盘大小
[[email protected] opt]# qemu-img resize /opt/web01-add1.qcow2 +5G
Image resized.

###重新将磁盘附加到web01
[[email protected] opt]# virsh attach-disk web01 /opt/web01-add1.qcow2 vdb --subdriver qcow2
Disk attached successfully

web01中重新挂载

[[email protected] ~]# mount /dev/vdb /add1/
[[email protected] ~]# df -h|grep add1
/dev/vdb        5.0G   33M  5.0G   1% /add1

###将挂载写入配置文件,使永久生效
[[email protected] ~]# echo "mount /dev/vdb /add1/">>/etc/profile

刷新磁盘容量

由上面df -h返回结果可知,挂载分区依然显示5G,但用fdisk -l查看时,实际上vdb磁盘的大小为10G。这是因为在格式化磁盘的时候,容量已经写到磁盘中了。

当然,我们可以重新格式化磁盘来解决这个问题,但这样做会丢失磁盘数据。正确的操作如下:

###刷新磁盘容量
[[email protected] ~]# xfs_growfs /add1/
###验证
[[email protected] ~]# df -h|grep add1
/dev/vdb         10G   33M   10G   1% /add1

磁盘添加及扩容永久生效

以上的配置的硬盘扩展,在重启虚拟机后就会丢失,想要永久生效,使下面命令:

[[email protected] opt]# virsh attach-disk web01 /opt/web01-add1.qcow2 vdb --subdriver qcow2 --config
Disk attached successfully

这个命令中--config参数的作用,是把扩容相关的配置写入配置文件,可以查看web01的配置文件,发现以下内容被添加进来了

    <disk type=‘file‘ device=‘disk‘>
      <driver name=‘qemu‘ type=‘qcow2‘/>
      <source file=‘/opt/web01-add1.qcow2‘/>
      <target dev=‘vdb‘ bus=‘virtio‘/>
      <address type=‘pci‘ domain=‘0x0000‘ bus=‘0x00‘ slot=‘0x09‘ function=‘0x0‘/>
    </disk>

扩容根分区

扩容根分区需要在关闭虚拟机的时候进行,流程如下:

  • 查找根分区对应的磁盘文件(web01中df -h查看/分区对应的分区,然后宿主机中通过查看web01配置文件得到这个分区对应的磁盘文件)
  • 关闭web01
  • 扩展目标磁盘文件
  • 开启web01
  • web01中修改磁盘分区表
  • 重启web01
  • 刷新分区容量
  • 验证

操作记录如下(其中第一步确认磁盘文件就不贴上来了):

宿主机中扩展磁盘

[[email protected] opt]# virsh destroy web01
###更改磁盘容量,注意:resize方法不支持包含快照的磁盘文件,这里我是将快照文件删除后重新执行的
[[email protected] opt]# qemu-img resize /opt/centos.qcow2 +10G
[[email protected] opt]# virsh start web01

web01中修改分区表

这是使用fdisk -l查看,vdb的真实容量是20G,但df -h查看挂载分区显示10G,使用命令xfs_grows /也无法刷新到正确的容量。这是因为根分区的容量是写在分区表中的,这是我们需要重新设置分区表,操作如下:

###直接n一路回车,然后w保存即可,有兴趣的话可以p查看初始和修改完毕后的分区信息

[[email protected] ~]# fdisk /dev/vda
#进入交互界面后操作如下
p #显示当前分区信息
d #删除分区
n #创建分区,一路回车
w #保存退出

# 重启后操作

重启web01,刷新分区容量

重启web01后,df -h查看,根分区还是10G,这时再使用xfs_growfs /就可以刷新到正确的容量了。

[[email protected] ~]# xfs_growfs /
[[email protected] ~]# df -h|grep -w /
/dev/vda1        20G  1.1G   19G   6% /

热添加网卡

热添加网卡的操作很简单,只需要在宿主机中执行一条命令即可,需要理解的是一个参数--model的作用。先看看添加网卡的操作,然后结合效果进行说明

[[email protected] opt]# virsh attach-interface web01 --type bridge --source br0
[[email protected] opt]# virsh attach-interface web01 --type bridge --source br0 --model virtio

上面两条命令往web01中以不同模式分别添加了一块网卡,到web01中查看信息如下:

[[email protected] ~]# ip add show ens10
3: ens10: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 52:54:00:c9:ce:4d brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.143/24 brd 10.0.0.255 scope global noprefixroute dynamic ens10
       valid_lft 1649sec preferred_lft 1649sec
    inet6 fe80::a17:42ec:19e:e9de/64 scope link noprefixroute
       valid_lft forever preferred_lft forever
[[email protected] ~]# ip add show eth1
4: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 52:54:00:56:bb:59 brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.144/24 brd 10.0.0.255 scope global noprefixroute dynamic eth1
       valid_lft 1704sec preferred_lft 1704sec
    inet6 fe80::42e1:3c04:c56:69f5/64 scope link noprefixroute
       valid_lft forever preferred_lft forever

从上面可以看出,使用 --model virtio参数后,新添加的网卡会以eth前缀命名,这是表象,内在的,virtio是优化过的虚拟机网卡驱动,性能比默认的好。

添加网卡永久生效

和扩展分区一样,可以用--config参数使网卡扩展永久生效

[[email protected] opt]# virsh attach-interface web01 --type bridge --source br0 --model virtio --config
[[email protected] opt]# virsh attach-interface web01 --type bridge --source br0 --config

查看配置文件,对比web01中ip add显示的网卡信息,会发现mac地址不一样,重启web01后,配置文件中的mac地址就应用到网卡了。

热添加内存

使web01支持热添加内存

有两种方法:一、重新构建虚拟机,用参数指定最大内存;二、直接修改虚拟机最大内存特性。

这里使用第二种,操作如下:

[[email protected] opt]# virsh setmaxmem web01 3G --config
##修改后重启
[[email protected] opt]# virsh reboot web01 

修改内存

[[email protected] opt]# virsh setmem web01 2G --live

到web01中验证

[[email protected] ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:           1983         117        1748           8         117        1714
Swap:             0           0           0

热添加cpu

使web01支持热添加cpu

和内存扩容一样,也有两种方法,我使用的是用命令修改,操作如下

原文地址:https://www.cnblogs.com/Go-Spurs-Go/p/10361914.html

时间: 2024-10-29 00:17:49

kvm系列之四:热添加技术的相关文章

KVM系列之虚拟克隆技术

背景 一般情况下,虚拟机承载主机上不止跑一台虚拟机,那么问题来了,如何快速批量部署?难道每台都从头根据系统提示一步一步进行安装?我真会疯掉的,那有没有什么好点的办法解决?办法肯定是有的,可以通过克隆技术制作相同的虚拟机,实现虚拟机快速部署.下面我就简单介绍两种实现方式. 实现方式: 通过"virt-clone"命令,实现虚拟机克隆. 通过复制磁盘.配置文件,实现虚拟机克隆. 虚拟机承载主机系统: CentOS 7.2.1511 X86_64 命令实现 前提条件 虚拟机的磁盘格式类型为q

Office 365系列之四:添加自定义域

在实际的公司企业环境中,为了简化Office 365登陆地址.Exchange邮箱地址和Lync地址等就需要将自定义域添加到Office 365中,并在Office 365中管理该域. 1.  前提条件 最多可以将 900 个域添加到您的 Office 365 订阅中.但是,无法将域添加到您已在另一个 Microsoft 云服务中使用的 Office 365 中.这意味着,您无法将同一个域添加到多个 Office 365 订阅中. 必须已经在DNS 主机提供商注册域名,域名提供商是挺多,但个人建

KVM libvirt的CPU热添加

1.CentOS7.3: 需求:说明:默认有两个cpu,由于压力较大的情况下,需要在线添加一个1个cpu 添加cpu前,查看cpu信息 [[email protected] ~]# cat /proc/cpuinfo  processor: 0 vendor_id: GenuineIntel cpu family: 6 model: 58 model name: Intel(R) Core(TM) i5-3210M CPU @ 2.50GHz stepping: 9 microcode: 0x1

kvm系列之二:kvm日常管理

日常管理概述 接着上一篇,这篇博客主要描述kvm日常管理中使用的一些方法和命令. kvm的管理主要有以下几个方面: kvm状态和配置管理:包括kvm虚拟机的开启.关闭.挂起.恢复,配置文件的导出导入和编辑,还有虚拟机重命名等 磁盘管理:包括虚拟机磁盘的创建.信息查看.格式转换.容量更改以及格式化.挂载使用 kvm的console连接 kvm开机自启动 kvm快照和克隆 另外,网络模式更改和热添加技术在下一篇描述 kvm状态管理 开启.关闭和查看 状态查看 [[email protected] o

「视频直播技术详解」系列之四:推流和传输

关于直播的技术文章不少,成体系的不多.我们将用七篇文章,更系统化地介绍当下大热的视频直播各环节的关键技术,帮助视频直播创业者们更全面.深入地了解视频直播技术,更好地技术选型. 在上一期中,我们介绍了讲解编码和封装. 本篇是<解密视频直播技术>系列之四:推流和传输.推流是直播的第一公里,直播的推流对这个直播链路影响非常大,如果推流的网络不稳定,无论我们如何做优化,观众的体验都会很糟糕.所以也是我们排查问题的第一步,如何系统地解决这类问题需要我们对相关理论有基础的认识. 本系列文章大纲如下: (一

kvm热添加磁盘,并为根目录扩容,重启依然生效

接上篇,<<热添加磁盘,重启文件不丢失>> 一.理论扫盲:centos7的磁盘默认使用lvm,所以是可以直接扩展根分区的,但是无法缩小,在物理机中会默认将磁盘分为两个分区,分别为sda1和sda2,其中分区sda1作为系统盘/boot挂载,少量空间:sda2作为一个物理卷并且完全作为逻辑卷组VG(Volume Group)centos,在这个逻辑卷组centos中建立三个逻辑卷LV(Logical Volume)root和home还有swap,分别挂载到根目录/和/home以及sw

Sql Server来龙去脉系列之四 数据库和文件

在讨论数据库之前我们先要明白一个问题:什么是数据库? 数据库是若干对象的集合,这些对象用来控制和维护数据.一个经典的数据库实例仅仅包含少量的数据库,但用户一般也不会在一个实例上创建太多的数据库.一个数据库实例最多能创建32767个数据库,但是按照实际情况,一般设计是不会达到这个限制值. 为了更明显地说明数据库,数据库包含了以下属性和功能: *. 它是很多对象的集合,比如表.视图.存储过程.约束.对象集合的最大值是2(31) - 1(超过2百亿).一般对象的数量在几百至一万. *. 它维持拥有的用

5.9 热修复技术

热修复是在应用的App包发布到市场之后,出现了Bug,无需替换包来进行在线更新的一种技术,对用户是无感知的.目前广义上有两种方案可以实现代码的替换,一种是类的替换,基于Classloader:另一种是方法的替换,而这两种方式各有优缺点. 方法的替换:只能替换方法的内容,所以不能够对要patch的类进行方法的新增和删除:但同时,方法的替换可以在应用不重启的情况下实现.它包小.快速.功能单一.比较轻量,这种方案是热修复. 类的替换:可以修改类结构,功能更加的强大:但是必须要重启一次才会有效,因为已经

TCP/IP网络编程系列之四(初级)

TCP/IP网络编程系列之四-基于TCP的服务端/客户端 理解TCP和UDP 根据数据传输方式的不同,基于网络协议的套接字一般分为TCP和UDP套接字.因为TCP套接字是面向连接的,因此又称为基于流的套接字.在了解TCP之前,先了解一下TCP所属的TCP/IP协议栈. 如图所示,TCP/IP协议栈共分为4层,可以理解成数据收发分成了4个层次化过程. 链路层 它是物理链接领域标准化结果,也是最基本的领域,专门定义LAN.WAN.MAN等网络标准.若两台计算机通过网络进行数据交换,链路层就负责整个物