Linux如何在线对逻辑分区扩容
1.前言
目前绝大部分IaaS平台基本都会选择类似Vmware Vsphere+SAN存算分离的架构,或者选择类似Nutanix、Vmware Vsan或者深信服等存算一体的超融合架构。
不管何种方式,都会遇到已挂载目录磁盘空间不足的情况,部分分区空间使用不够情况。
希望在不影响现有业务的情况下,动态将某个挂载点目录扩容。
如果这些分区在装系统的时候使用了lvm(前提是这些分区要是lvm逻辑卷分区),那么就可以轻松进行扩容或缩容。
1.1 环境介绍
条目 | 内容 |
---|---|
操作系统 | Red Hat Enterprise Linux Server release 7.8 (Maipo) |
CPU | 4C |
内存 | 16G |
硬盘1(原有硬盘) | 120G |
硬盘2(拟添加的硬盘) | 500G ,希望挂载在/root下,将原有/root进行动态扩容 |
2.几个常用命令介绍
2.1 fdisk命令
fdisk一般用来磁盘分区,也可以用来查看磁盘分区情况。
/dev/sda1和/dev/sda2是两个主分区,其中前者是启动分区。
注意/dev/sda2是LVM文件系统,这个是后续动态扩容的关键点。
后续两个就是逻辑卷分别是:
Disk /dev/mapper/rhel-root: 119.2 GB
Disk /dev/mapper/rhel-swap: 8455 MB
[root@test1 ~]# fdisk -l
Disk /dev/sda: 128.8 GB, 128849018880 bytes, 251658240 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: 0x000bcae5
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 2099199 1048576 83 Linux
/dev/sda2 2099200 251412479 124656640 8e Linux LVM
Disk /dev/mapper/rhel-root: 119.2 GB, 119185342464 bytes, 232783872 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/rhel-swap: 8455 MB, 8455716864 bytes, 16515072 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.2 lsblk命令
lsblk命令用于列出所有可用块设备的信息,而且还能显示他们之间的依赖关系,这个命令很好用,因为可以让电脑上的磁盘和分区信息很清晰。
[root@test1 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 120G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 118.9G 0 part
├─rhel-root 253:0 0 111G 0 lvm /
└─rhel-swap 253:1 0 7.9G 0 lvm [SWAP]
sr0 11:0 1 1024M 0 rom
这里同样看出系统已有一块硬盘sda,具备两个分区,分别是sda1和sda2。
其中sda2分区有两个逻辑卷,分别就是上述对应的rhel-root和rhel-swap。
注意:这里rhel-root和rhel-swap,两者都被“-”分割开。
rhel是vg,是卷组(Volume Group, VG)
后者root和swap是逻辑卷(Logical Volume, LV)。
正是在逻辑卷上做文件系统。也正是逻辑卷创建之后,其大小可以伸缩。
2.3 df命令
linux中df命令的功能是用来检查linux服务器的文件系统的磁盘空间占用情况。可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息。显示指定磁盘文件的可用空间。
df这个命令读取的数据计划都是针对整个文件系统的,主要在super block内信息,因此读取速度非常快速。
[root@test1 ~]# df -Th
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 3.9G 0 3.9G 0% /dev
tmpfs tmpfs 3.9G 0 3.9G 0% /dev/shm
tmpfs tmpfs 3.9G 8.9M 3.9G 1% /run
tmpfs tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
/dev/mapper/rhel-root xfs 111G 98G 13G 89% /
/dev/sda1 xfs 1014M 137M 878M 14% /boot
tmpfs tmpfs 799M 0 799M 0% /run/user/0
注:
1、tmpfs,临时文件系统,是一种基于内存的文件系统。和ramdisk不同,后者是个块设备,前者是个文件系统。
2、df下是不显示swap分区的。所以这里只显示/dev/mapper/rhel-root。
可以看出来rhel-root是xfs文件系统
在RHEL7系统中比较大的变化之一就是在文件系统方面使用XFS替换了Ext4,XFS作为最新RHEL7中默认的文件管理系统,它的日志型文件管理系统的优势在意外宕机后尤其明显,可以快速的恢复可能被破坏的文件,另外经过优化后日志功能对硬盘性能影响非常小,同时最大支持18EB的存储容量满足了几乎所有需求。
3.正式扩容
热添加一块硬盘
在虚拟机管理平台上,热添加一块硬盘。
【验证】
[root@test1 ~]# fdisk -l
Disk /dev/sda: 128.8 GB, 128849018880 bytes, 251658240 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: 0x000bcae5
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 2099199 1048576 83 Linux
/dev/sda2 2099200 251412479 124656640 8e Linux LVM
Disk /dev/mapper/rhel-root: 119.2 GB, 119185342464 bytes, 232783872 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/rhel-swap: 8455 MB, 8455716864 bytes, 16515072 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/sdb: 536.9 GB, 536870912000 bytes, 1048576000 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
从最后可以看出/dev/sdb为536.9 GB容量,这里是没有任何分区的。
查看当前pv、vg以及lv的情况。
[root@test1 ~]# pvdisplay
--- Physical volume ---
PV Name /dev/sda2
VG Name rhel
PV Size 118.88 GiB / not usable 3.00 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 30433
Free PE 1
Allocated PE 30432
PV UUID 6c2uwi-e0el-9kdl-UexC-5Qut-LbCv-eNfrQ0
[root@test1 ~]# vgdisplay
--- Volume group ---
VG Name rhel
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 3
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 2
Max PV 0
Cur PV 1
Act PV 1
VG Size <118.88 GiB
PE Size 4.00 MiB
Total PE 30433
Alloc PE / Size 30432 / <118.88 GiB
Free PE / Size 1 / 4.00 MiB
VG UUID UeFmSr-CGD1-JNp1-XwtC-40xI-SVF6-CezPm6
[root@test1 ~]# lvdisplay
--- Logical volume ---
LV Path /dev/rhel/swap
LV Name swap
VG Name rhel
LV UUID 4k1EM3-EYGL-0BKL-oei6-UNBW-BOBC-259HY4
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2020-09-20 15:25:16 +0800
LV Status available
# open 2
LV Size <7.88 GiB
Current LE 2016
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:1
--- Logical volume ---
LV Path /dev/rhel/root
LV Name root
VG Name rhel
LV UUID wEU6li-W6fr-7TfV-3OJ2-5o0i-mbez-rptO1M
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2020-09-20 15:25:16 +0800
LV Status available
# open 1
LV Size 111.00 GiB
Current LE 28416
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:0
关于pv、vg以及lv的关系详见下图:
# 创建一个新的pv
[root@test1 ~]# pvcreate /dev/sdb
WARNING: dos signature detected on /dev/sdb at offset 510. Wipe it? [y/n]: y
Wiping dos signature on /dev/sdb.
Physical volume "/dev/sdb" successfully created.
# 验证
[root@test1 ~]# pvscan
PV /dev/sda2 VG rhel lvm2 [<118.88 GiB / 4.00 MiB free]
PV /dev/sdb lvm2 [500.00 GiB]
Total: 2 [<618.88 GiB] / in use: 1 [<118.88 GiB] / in no VG: 1 [500.00 GiB]
注意要选择dev/sdb这个新加的硬盘
扩展vg
[root@test1 ~]# vgextend rhel /dev/sdb
Volume group "rhel" successfully extended
[root@test1 ~]# pvscan
PV /dev/sda2 VG rhel lvm2 [<118.88 GiB / 4.00 MiB free]
PV /dev/sdb VG rhel lvm2 [<500.00 GiB / <500.00 GiB free]
Total: 2 [<618.88 GiB] / in use: 2 [<618.88 GiB] / in no VG: 0 [0 ]
扩展lv
# 扩展前
[root@test1 ~]# lvscan
ACTIVE '/dev/rhel/swap' [<7.88 GiB] inherit
ACTIVE '/dev/rhel/root' [111.00 GiB] inherit
# 扩展500G
[root@test1 ~]# lvextend -L +500G /dev/rhel/root
Size of logical volume rhel/root changed from 111.00 GiB (28416 extents) to 611.00 GiB (156416 extents).
Logical volume rhel/root successfully resized.
# 验证
[root@test1 ~]# lvscan
ACTIVE '/dev/rhel/swap' [<7.88 GiB] inherit
ACTIVE '/dev/rhel/root' [611.00 GiB] inherit
这时候通过lsblk查看,/root已经扩展到611G空间
[root@test1 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 120G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 118.9G 0 part
├─rhel-root 253:0 0 611G 0 lvm /
└─rhel-swap 253:1 0 7.9G 0 lvm [SWAP]
sdb 8:16 0 500G 0 disk
└─rhel-root 253:0 0 611G 0 lvm /
sr0 11:0 1 1024M 0 rom
但是通过df命令发现实际并没有正式扩容
[root@test1 ~]# df -Th
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 3.9G 0 3.9G 0% /dev
tmpfs tmpfs 3.9G 0 3.9G 0% /dev/shm
tmpfs tmpfs 3.9G 8.9M 3.9G 1% /run
tmpfs tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
/dev/mapper/rhel-root xfs 111G 99G 13G 89% /
/dev/sda1 xfs 1014M 137M 878M 14% /boot
tmpfs tmpfs 799M 0 799M 0% /run/user/0
这里需要用xfs_growfs对逻辑分区做最后调整
[root@test1 ~]# xfs_growfs /dev/rhel/root
meta-data=/dev/mapper/rhel-root isize=512 agcount=4, agsize=7274496 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=29097984, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=14208, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 29097984 to 160169984
# 验证,可以看到这里已经是611G空间大小了。
[root@test1 ~]# df -Th
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 3.9G 0 3.9G 0% /dev
tmpfs tmpfs 3.9G 0 3.9G 0% /dev/shm
tmpfs tmpfs 3.9G 8.9M 3.9G 1% /run
tmpfs tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
/dev/mapper/rhel-root xfs 611G 99G 513G 17% /
/dev/sda1 xfs 1014M 137M 878M 14% /boot
tmpfs tmpfs 799M 0 799M 0% /run/user/0
需要注意的是,针对部分老系统,还是用ext3或者ext4的,最后一步逻辑分区调整大小的命令有所区别。
1、针对的是ext2、ext3、ext4文件系统,使用resize2fs 命令。增大和缩小都支持
2、针对的是xfs文件系统,使用的事xfs_growfs 命令,但是只支持增大。
至此,针对使用lvm文件分区前提下的在线扩容使用完毕,对现有业务和应用是没有影响的。
生产环境下不建议,所需要的空间不应该由缩容其他分区得到,而是直接利用IaaS平台的虚拟化手段热添加硬盘。
by 2020年10月11日 张诚