最近测试性能,在本地打数据时,发现磁盘空间不足,于是想手动给/挂载点添加空间。这里介绍通过LVM方式快速给磁盘扩容。
特别注意下:这个方案我测试在30T存储内是没有任何问题,但是在Ubuan上的90T空间,使用gdisk方案不可行。
LVM:是一种技术,方便管理磁盘。如果不用LVM,那么就不好在之前的磁盘基础上扩容,比如我一块硬盘20G被写满了之后,我想将这块硬盘扩容到40G,就无法操作。只能新开一个磁盘。对于MySQL这种数据保存在本地磁盘路径/var/mysql/data这种就无法正确扩容。
有人会说我直接新插一个更大的硬盘,然后把数据从旧磁盘复制到新磁盘上,显然这在数据量大的情况下是不合理的。会耗费大量的时间。
1 概念
PV:物理卷,同一磁盘可划分为多个物理卷。VG:卷组,一个到多个PV可组成一个卷组。
LV:逻辑卷,卷组可划分为多个逻辑卷。PE:Physical extent物理区域,硬盘可供指派给逻辑卷的最小单位(通常为 4MB)
挂载点:lv与挂载点是1:1的关系。
1.1 物理卷 Physical Volume (PV)
可以在上面建立卷组的媒介,可以是硬盘分区,也可以是硬盘本身或者回环文件(loopback file)。物理卷包括一个特殊的 header,其余部分被切割为一块块物理区域(physical extents)
1.2 卷组 Volume group (VG): 将一组物理卷收集为一个管理单元。
1.3 逻辑卷 Logical volume (LV): 虚拟分区,由物理区域(physical extents)组成。1.4 物理区域 Physical extent (PE): 硬盘可供指派给逻辑卷的最小单位(通常为 4MB)。
2 实战
我本地/目录下有50G空间,现在我想扩容到100G。
2.1 相关基础命令
2.2 开始给LVM扩容
- 查看fdisk:fdisk -l

可以看到我们当前磁盘的基础信息,以及挂载情况。
可以看到我/下可用容量只有50G,现在我需要给它扩容。 - 查看所有存储设备:fdisk -l |grep ‘/dev’


手动给虚拟机或者物理机新增一块磁盘,再执行相同命令:
- 给磁盘创建分区:fdisk /dev/vdb,这里我特别讲下,大盘的用gdisk命令,fdisk是属于小存储盘容量不大的情况。

我们查看是否分区成功fdisk -lgrep'dev/vd'
格式化磁盘:mkfs -t xfs /dev/vdb1
文件系统类型centos6文件系统是ext4,因为设计较早,对于现今动辄上T的海量数据处理,性能较低。 centos7文件系统是xfs,适用于海量数据。格式化分区mkfs -t xfs /dev/vdb1#一般用于centos7及以上# mkfs -t ext4 /dev/vdb1#一般用于centos6

创建pv:pvcreate /dev/vdb1
创建pv,方便将pv交给vg管理pvcreate /dev/vdb1#pvscan查看卷组,观察是否创建成功pvscangrep /dev/vdb1

扩容vg:vgextend centos /dev/vdb1
我现在要给/扩容,所以要知道/属于哪个vg管理,可以理解VG是扩容目标位置命令,lvdisplay命令是查看你扩容目标的组织。查看lvdisplay

7.所以我现在要给centos这个VG扩展容量,可以理解为我要对这个组织要做容量变更,把我新建的硬盘分区交给这个组织。将/dev/vdb1这个pv交给centos这个vg管理vgextend centos /dev/vdb1 #查看vg状态vgdisplay

8.扩容lv:lvextend -l +100%FREE /dev/centos/root也可以 lvextend -L +10G /dev/centos/root
后面的/dev/centos/root是被扩展目录,就是把我新建的要丢给他可以比例也可以固定容量,麒麟不能固定只有100%,如果忘记此时来一个df -h 命令查看下目录。df -h 查看目录命令

然后再 lvdisplay查看下需要被扩容目标的组织是哪个。
我们要给/目录扩容,所以需要知道/目录对应的LVPath是什么
下面就是给LV扩容:按固定大小追加(追加10G给/dev/centos/root这个LVPath)lvextend -L +10G /dev/centos/root
这个就是给固定的分区增加固定的容,但是某些系统好像不行,最好用百分比兼容更好。
按百分比追加lvextend -l +100%FREE /dev/centos/root

以百分比追加为例,我将vg中剩下的所有容量全部分配给/
修改完了之后再来一次lvdisplay,查看下你的分区是否扩容成功。
LV Size成功由50G扩容到了100G刷新分区:xfs_growfs /dev/centos/root
xfs格式的硬盘使用xfs_growfs# ext4用resize2fs命令df -T # 查看文件系统类型(一般centos6是ext4,centos7及以后是xfs)#resize2fs /dev/centos/root #适用于centos6xfs growfs /dev/centos/root#centos7及以后
df 命令参看硬盘信息-T选项, 查看文件系统类型centos6文件系统是ext4,因为设计较早,对于现今动辄上T的海量数据处理,性能较低。 centos7文件系统是xfs,适用于海量数据。

- 验证df -h
扩容前:
扩容后:
切记注意,注意: 不要卸载扩容的磁盘,可能出现丢失数据或是系统无法启动,你的盘已经融合到另一个盘的分区一起了,你卸载了,数据都熄火了。切记!!!
因为多个LV对外提供的是一个VG,如果你卸载了其中一个磁盘导致LV失效,部分数据就可能丢失。类比:ES中的Shard
2.3 总结
新增磁盘
fdisk给磁盘创建分区,fdisk /dev/vdb,大盘选择gdisk,创建分区选择n主分区,1分区,默认默认保存即可。
mkfs格式化磁盘,mkfs -t xfs /dev/vdb1,这个根据你实际的格式而定。
pvcreate创建pv,pvcreate /dev/vdb1
vgextend扩容vg,vgextend centos /dev/vdb1,给vg扩容(将/dev/vdb1交给centos这个vg管理)
lvextend扩容lv,lvextend -l +100%FREE /dev/centos/root(将vg剩余的容量全部分配给/dev/centos/root这个lv)也可以固定容量。
做完了要刷新分区,不然显示不出来。xfs_growfs刷新分区,# resize2fs /dev/centos/root # 适用于centos6
xfs_growfs /dev/centos/root # centos7及以后
df -h 查看挂载点大小变化,观察是否扩容成功
感谢感谢