前一段时间组里的一些机器硬盘满了,需要进行扩容。这些机器的盘一共是 4 个 1.8T 的固态,接在一张 LSI9361-8i RAID 卡上,组成一个 RAID5 使用。机器上可用的盘位还有 4 个,我们决定给这个阵列扩充两个同样大小的盘。

整个扩容分成三个步骤。首先是去机房把新的硬盘插入机器,确认系统可以看到盘之后就可以走人了。

阵列的扩容

接下来是对阵列的扩容,它可以使用 MegaCli 来完成1。这一步对用户是透明的,不会影响正在使用对应设备的程序。首先需要通过 MegaCli64 -LDInfo -Lall -aALL 查看待扩容阵列的 ID 和 RAID 卡 ID,这两个 ID 分别对应前面的参数 -L-a。例如我们的机器只有一个阵列和一张 RAID 卡,得到的是如下输出,对应的就是 -L0 -a0

Adapter 0 -- Virtual Drive Information:
Virtual Drive: 0 (Target Id: 0)
Name                :
RAID Level          : Primary-5, Secondary-0, RAID Level Qualifier-3
Size                : 8.729 TB
Sector Size         : 512
Is VD emulated      : Yes
Parity Size         : 1.745 TB
State               : Optimal
Strip Size          : 256 KB
Number Of Drives    : 6
Span Depth          : 1
Default Cache Policy: WriteThrough, ReadAhead, Direct, No Write Cache if Bad BBU
Current Cache Policy: WriteThrough, ReadAhead, Direct, No Write Cache if Bad BBU
Default Access Policy: Read/Write
Current Access Policy: Read/Write
Disk Cache Policy   : Disk's Default
Encryption Type     : None
Bad Blocks Exist: No
PI type: No PI

Is VD Cached: No

接下来通过 MegaCli64 -PDList -aALL 确认新插入硬盘的 Enclosure Device IDSlot Number,如果我们两个盘的对应的值分别是 252, 5 以及 252, 6 那么可以通过如下命令扩容(注意同时增加多个硬盘需要一条命令写全,否则相当于两次重建):

MegaCli64 -LDRecon -Start -r5 -Add -PhysDrv[252:5,252:6] -L0 -a0

扩容过程中可以通过 MegaCli64 -LDRecon -ShowProg -L0 -a0 来查看扩容进度。

文件系统扩容

如果原先的阵列对应的 /dev/sda,那么接下来确认没有程序占用它后,需要使用 echo 1 > /sys/class/block/sda/device/rescan 来让系统认出扩容后阵列的正确大小。然后修改分区表,并且用相关命令扩容文件系统1。例如 ext4 则可以直接 resize2fs,然后应该还需要用 tune2fs 修改一下 strip-width

参考资料