Linux逻辑卷扩容

CentOS7

安装lvm2工具

1
yum instaill lvm2

查看卷组

1
2
3
[root@localhost /]# vgs
VG #PV #LV #SN Attr VSize VFree
centos 1 2 0 wz--n- <19.00g 0

可以看到本说明中的卷组为centos

为卷组扩容(在此场景下我们新增了一个磁盘sdb

先使用fdisk -l 列出系统上所有的硬盘分区信息的命令,它会显示系统中所有块设备的分区表,包括硬盘和其他块设备(如 USB 驱动器)。

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
[root@localhost /]# fdisk -l

磁盘 /dev/sda:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000c4351

设备 Boot Start End Blocks Id System
/dev/sda1 * 2048 2099199 1048576 83 Linux
/dev/sda2 2099200 41943039 19921920 8e Linux LVM

磁盘 /dev/sdb:5368 MB, 5368709120 字节,10485760 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x2f896e2b

设备 Boot Start End Blocks Id System

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


磁盘 /dev/mapper/centos-swap:2147 MB, 2147483648 字节,4194304 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节

使用fdisk对sdb进行分区

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
[root@localhost /]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。

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


命令(输入 m 获取帮助):n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p):
Using default response p
分区号 (1-4,默认 1):
起始 扇区 (2048-10485759,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-10485759,默认为 10485759):+5000M
分区 1 已设置为 Linux 类型,大小设为 4.9 GiB

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

磁盘 /dev/sdb:5368 MB, 5368709120 字节,10485760 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x2f896e2b

设备 Boot Start End Blocks Id System
/dev/sdb1 2048 10242047 5120000 83 Linux

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

Calling ioctl() to re-read partition table.
正在同步磁盘。
[root@localhost /]#

执行 fdisk /dev/sdb 命令将启动 fdisk 工具,并允许你对 /dev/sdb 这个磁盘进行分区和管理。这是一个交互式命令行工具,你可以使用一系列的命令来执行不同的操作,如创建分区、删除分区、查看分区表等。

注意:在执行此命令之前,请确保你了解对磁盘进行分区和管理可能会导致数据丢失的风险,并且你已经备份了重要的数据。

以下是一些常见的 fdisk 命令:

  • p: 显示分区表
  • n: 创建一个新分区
  • d: 删除一个分区
  • w: 将更改写入磁盘
  • q: 退出 fdisk 工具

在执行 fdisk /dev/sdb 后,你将进入 fdisk 的交互式界面,可以使用上述命令进行分区管理。例如,你可以按 n 创建新分区,然后按 w 将更改写入磁盘。

将创建的分区加入逻辑卷组

1
2
[root@localhost /]# vgextend centos /dev/sdb1
Volume group "centos" successfully extended

查看逻辑卷组大小

1
2
3
[root@localhost /]# vgs
VG #PV #LV #SN Attr VSize VFree
centos 2 2 0 wz--n- <23.88g <4.88g

可以看到逻辑卷组的大小从原来的19.00g变成了现在的23.88g

将逻辑卷组的空间分配给指定逻辑卷

首先我们要知道卷组中有哪些逻辑卷,使用lvdisplay

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
[root@localhost /]# lvdisplay 
--- Logical volume ---
LV Path /dev/centos/swap
LV Name swap
VG Name centos
LV UUID 0jd8Pi-CIL6-uxlF-xl2W-Z6d7-fSrr-jxBQsK
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2023-12-11 14:05:51 +0800
LV Status available
# open 2
LV Size 2.00 GiB
Current LE 512
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:1

--- Logical volume ---
LV Path /dev/centos/root
LV Name root
VG Name centos
LV UUID s25gBD-v06v-shHf-0s5M-yTBd-oaQ4-FnbwRE
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2023-12-11 14:05:51 +0800
LV Status available
# open 1
LV Size <17.00 GiB
Current LE 4351
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:0

然后使用df -h来查看磁盘空间使用情况

