虚拟机直接增加磁盘容量后,服务器内并不能直接使用增加的空间,这个方案是通过修改分区表的方式实现扩容,更安全的方式建议参考这篇文章

查看磁盘情况

检查分区

重要!建议将查询结果保存到其他地方,万一连接异常中断或者别的什么情况,至少有记录分区起始点,后面可以手动重建分区进行恢复。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
[root@node192 ~]# fdisk -l

磁盘 /dev/vda:1979.1 GB, 1979120091136 字节,3865468928 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000b0f21

设备 Boot Start End Blocks Id System
/dev/vda1 2048 6143 2048 83 Linux
/dev/vda2 * 6144 1054719 524288 83 Linux
/dev/vda3 1054720 1048575999 523760640 8e Linux LVM
/dev/vda4 1048576000 3145727999 1048576000 8e Linux LVM

磁盘 /dev/mapper/sylink-root:83.9 GB, 83886080000 字节,163840000 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节


磁盘 /dev/mapper/sylink-data:1526.2 GB, 1526181396480 字节,2980823040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节

检查当前磁盘挂载情况

1
2
3
4
5
6
7
8
9
10
11
12
[root@node192 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 1024M 0 rom
fd0 2:0 1 4K 0 disk
vda 252:0 0 1.8T 0 disk
├─vda4 252:4 0 1000G 0 part
│ └─sylink-data 253:1 0 1.4T 0 lvm /data
├─vda2 252:2 0 512M 0 part /boot
├─vda3 252:3 0 499.5G 0 part
│ ├─sylink-data 253:1 0 1.4T 0 lvm /data
│ └─sylink-root 253:0 0 78.1G 0 lvm /
└─vda1 252:1 0 2M 0 part

检查lvm

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
[root@node192 ~]# vgdisplay
--- Volume group ---
VG Name sylink
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 9
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 2
Max PV 0
Cur PV 2
Act PV 2
VG Size 1.46 TiB
PE Size 4.00 MiB
Total PE 383870
Alloc PE / Size 383870 / 1.46 TiB
Free PE / Size 0 / 0
VG UUID uVSCDf-07vZ-0Wst-WAsk-chTp-Mhqm-sJTYUB

[root@node192 ~]# pvdisplay
--- Physical volume ---
PV Name /dev/vda3
VG Name sylink
PV Size <499.50 GiB / not usable 0
Allocatable yes (but full)
PE Size 4.00 MiB
Total PE 127871
Free PE 0
Allocated PE 127871
PV UUID VBrv8V-LCol-T5se-fcj1-c7KM-mreO-Zd10Kn

--- Physical volume ---
PV Name /dev/vda4
VG Name sylink
PV Size <1000.00 GiB / not usable 3.00 MiB
Allocatable yes (but full)
PE Size 4.00 MiB
Total PE 255999
Free PE 0
Allocated PE 255999
PV UUID aVk1c4-VHXT-7xAc-hZQV-YGbL-HL1S-eQ26k6

[root@node192 ~]# lvdisplay
--- Logical volume ---
LV Path /dev/sylink/data
LV Name data
VG Name sylink
LV UUID 7s4Qjw-KLNs-h8XZ-MXNt-Wd31-O4F1-dMl32R
LV Write Access read/write
LV Creation host, time localhost, 2022-04-21 10:20:28 +0800
LV Status available
# open 1
LV Size <1.39 TiB
Current LE 363870
Segments 3
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:1

--- Logical volume ---
LV Path /dev/sylink/root
LV Name root
VG Name sylink
LV UUID Ol8DGY-0CAp-LBAN-Iw0l-TkVU-Ftby-0Zc1eG
LV Write Access read/write
LV Creation host, time localhost, 2022-04-21 10:20:34 +0800
LV Status available
# open 1
LV Size 78.12 GiB
Current LE 20000
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:0

确定扩容思路

根据上面的检查结果,可以看到,服务器只有一块硬盘/dev/vda,有四个分区,其中vda3和vda4分别做了pv,然后加入到vg中,vg中创建了两个lv,我的目标是给/dev/sylink/data这块lv扩容。

我希望给vda4分区进行扩容,这个分区扩容后,让pv识别到新增的空间,vg就自然实现了扩容,然后再给lv扩容,就能实现目标。

扩容操作

分区扩容

这里操作有风险,思路是先删分区,再创建分区,修改分区的结束位置来实现扩容,删除后千万不要保存退出,删除创建一口气做完!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
[root@node192 ~]# fdisk /dev/vda
欢迎使用 fdisk (util-linux 2.23.2)。

更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。

# 再次打印分区信息,信息确认
命令(输入 m 获取帮助):p

磁盘 /dev/vda:1979.1 GB, 1979120091136 字节,3865468928 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000b0f21

设备 Boot Start End Blocks Id System
/dev/vda1 2048 6143 2048 83 Linux
/dev/vda2 * 6144 1054719 524288 83 Linux
/dev/vda3 1054720 1048575999 523760640 8e Linux LVM
/dev/vda4 1048576000 3145727999 1048576000 8e Linux LVM

# 删除分区4,注意删除后千万不要w保存!!
命令(输入 m 获取帮助):d
分区号 (1-4,默认 4):4
分区 4 已删除


命令(输入 m 获取帮助):p

磁盘 /dev/vda:1979.1 GB, 1979120091136 字节,3865468928 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000b0f21

设备 Boot Start End Blocks Id System
/dev/vda1 2048 6143 2048 83 Linux
/dev/vda2 * 6144 1054719 524288 83 Linux
/dev/vda3 1054720 1048575999 523760640 8e Linux LVM

# 重新创建分区4,这里重新创建后应该起始位置不变,结束位置变大
命令(输入 m 获取帮助):n
Partition type:
p primary (3 primary, 0 extended, 1 free)
e extended
Select (default e): p
已选择分区 4
起始 扇区 (1048576000-3865468927,默认为 1048576000):
将使用默认值 1048576000
Last 扇区, +扇区 or +size{K,M,G} (1048576000-3865468927,默认为 3865468927):
将使用默认值 3865468927
分区 4 已设置为 Linux 类型,大小设为 1.3 TiB

# 重新设置分区格式,由于我创建了lvm,所以设置为8e
命令(输入 m 获取帮助):t
分区号 (1-4,默认 4):4
Hex 代码(输入 L 列出所有代码):8e
已将分区“Linux”的类型更改为“Linux LVM”

# 保存退出
命令(输入 m 获取帮助):w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: 设备或资源忙.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
正在同步磁盘。

# 重新刷新硬盘
[root@node192 ~]# partprobe /dev/vda

pv重设大小

1
2
3
[root@node192 ~]# pvresize /dev/vda4
Physical volume "/dev/vda4" changed
1 physical volume(s) resized or updated / 0 physical volume(s) not resized

可以看到vg中已经有了可分配的空间

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[root@node192 ~]# vgdisplay
--- Volume group ---
VG Name sylink
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 10
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 2
Max PV 0
Cur PV 2
Act PV 2
VG Size <1.80 TiB
PE Size 4.00 MiB
Total PE 471729
Alloc PE / Size 383870 / 1.46 TiB
Free PE / Size 87859 / <343.20 GiB
VG UUID uVSCDf-07vZ-0Wst-WAsk-chTp-Mhqm-sJTYUB

扩容lv

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
[root@node192 ~]# lvdisplay
--- Logical volume ---
LV Path /dev/sylink/data
LV Name data
VG Name sylink
LV UUID 7s4Qjw-KLNs-h8XZ-MXNt-Wd31-O4F1-dMl32R
LV Write Access read/write
LV Creation host, time localhost, 2022-04-21 10:20:28 +0800
LV Status available
# open 1
LV Size <1.39 TiB
Current LE 363870
Segments 3
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:1

--- Logical volume ---
LV Path /dev/sylink/root
LV Name root
VG Name sylink
LV UUID Ol8DGY-0CAp-LBAN-Iw0l-TkVU-Ftby-0Zc1eG
LV Write Access read/write
LV Creation host, time localhost, 2022-04-21 10:20:34 +0800
LV Status available
# open 1
LV Size 78.12 GiB
Current LE 20000
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:0

[root@node192 ~]# lvextend -l +100%FREE /dev/sylink/data
Size of logical volume sylink/data changed from <1.39 TiB (363870 extents) to 1.72 TiB (451729 extents).
Logical volume sylink/data successfully resized.
[root@node192 ~]# xfs_growfs /dev/sylink/data
meta-data=/dev/mapper/sylink-data isize=512 agcount=15, agsize=26214400 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=372602880, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=51200, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 372602880 to 462570496