Linux磁盘LVM在线扩容

Posted m490545607

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux磁盘LVM在线扩容相关的知识,希望对你有一定的参考价值。

 LVM逻辑卷管理

LVM是Linux系统用于对硬盘分区进行管理的一种机制,理论性较强,其创建初衷是为了解决硬盘设备在创建分区后不易修改分区大小的缺陷。尽管对传统的硬盘分区进行强制扩容或缩容从理论上来讲是可行的,但是却可能造成数据的丢失。而LVM技术是在硬盘分区和文件系统之间添加了一个逻辑层,它提供了一个抽象的卷组,可以把多块硬盘进行卷组合并。这样一来,用户不必关心物理硬盘设备的底层架构和布局,就可以实现对硬盘分区的动态调整。

LVM常用的命令

在虚拟机添加一块磁盘

通过lsblk 查看到添加的磁盘

对新添加的磁盘进行分区

使用fdisk /dev/sdb

输入p 查看分区;(新加的硬盘是没有分区的,如果有数据的情况,输入d删除)

输入n 创建新分区;

输入p 创建主分区

输入1 新建xvdc的第一个主分区,(或者回车即可)

回车(默认从开始分)

输入最大的柱面数,也就是磁盘的最大数;或者回车(默认最大的)

选择格式 t

列出格式 l

输入格式 8e

查看 p

输入w 保存退出

将建立好的分区创建物理卷

pvcreate /dev/sdb1 # 将/dev/sdb1创建为PV

查看创建的物理卷

Pvdisplay

将物理卷加入到根分区所在的卷

vgdisplay # 获取VG Name名称

将当前创建的物理卷加入到根分区所在的卷

vgextend centos /dev/sdb1

将卷组剩余空间添加到逻辑卷 /dev/centos/root 下

lvdisplay # 获取 LV Path

lvextend -l +100%FREE /dev/centos/root # 将/dev/centos/root逻辑卷进行扩容,整个磁盘加到根下

lvextend -l +10G /dev/centos/root # 或根据实际情况添加具体容量

使扩容生效

使用xfs_growfs命令在线调整xfs格式文件系统大小

xfs_growfs /dev/centos/root # Centos7.X 使用

resize2fs /dev/centos/root # Centos6.X 使用

查看是否扩容成功

df -Th

lsblk

云主机磁盘存储动态扩容(LVM)方案

一、场景

云主机使用的越来越多,现在几乎没有不使用云主机的,经常会碰到需要升级硬盘存储的操作,直接添加磁盘,或动态在原有的分区上扩容,所使用的方案大致有如下:
1、基于lvm格式 在线动态扩容
2、非lvm格式扩容
接下来我们就结合生产常用两种扩容方案及实践

二、LVM在线动态扩容

1、lvm原理概述

这里引用鸟哥说明
LVM 的重点在於『可以弹性的调整 filesystem 的容量!』而并非在於效能与数据保全上面。 需要文件的读写效能或者是数据的可靠性,请参考前面的 RAID 小节。 LVM 可以整合多个实体 partition 在一起, 让这些 partitions 看起来就像是一个磁碟一样!而且,还可以在未来新增或移除其他的实体 partition 到这个 LVM 管理的磁碟当中。 如此一来,整个磁碟空间的使用上,实在是相当的具有弹性啊! 既然 LVM 这么好用,那就让我们来试试

什么是 LVM: PV, PE, VG, LV 的意义
LVM 的全名是 Logical Volume Manager,中文可以翻译作逻辑卷轴管理员。之所以称为『卷轴』可能是因为可以将 filesystem 像卷轴一样伸长或缩短之故吧!LVM 的作法是将几个实体的 partitions (或 disk) 透过软件组合成为一块看起来是独立的大磁碟 (VG) ,然后将这块大磁碟再经过分割成为可使用分割槽 (LV), 最终就能够挂载使用了。但是为什么这样的系统可以进行 filesystem 的扩充或缩小呢?其实与一个称为 PE 的项目有关! 底下我们就得要针对这几个项目来好好聊聊!
Physical Volume, PV, 实体卷轴

我们实际的 partition 需要调整系统识别码 (system ID) 成为 8e (LVM 的识别码),然后再经过 pvcreate 的命令将他转成 LVM 最底层的实体卷轴 (PV) ,之后才能够将这些 PV 加以利用! 调整 system ID 的方是就是透过 fdisk 啦!
Volume Group, VG, 卷轴群组