1
2
3
4
5
6
7
8
9
10
11
[root@localhost /]# df -h
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 470M 0 470M 0% /dev
tmpfs 487M 0 487M 0% /dev/shm
tmpfs 487M 8.7M 478M 2% /run
tmpfs 487M 0 487M 0% /sys/fs/cgroup
/dev/mapper/centos-root 17G 6.3G 11G 38% /
/dev/sda1 1014M 172M 843M 17% /boot
tmpfs 98M 24K 98M 1% /run/user/1000
/dev/sr0 9.5G 9.5G 0 100% /run/media/faixin/CentOS 7 x86_64
tmpfs 98M 0 98M 0% /run/user/0

可以看到目前centos卷组中共有两个逻辑卷swap和root,其中/dev/mapper/centos-root 是一个逻辑卷的路径,其中包含了操作系统的根文件系统。这个逻辑卷位于 centos 卷组中,通常是通过 LVM(逻辑卷管理器)进行管理的。

解释该路径的一些关键部分:

  • /dev/mapper: 这是Linux系统中存储设备映射的路径。
  • centos: 这是卷组的名称,可能是通过LVM创建的。
  • root: 这是逻辑卷的名称,代表包含操作系统根文件系统的逻辑卷。

这个路径指向一个逻辑卷,而逻辑卷则是一个由LVM管理的虚拟卷。逻辑卷允许对物理存储进行更灵活的管理,包括动态调整大小、快照、移动数据等。

如果你想查看有关这个逻辑卷的详细信息,可以使用 lvdisplay 命令,如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@localhost /]# lvdisplay /dev/mapper/centos-root
--- Logical volume ---
LV Path /dev/centos/root
LV Name root
VG Name centos
LV UUID s25gBD-v06v-shHf-0s5M-yTBd-oaQ4-FnbwRE
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2023-12-11 14:05:51 +0800
LV Status available
# open 1
LV Size <17.00 GiB
Current LE 4351
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:0

此命令将显示关于逻辑卷的详细信息,包括大小、使用情况、分配等。

综上可知这个操作系统的跟目录挂载到了逻辑卷/dev/mapper/centos-root上并且这个逻辑卷共有17G目前剩余10G可用

接下来我们将加入逻辑卷组的磁盘分区sdb1的空间分配给逻辑卷/dev/mapper/centos-root

1
2
3
[root@localhost /]# lvextend -l +100%FREE /dev/centos/root
Size of logical volume centos/root changed from <17.00 GiB (4351 extents) to <21.88 GiB (5600 extents).
Logical volume centos/root successfully resized.

之后使用blkid命令查看文件系统的类型

1
2
3
4
5
6
7
[root@localhost /]# blkid
/dev/sr0: UUID="2020-11-02-15-15-23-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTTYPE="dos"
/dev/sda1: UUID="6f9d2cc3-50dc-4570-8d44-b939abd48acc" TYPE="xfs"
/dev/sda2: UUID="0KR3Ey-pgBu-VxW2-G4JA-c9dW-htm4-2YFtst" TYPE="LVM2_member"
/dev/sdb1: UUID="ndi9nM-IcBR-I1RI-mp8I-uJHo-Z8gO-iwtdPI" TYPE="LVM2_member"
/dev/mapper/centos-root: UUID="a4931a43-95d1-4680-8084-7e43c87bf60c" TYPE="xfs"
/dev/mapper/centos-swap: UUID="d467b836-1add-4ab5-a2f1-974828c2712e" TYPE="swap"

可以看到root逻辑卷的文件系统类型是xfs,那么相应的我们使用xfs_growfs命令进行扩容

1
2
3
4
5
6
7
8
9
10
11
12
[root@localhost /]# xfs_growfs /dev/mapper/centos-root 
meta-data=/dev/mapper/centos-root isize=512 agcount=4, agsize=1113856 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=4455424, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 4455424 to 5734400

这个命令会将文件系统扩展到逻辑卷所占用的全部空间,执行完 xfs_growfs 后,XFS 文件系统将使用新的逻辑卷大小,而不会丢失数据。

再次使用df -h命令查看

