Dell PowerEdge 服务器使用LVM进行磁盘管理

本文记录我在Dell PowerEdge 服务器上插入新硬盘后的磁盘操作,通过LVM磁盘管理将新硬盘扩充到现有的RHEL 9分区。用完后发现DellPowerEdge 服务器的磁盘管理确实和平常的Linux单机不同,得需要注意。

问题

我的Dell PowerEdge 服务器里陆续插入了四块1TB磁盘,其中最早的两块组成了RAID 1作为1个虚拟磁盘用来安装了RHEL 9系统,后来陆续又插入了另外两块1TB的磁盘,各自组成RAID0作为另外2个虚拟磁盘,所以对于RHEL 9系统来说,它应该显示为有3个磁盘并且大致为3TB空间才对。直到昨天发现/home马上被用光了,才发觉好像磁盘空间不对,简单查看磁盘后发现只有大约1.8TB,比预期的少了1TB,怎么回事?

1
2
3
4
5
6
7
8
9
df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs 63G 100K 63G 1% /dev/shm
tmpfs 26G 150M 25G 1% /run
/dev/mapper/rhel-root 1001G 764G 238G 77% /
/dev/sdb1 960M 258M 703M 27% /boot
/dev/mapper/rhel-home 856G 745G 112G 88% /home
tmpfs 13G 0 13G 0% /run/user/1000

先查看下磁盘是不是被识别到,

1
2
3
4
5
6
7
8
9
10
11
12
sudo lsblk

NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 931G 0 disk
sdb 8:16 0 931G 0 disk
├─sdb1 8:17 0 1G 0 part /boot
└─sdb2 8:18 0 930G 0 part
├─rhel-root 253:0 0 1001G 0 lvm /
├─rhel-swap 253:1 0 4G 0 lvm [SWAP]
└─rhel-home 253:2 0 856G 0 lvm /home
sdc 8:32 0 931G 0 disk
└─rhel-root 253:0 0 1001G 0 lvm /

确实显示了3个磁盘,但是sda好像没有被加入到lvm中,孤零零的?纳尼?难道自己忘了把它加入LVM里?sdb和sdc都已经被加入了LVM,sdb用来放了系统,应该就是最早插入的那个RAID1的两块磁盘组成的,我记得我把1T的SSD用来扩充了/根分区, 所以sdc是SSD么?记不准了, sda 没有放入lvm吗?

涉及到磁盘操作,还是小心点好,想法确认一下哪个是sda,结果发现这个服务器非常坑。
为什么坑人呢?因为你根本没法完全确认哪个磁盘,下面的命令列车了磁盘信息,可以看到这里磁盘详细信息全是Disk model: PERC H710! 表明正在看到的是 RAID 控制器(PERC H710)而不是单个硬盘的信息。通常情况下,RAID 控制器将多个物理硬盘组合成一个或多个逻辑卷,以提供数据冗余和/或性能优化。

要查看连接到 RAID 控制器的物理硬盘的详细信息,需要使用专门的 RAID 管理工具,如 Dell OpenManage Server Administrator(OMSA)或者 MegaCLI。这些工具提供了更详细的关于 RAID 控制器、物理硬盘和逻辑卷的信息。我懒得继续了。

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
sudo fdisk -l
[sudo] password for chuantao:
Disk /dev/sdb: 931 GiB, 999653638144 bytes, 1952448512 sectors
Disk model: PERC H710
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/sdc: 931 GiB, 999653638144 bytes, 1952448512 sectors
Disk model: PERC H710
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/sda: 931 GiB, 999653638144 bytes, 1952448512 sectors
Disk model: PERC H710
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xd19075fa

Device Boot Start End Sectors Size Id Type
/dev/sda1 * 2048 2099199 2097152 1G 83 Linux
/dev/sda2 2099200 1952448511 1950349312 930G 8e Linux LVM

服务器不是支持硬盘热插拔么?拔出来再运行下命令看看就行了吧,拔出来后确实少了1个,但是呢,插入后,lsblk却怎么也识别不了了。进iDRAC 7看看磁盘,能识别到,但是原来的3个virtual disk显示成2个了,少了1个?新买的磁盘里的状态不是online了,而是foreign了。于是只好查找,clear foreign了,然后需要重启电脑。实在不想重启,因为每次重启都要5~10分钟(没掐表,只是觉得很慢),而且一启动瞬间风扇全部全速运转,就像坐在起飞的飞机发动机旁,特别吵,好在它只是持续那么一小会,然后就降下来了。鼓捣一顿后重启电脑,再次检查,发现磁盘序号变了:

1
2
3
4
5
6
7
8
9
10
11
sudo lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 931G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 930G 0 part
├─rhel-root 253:0 0 1001G 0 lvm /
├─rhel-swap 253:1 0 4G 0 lvm [SWAP]
└─rhel-home 253:2 0 856G 0 lvm /home
sdb 8:16 0 931G 0 disk
sdc 8:32 0 931G 0 disk
└─rhel-root 253:0 0 1001G 0 lvm /

这次变成sdb没有加入lvm了,序号变倒是在Linux里遇到过,看来这次sdb就是最后买的那个新硬盘了,想了想应该是我前几天只是把它插入卡槽里上电了,但忘了把它加入操作系统中,所以系统没有识别出它的空间,再次确认一下:

查看物理卷(Physical Volumes)列表:

1
sudo pvdisplay

这将显示系统中存在的所有支持LVM的物理卷。确认是否有 sdb 。下面的结果里没有显示sdb,说明sdb上没有创建PV,确实它没有被加入LVM。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
sudo pvdisplay
--- Physical volume ---
PV Name /dev/sda2
VG Name rhel
PV Size <930.00 GiB / not usable 3.00 MiB
Allocatable yes (but full)
PE Size 4.00 MiB
Total PE 238079
Free PE 0
Allocated PE 238079
PV UUID lqoK1l-sizS-klfJ-fSQN-boJI-ZmkI-RMIL9A