所谓的 LVM 大磁碟就是将许多 PV 整合成这个 VG 的东西就是啦!所以 VG 就是 LVM 组合起来的大磁碟!这么想就好了。 那么这个大磁碟最大可以到多少容量呢?这与底下要说明的 PE 有关喔~因为每个 VG 最多仅能包含 65534 个 PE 而已。 如果使用 LVM 默认的参数,则一个 VG 最大可达 256GB 的容量啊!(参考底下的 PE 说明)
Physical Extend, PE, 实体延伸区块
LVM 默认使用 4MB 的 PE 区块,而 LVM 的 VG 最多仅能含有 65534 个 PE ,因此默认的 LVM VG 会有 4M*65534/(1024M/G)=256G。 这个 PE 很有趣喔!他是整个 LVM 最小的储存区块,也就是说,其实我们的文件数据都是藉由写入 PE 来处理的。 简单的说,这个 PE 就有点像文件系统里面的 block 大小啦。 这样说应该就比较好理解了吧?所以调整 PE 会影响到 VG 的最大容量喔!

Logical Volume, LV, 逻辑卷轴

最终的 VG 还会被切成 LV,这个 LV 就是最后可以被格式化使用的类似分割槽的咚咚了!那么 LV 是否可以随意指定大小呢? 当然不可以!既然 PE 是整个 LVM 的最小储存单位,那么 LV 的大小就与在此 LV 内的 PE 总数有关。 为了方便使用者利用 LVM 来管理其系统,因此 LV 的装置档名通常指定为『 /dev/vgname/lvname 』的样式!

以下是lvm原理图:
技术图片

说了这么多的原理,貌似还是有点蒙,接下来搞点实践~

2、实践

公司办公室有一套vmwa私有云群,给开发,测试提供虚拟机做环境,经常会有磁盘空间不足,接下来就给一台机器系统磁盘/分区 30G扩容到50G
首先在vmware集群中编辑-->将磁盘扩容到50G 如图:

技术图片
接下来到虚拟机上操作步骤如下:
步骤:
1)、格式化新添加的磁盘空间(也可以是单独一块新磁盘)
2)、添加修改分区为8e格式
3)、刷新分区
4)、创建pv ( pvcreate)
5)、扩展VG
6)、lv扩容

实际操作如下:
fdisk -l /dev/sdb
n
p
2
t
8e
w

不重启显示新分区信息
partx -a /dev/sdb2

创建新pv
pvcreate /dev/sdb2
扩展现有VG Name
vgextend vg_daemon6 /dev/sdb2
lv扩容:
#lvextend -L +20G /dev/vg_daemon6/LogVol00 # 注意 /dev/vg_daemon6/LogVol00 是通过df -TH 查询得到 的文件系统路径
Size of logical volume vg_daemon6/LogVol00 changed from 32.20 GiB (14321 extents) to 50.80 GiB (25649 extents).
Logical volume LogVol00 successfully resized.

刷新分区信息:
ext4:
#resize2fs /dev/mapper/vg_daemon6-LogVol00
xfs:
xfs_growfs /dev/mapper/centos-root

以上是基于lvm扩容,有时间服务器并没有基于lvm分区,如何是好?

3、扩容方法二

前提也是针对现有分区进行扩容
第一步也是在vmware集群或云平台上给物理机添加磁盘再通过工具在线扩容,可能需要重启

安装工具:
yum install -y cloud-utils
扩容前检测分区,以下是xfs格式化的避ext4使用e2fsck 工具
xfs_repair -f /dev/sda
growpart /dev/sda 1
xfs_growfs /dev/sda1
更多参考请点这里请添加链接描述

结束语:

在扩容前,最好是备份好重要资料,以防不测

以上是关于Linux磁盘LVM在线扩容的主要内容,如果未能解决你的问题,请参考以下文章

Linux下调整磁盘大小后的基于LVM的磁盘扩容

python运维实战--LVM创建和在线扩容

云主机磁盘存储动态扩容(LVM)方案

LVM 在线扩容磁盘(ubuntu 14.04 server)

用同一个磁盘,服务器lvm在线磁盘扩容

关于linux中的磁盘扩容和LVM的疑问