1
2
3
4
5
6
7
8
9
10
11
[root@localhost /]# df -h
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 470M 0 470M 0% /dev
tmpfs 487M 0 487M 0% /dev/shm
tmpfs 487M 8.7M 478M 2% /run
tmpfs 487M 0 487M 0% /sys/fs/cgroup
/dev/mapper/centos-root 22G 6.3G 16G 29% /
/dev/sda1 1014M 172M 843M 17% /boot
tmpfs 98M 24K 98M 1% /run/user/1000
/dev/sr0 9.5G 9.5G 0 100% /run/media/faixin/CentOS 7 x86_64
tmpfs 98M 0 98M 0% /run/user/0

可以看到root卷的容量从原来的17G扩大到了22G

补充:

vgs常用操作

vgs(Volume Group Status)是 LVM(Logical Volume Manager)工具的一部分,用于显示有关卷组(Volume Group)的信息。以下是一些常用的 vgs 命令操作:

  1. 显示所有卷组的信息:

    1
    vgs

    这将显示系统上所有卷组的摘要信息,包括名称、卷组大小、已使用空间等。

  2. 显示指定卷组的详细信息:

    1
    vgs <卷组名称>

    替换 <卷组名称> 为你要查看的具体卷组的名称。这将显示有关该卷组的详细信息。

  3. 以详细格式显示所有卷组的信息:

    1
    vgs -v

    这将以更详细的格式显示所有卷组的信息,包括卷组中的逻辑卷(Logical Volumes)的详细信息。

  4. 显示卷组空间使用情况:

    1
    vgs --units B

    这将以字节为单位显示卷组的空间使用情况。你可以根据需要使用不同的单位,例如 K(千字节)、M(兆字节)、G(千兆字节)等。

  5. 只显示指定字段的信息:

    1
    vgs -o vg_name,vg_size,vg_free

    这将仅显示指定字段的信息,例如卷组名称、卷组大小和可用空间。

  6. 显示未使用的物理卷:

    1
    vgs --ignorelockingfailure -o pv_name,vg_name

    这将显示卷组中未使用的物理卷的信息。

vgextend常用操作

vgextend 是 LVM(Logical Volume Manager)工具的一部分,用于向卷组(Volume Group)中添加物理卷(Physical Volume)。以下是一些常用的 vgextend 命令操作:

  1. 向卷组添加一个物理卷:

    1
    vgextend <卷组名称> /dev/<物理卷设备>

    替换 <卷组名称> 为你要扩展的卷组的名称,/dev/<物理卷设备> 为你要添加的物理卷的设备路径。这将把指定的物理卷添加到卷组中。

  2. 向卷组添加多个物理卷:

    1
    vgextend <卷组名称> /dev/<物理卷设备1> /dev/<物理卷设备2> ...

    你可以在一次命令中指定多个物理卷设备路径,以将它们添加到卷组中。

  3. 示例:

    1
    vgextend centos /dev/sdb1

    这个命令将名为 centos 的卷组扩展,添加了 /dev/sdb1 这个物理卷。

  4. 显示扩展后的卷组信息:

    1
    vgs <卷组名称>

    替换 <卷组名称> 为你扩展的卷组的名称,以显示卷组的详细信息,包括扩展后的大小。

  5. 在扩展后重新分配逻辑卷的空间:

    1
    lvextend -l +100%FREE /dev/<卷组名称>/<逻辑卷名称>

    替换 <卷组名称><逻辑卷名称> 为你的卷组和逻辑卷的名称。这将重新分配逻辑卷的空间,使其占用卷组中的所有可用空间。

    或使用-L指定逻辑卷需要的空间

1
lvextend -L +10G /dev/<卷组名称>/<逻辑卷名称>
  • -L +10G: 表示要将逻辑卷的大小增加 10GB。+ 表示在原有大小的基础上增加。

  • /dev/<卷组名称>/<逻辑卷名称>: 这是指定要扩展的逻辑卷的路径,包括卷组名称和逻辑卷名称。

/dev/centos/root实际上是一个指向/dev/mapper/centos-root的链接