--- Physical volume ---
PV Name /dev/sdc
VG Name rhel
PV Size 931.00 GiB / not usable 4.00 MiB
Allocatable yes (but full)
PE Size 4.00 MiB
Total PE 238335
Free PE 0
Allocated PE 238335
PV UUID l1Ycap-dnCG-HPAj-qEGG-Jxha-VQuH-C5pHsH

虽然确认了,但是还要继续查看其他信息, vgdisplay 显示当前有1个vloume group,名字叫rhel,只有不到2T空间

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[chuantao@localhost ~]$ sudo vgdisplay
--- Volume group ---
VG Name rhel
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 6
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 3
Open LV 3
Max PV 0
Cur PV 2
Act PV 2
VG Size <1.82 TiB
PE Size 4.00 MiB
Total PE 476414
Alloc PE / Size 476414 / <1.82 TiB
Free PE / Size 0 / 0
VG UUID ikuAXw-3s2n-nvGY-U4mf-dNwq-IH0s-cWoHXx

接着看看这个VG上面创建了几个LV 逻辑分区,发现一共3个,分别是swap,home和root,这个path很重要,后续扩充操作会用到

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
sudo lvdisplay
--- Logical volume ---
LV Path /dev/rhel/swap
LV Name swap
VG Name rhel
LV UUID HVJvQk-MiLB-JtjG-IPDB-2AJS-XS2T-gFdtUG
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2024-03-02 08:18:28 -0700
LV Status available
# open 2
LV Size 4.00 GiB
Current LE 1024
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:1

--- Logical volume ---
LV Path /dev/rhel/home
LV Name home
VG Name rhel
LV UUID cDlRSX-rKwu-Vyu0-3vEM-p4SW-AZE1-QJvQcT
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2024-03-02 08:18:29 -0700
LV Status available
# open 1
LV Size <856.00 GiB
Current LE 219135
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:2

--- Logical volume ---
LV Path /dev/rhel/root
LV Name root
VG Name rhel
LV UUID 7fNUL4-q2Zz-I237-CR02-tQqS-VhUn-jPCu4y
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2024-03-02 08:18:31 -0700
LV Status available
# open 1
LV Size <1001.00 GiB
Current LE 256255
Segments 2
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:0

所以,基本可以确定,sdb是全新裸盘,没有被加入lvm了。

我的目标是把sdb这个1TB硬盘全部扩充到/home路径下,因为照片和视频太多了。所以做法如下:

  1. 创建新的物理卷:首先,需要将 sdb 创建为新的物理卷(physical volume)

    1
    2
    sudo pvcreate /dev/sdb
    Physical volume "/dev/sdb" successfully created.
  2. 将新的物理卷添加到现有的卷组VG:上面显示现在的卷组名称是 rhel,您使用以下命令将新的物理卷添加到该卷组中。

1
2
sudo vgextend rhel /dev/sdb
Volume group "rhel" successfully extended
  1. 将新的物理卷空间PV分配给现有的逻辑卷或创建新的逻辑卷:由于我想将其扩展到 /home 目录,而/home对应的逻辑卷名称是 /dev/rhel/home(lvdisplay命令显示的结果),因此使用以下命令将新的物理卷空间分配给该逻辑卷。结果表明确实空间增加了。

    1
    2
    3
    4
    sudo lvextend -l +100%FREE /dev/rhel/home
    Size of logical volume rhel/home changed from <856.00 GiB (219135 extents) to <1.75 TiB (457470 extents).
    Logical volume rhel/home successfully resized.

  2. 调整文件系统大小:扩展逻辑卷后,需要调整文件系统大小以使其占用新的空间。我的文件系统是 XFS,可以使用以下命令:

    1
    2
    3
    4
    5
    sudo xfs_growfs /dev/rhel/home
    meta-data=/dev/mapper/rhel-home isize=512 agcount=4, agsize=56098560 blks
    = sectsz=512 attr=2, projid32bit=1
    ...
    data blocks changed from 224394240 to 468449280
1
2
3
4
5
6
7
8
9
df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs 63G 100K 63G 1% /dev/shm
tmpfs 26G 85M 25G 1% /run
/dev/mapper/rhel-root 1001G 764G 238G 77% /
/dev/sda1 960M 258M 703M 27% /boot
/dev/mapper/rhel-home 1.8T 751G 1.1T 43% /home
tmpfs 13G 0 13G 0% /run/user/1000

到此为止,已经将 sdb 的空间扩展到了系统的 /home 目录。

附录,放一个LVM架构图:
LVM架构图

简述从下到上的关系

  • 可以在整个个物理磁盘(/dev/sd?)或者一个磁盘的某个分区上创建1个PV 物理卷。我这里就是用了整个磁盘。
  • 再把PV放进VG 卷组里去,1个VG可以包含很多PV。VG就是可以使用的总空间,就好比创建了1个新的虚拟磁盘
  • 在VG上再创建几个逻辑卷‘分区’操作,就类似于在上面那个虚拟磁盘上进行分区,分成/home, /, swap

总结

  • 服务器上的硬盘还是不要热插拔了,不知道会出什么幺蛾子,这次就是要重启系统才能把那个foreign状态给去掉,然后重新被系统识别出来。
  • RAID 1的倒是试过热插拔,它是双备份,我拔出1块后发现系统确实可以运行,但是再插回去后,系统显示rebuild RAID。

Dell PowerEdge 服务器使用LVM进行磁盘管理
https://pub.zangchuantao.com/20240401/Dell-Server-Disk-Management.html
作者
Chuantao
发布于
2024年4月1日
许可协议