如何调整LVM软件RAID1分区(收缩和增长)
版本1.0
作者:Falko Timme
本文介绍如何使用LVM收集和扩展现有的RAID1分区(如果不使用LVM,请阅读本指南): 如何调整RAID分区(收缩和增长)(软件RAID) )。 我已经使用ext3作为文件系统的逻辑卷测试了这个。 我将描述完整的RAID阵列以及降级的RAID阵列的这个过程。
我不会保证这将为您工作!
1初步说明
几天前,我发现我的一台服务器有一个降级的RAID1阵列( / dev / md1
,由/ dev / sda5
和/ dev / sdb5组成
; / dev / sda5
发生故障, / dev / sdb5
仍然活动):
server1:~# cat /proc/mdstat
Personalities : [raid1]
md1 : active raid1 sdb5[1]
4988032 blocks [2/1] [_U]
md0 : active raid1 sda1[0] sdb1[1]
248896 blocks [2/2] [UU]
unused devices: <none>
server1:~#
我试图修复它(使用本 ),但不幸的是在同步过程结束(完成99.9%),同步停止并重新开始。 正如我发现的,这是因为在(工作)分区/ dev / sdb5
的末尾有一些缺陷扇区 - 这在/var/log/kern.log中
:
Nov 22 18:51:06 server1 kernel: sdb: Current: sense key: Aborted Command
Nov 22 18:51:06 server1 kernel: end_request: I/O error, dev sdb, sector 1465142856
所以这是最糟糕的情况,可能会发生 - / dev / sda
死和/ dev / sdb
即将死亡。 为了解决这个问题,我想我可以缩小/ dev / md1
,以便在/ dev / sdb5
的结尾留下破碎的扇区,然后将新的/ dev / sda5
(从更换的硬盘驱动器)添加到/ dev / md1
,让同步完成,从阵列中删除/ dev / sdb5
,并用新的硬盘驱动器替换/ dev / sdb
,将新的/ dev / sdb5
添加到/ dev / md1
,然后再次增加/ dev / md1
。
这是以下过程的一个用例(我会描述一个完整的数组和一个退化的数组)的过程。
本教程中使用了两个小硬盘(5GB),这样我就不用再等待完成了。 当然,在实际系统上,您将拥有更大的硬盘。
请注意, / dev / md1
包含卷/ dev / server1
与逻辑卷/ dev / server1 / root
(系统分区,挂载点/
)和/ dev / server1 / swap_1
(交换)。
因为我必须调整我的系统分区( / dev / server1 / root
),所以我必须使用一个救援系统(例如Knoppix Live-CD )来调整数组的大小。 如果要调整大小的阵列不包含系统分区,则可能不需要启动到救援系统; 但是在这两种情况下,请确保逻辑卷已卸载!
2完整数组
我将介绍如何调整由/ dev / sda5
和/ dev / sdb5
组成的数组/ dev / md1
。 这是现在的情况:
cat /proc/mdstat
server1:~# cat /proc/mdstat
Personalities : [raid1]
md1 : active raid1 sda5[0] sdb5[1]
4988032 blocks [2/2] [UU]
md0 : active raid1 sda1[0] sdb1[1]
248896 blocks [2/2] [UU]
unused devices: <none>
server1:~#
df -h
server1:~# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/server1-root
4.5G 741M 3.5G 18% /
tmpfs 126M 0 126M 0% /lib/init/rw
udev 10M 68K 10M 1% /dev
tmpfs 126M 0 126M 0% /dev/shm
/dev/md0 236M 18M 206M 8% /boot
server1:~#
pvdisplay
server1:~# pvdisplay
--- Physical volume ---
PV Name /dev/md1
VG Name server1
PV Size 4.75 GB / not usable 0
Allocatable yes (but full)
PE Size (KByte) 4096
Total PE 1217
Free PE 0
Allocated PE 1217
PV UUID Ntrsmz-m0o1-WAPD-xhsb-YpH7-0okm-qfdBQG
server1:~#
vgdisplay
server1:~# vgdisplay
--- Volume group ---
VG Name server1
System ID
Format lvm2
Metadata Areas 1
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 1
Act PV 1
VG Size 4.75 GB
PE Size 4.00 MB
Total PE 1217
Alloc PE / Size 1217 / 4.75 GB
Free PE / Size 0 / 0
VG UUID X3ZYTy-39yq-20k7-GCGk-vKVU-Xe0i-REdEu0
server1:~#
lvdisplay
server1:~# lvdisplay
--- Logical volume ---
LV Name /dev/server1/root
VG Name server1
LV UUID 3ZgGnd-Sq1s-Rchu-92b9-DpAX-mk24-0aOMm2
LV Write Access read/write
LV Status available
# open 1
LV Size 4.50 GB
Current LE 1151
Segments 1
Allocation inherit
Read ahead sectors 0
Block device 253:0
--- Logical volume ---
LV Name /dev/server1/swap_1
VG Name server1
LV UUID KM6Yq8-jQaQ-rkP8-6f4t-zrXA-Jk13-yFrWi2
LV Write Access read/write
LV Status available
# open 2
LV Size 264.00 MB
Current LE 66
Segments 1
Allocation inherit
Read ahead sectors 0
Block device 253:1
server1:~#
2.1收缩一个完整的数组
启动您的救援系统并激活所有需要的模块:
modprobe md
modprobe linear
modprobe multipath
modprobe raid0
modprobe raid1
modprobe raid5
modprobe raid6
modprobe raid10
然后激活您的RAID阵列...
cp /etc/mdadm/mdadm.conf /etc/mdadm/mdadm.conf_orig
mdadm --examine --scan >> /etc/mdadm/mdadm.conf
mdadm -A --scan
...然后启动LVM:
/etc/init.d/lvm start
跑
e2fsck -f /dev/server1/root
检查文件系统。
/ dev / md1
的大小为5GB; 我想缩小到4GB。 首先,我们必须使用resize2fs
缩小逻辑卷/ dev / server1 / root
上的文件系统; 文件系统在逻辑卷/ dev / server1 / root内
,因此文件系统应该是<=逻辑卷(因此我使文件系统2GB)。 逻辑卷(LV - 我们有两个, / dev / server1 / root
和/ dev / server1 / swap_1
)再次在物理卷(PV) / dev / md1内
(因此LV / dev / server1 / root
+ LV / dev / server1 / swap_1
<= PV;我使LV / dev / server1 / root
2.5GB并删除/ dev / server1 / swap_1
,见下一段),这是我们想要收缩的RAID阵列/ dev / md1
所以PV <= / dev / md1
;我将PV缩小到3GB)。
因为/ dev / server1 / swap_1
在我们的硬盘驱动器的最后,我们可以删除它,缩小PV,然后再次创建/ dev / server1 / swap_1
,以确保/ dev / server1 / root
符合我们的PV。 如果您的情况下,交换LV不在硬盘驱动器的末尾,则无需删除它 - 您必须确保将驱动器上的最后一个LV缩小到足以使其适合PV。
所以我收缩/ dev / server1 / root
的文件系统到2GB(确保你使用足够大的值,以便所有的文件和目录适合它!):
resize2fs /dev/server1/root 2G
...和/ dev / server1 / root
LV到2.5GB:
lvreduce -L2.5G /dev/server1/root
然后我删除/ dev / server1 / swap_1
LV(如果交换不在硬盘驱动器的末尾,则不需要) - 在这种情况下,请确保缩小驱动器上的最后一个LV,以使其适合PV! 。
lvremove /dev/server1/swap_1
...并将PV调整到3GB:
pvresize --setphysicalvolumesize 3G /dev/md1
现在我们将/ dev / md1
缩小到4GB。 --size
值必须为KiBytes(4 x 1024 x 1024 = 4194304); 确保可以除以64:
mdadm --grow /dev/md1 --size=4194304
现在我将PV增长到最大值(如果不指定大小, pvresize
将使用尽可能最大的值):
pvresize /dev/md1
现在我们检查一下输出
vgdisplay
root@Knoppix:~# vgdisplay
--- Volume group ---
VG Name server1
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 26
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 0
Max PV 0
Cur PV 1
Act PV 1
VG Size 4.00 GB
PE Size 4.00 MB
Total PE 1023
Alloc PE / Size 640 / 2.50 GB
Free PE / Size 383 / 1.50 GB
VG UUID X3ZYTy-39yq-20k7-GCGk-vKVU-Xe0i-REdEu0
root@Knoppix:~#
如你所见,我们有383个免费的PE,所以我们可以重新创建/ dev / server1 / swap_1
LV(在我们删除之前有66个PE):
lvcreate --name swap_1 -l 66 server1
mkswap /dev/server1/swap_1
让我们检查
vgdisplay
再次:
root@Knoppix:~# vgdisplay
--- Volume group ---
VG Name server1
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 27
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 0
Max PV 0
Cur PV 1
Act PV 1
VG Size 4.00 GB
PE Size 4.00 MB
Total PE 1023
Alloc PE / Size 706 / 2.76 GB
Free PE / Size 317 / 1.24 GB
VG UUID X3ZYTy-39yq-20k7-GCGk-vKVU-Xe0i-REdEu0
root@Knoppix:~#
我们还有317个免费的PE,所以我们可以扩展我们的/ dev / server1 / root
LV:
lvextend -l +317 /dev/server1/root
现在我们将/ dev / server1 / root
的文件系统调整到最大可能的值(如果没有指定大小,则resize2fs
将使用尽可能大的值)...
resize2fs /dev/server1/root
...并再次运行文件系统检查:
e2fsck -f /dev/server1/root
就是这样 - 你现在可以再次启动进入正常系统 。
重新启动后,您应该会看到/ dev / md1
现在更小:
cat /proc/mdstat
server1:~# cat /proc/mdstat
Personalities : [raid1]
md1 : active raid1 sda5[0] sdb5[1]
4194304 blocks [2/2] [UU]
md0 : active raid1 sda1[0] sdb1[1]
248896 blocks [2/2] [UU]
unused devices: <none>
server1:~#
df -h
server1:~# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/server1-root
3.7G 742M 3.0G 20% /
tmpfs 126M 0 126M 0% /lib/init/rw
udev 10M 68K 10M 1% /dev
tmpfs 126M 0 126M 0% /dev/shm
/dev/md0 236M 18M 206M 8% /boot
server1:~#
pvdisplay
server1:~# pvdisplay
--- Physical volume ---
PV Name /dev/md1
VG Name server1
PV Size 4.00 GB / not usable 0
Allocatable yes (but full)
PE Size (KByte) 4096
Total PE 1023
Free PE 0
Allocated PE 1023
PV UUID Ntrsmz-m0o1-WAPD-xhsb-YpH7-0okm-qfdBQG
server1:~#
vgdisplay
server1:~# vgdisplay
--- Volume group ---
VG Name server1
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 28
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 4.00 GB
PE Size 4.00 MB
Total PE 1023
Alloc PE / Size 1023 / 4.00 GB
Free PE / Size 0 / 0
VG UUID X3ZYTy-39yq-20k7-GCGk-vKVU-Xe0i-REdEu0
server1:~#
lvdisplay
server1:~# lvdisplay
--- Logical volume ---
LV Name /dev/server1/root
VG Name server1
LV UUID 3ZgGnd-Sq1s-Rchu-92b9-DpAX-mk24-0aOMm2
LV Write Access read/write
LV Status available
# open 1
LV Size 3.74 GB
Current LE 957
Segments 2
Allocation inherit
Read ahead sectors 0
Block device 253:0
--- Logical volume ---
LV Name /dev/server1/swap_1
VG Name server1
LV UUID sAzi1B-pKdf-dM1E-Swx0-mgse-RFMP-ns50GQ
LV Write Access read/write
LV Status available
# open 2
LV Size 264.00 MB
Current LE 66
Segments 1
Allocation inherit
Read ahead sectors 0
Block device 253:1
server1:~#