LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 883|回复: 0

Falko Timme|怎样调整RAID分区(压缩&扩展)(软RAID)

[复制链接]
发表于 2008-12-16 13:12:44 | 显示全部楼层 |阅读模式
Falko Timme|怎样调整RAID分区(压缩&扩展)(软RAID)

--------------------------------------------------------------------------------

How To Resize RAID Partitions (Shrink & Grow) (Software RAID)
Version 1.0
Author: Falko Timme <ft [at] falkotimme [dot] com>

Last edited 11/24/2008

原文地址:http://www.howtoforge.com/how-to-res...-software-raid


怎样调整RAID分区(压缩&扩展)(软RAID)

本文向你介绍如何缩减或增加已有的软RAID分区。我用ext3文件系统上的非LVM RAID1分区做了测试。下面内容将说明针对完整RAID阵列和不完整RAID阵列的具体操作步骤。
如果你在RAID分区上使用LVM,那这个步骤会有所不同,因此不要按本文的步骤进行!
我不能保证本文内容适用于你!

1 基本说明
几天前我发现我的一个服务器有个不完整的RAID1阵列(/dev/md2, 由/dev/sda3和/dev/sdb3组成; /dev/sda3 已经不工作了, /dev/sdb3 仍然使用):

server1:~# cat /proc/mdstat
Personalities : [raid1]
md2 : active raid1 sdb3[1]
4594496 blocks [2/1] [_U]

md1 : active raid1 sda2[0] sdb2[1]
497920 blocks [2/2] [UU]

md0 : active raid1 sda1[0] sdb1[1]
144448 blocks [2/2] [UU]

unused devices: <none>
server1:~#

我试着修复了一下 (用本教程), 但不幸的是在同步过程的最后(99.9%完成)时,同步停止然后又重新开始。我发现原因是在/dev/sdb3(使用中的)分区的末尾有坏扇区—这个在日志/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/md2,把/dev/sdb3末尾的坏扇区去掉,然后把新的/dev/sda3(从更换的硬盘上)加到/dev/md2上,使得同步完成,然后把/dev/sdb3从阵列中去掉并用新硬盘替换/dev/sdb,把新的/dev/sdb3加到/dev/md2上,然后再扩展/dev/md2。

这是下列步骤的实例之一(我将讲解针对完整阵列和不完整的阵列的步骤)。
请注意/dev/md2是我的系统分区(挂载点是 / ),因此我得用rescue system(比如Knoppix Live-CD)来重调阵列的大小。如果要调整的阵列不是系统分区,你也许就不用进入recue system了;但是在任何一种情形下,请确保阵列没被挂载!

2 完整的阵列

这里我要讲解下如何重新调整/dev/md2阵列的大小,它由/dev/sda3和/dev/sdb3组成

2.1 压缩完整阵列

启动到rescue system然后激活所有所需模块:

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

运行

e2fsck -f /dev/md2

检查文件系统。

/dev/md2大小为40GB,我想把它缩到30GB。首先我们用resize2fs来压缩文件系统,来确保文件系统在30GB以内,我们可以把它压的再小点(25GB)来让我们有点安全感,然后把/dev/md2压缩至30GB,然后把文件系统调到(再用resize2fs)尽可能大:

resize2fs /dev/md2 25G

现在我们把/dev/md2压缩到了30GB。大小必须是KiBytes (30 x 1024 x 1024 = 31457280)的形式,确保它能被64整除。

mdadm --grow /dev/md2 --size=31457280

接下来我们把文件系统扩大到最大(不指定大小的话,resize2fs会使用可能的最大值)

resize2fs /dev/md2

... 然后再次检查文件系统:

e2fsck -f /dev/md2

好了,你可以再次启动系统了。


2.2 扩展完整阵列

启动到rescue system然后激活所有所需模块:

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

现在按下面的步骤扩展/dev/md2:

mdadm --grow /dev/md2 --size=max

--size=max 意思是可能的最大值,你也可以以KiBytes的形式指定一个值 (参考上一节)。

然后检查文件系统...

e2fsck -f /dev/md2

..., 调整文件系统大小...

resize2fs /dev/md2

... 再次检查文件系统:

e2fsck -f /dev/md2

之后你就可以正常启动进入系统了。
.
3 不完整的阵列

这里我要讲解如何调整不完整阵列/dev/md2,由/dev/sda3和/dev/sdb3组成,其中/dev/sda3已经坏掉。

server1:~# cat /proc/mdstat
Personalities : [raid1]
md2 : active raid1 sdb3[1]
4594496 blocks [2/1] [_U]

md1 : active raid1 sda2[0] sdb2[1]
497920 blocks [2/2] [UU]

md0 : active raid1 sda1[0] sdb1[1]
144448 blocks [2/2] [UU]

unused devices: <none>
server1:~#


3.1 压缩不完整的阵列

在进入rescue system前,必须保证已把/dev/sda3从阵列中移除。

mdadm --manage /dev/md2 --fail /dev/sda3
mdadm --manage /dev/md2 --remove /dev/sda3

然后覆盖/dev/sda3上的superblock (这个相当重要-如果忘了,调整后系统可能就启动不了了):

mdadm --zero-superblock /dev/sda3

启动到rescue system然后激活所有所需模块:

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

运行

e2fsck -f /dev/md2
来检查文件系统。

/dev/md2大小为40GB,我要压缩至30GB。首先我们用resize2fs来压缩文件系统,来确保文件系统在30GB以内,我们可以把它压的再小点(25GB)来让我们有点安全感,然后把/dev/md2压缩至30GB,然后把文件系统调到(再用resize2fs)尽可能大:

resize2fs /dev/md2 25G

现在把/dev/md2压缩到了30GB。大小必须是KiBytes (30 x 1024 x 1024 = 31457280)的形式,确保它能被64整除:
mdadm --grow /dev/md2 --size=31457280

接下来我们把文件系统扩大到最大(不指定大小的话,resize2fs会使用可能的最大值)

resize2fs /dev/md2

... 再次检查文件系统:

e2fsck -f /dev/md2

正常启动然后运行以下命令来把/dev/sda3 添加回/dev/md2阵列:

mdadm --zero-superblock /dev/sda3
mdadm -a /dev/md2 /dev/sda3

看一下:

cat /proc/mdstat

应该看到/dev/sdb3和/dev/sda3正在进行同步了。.


3.2 扩展不完整的阵列

在进入rescue system前,必须保证已把/dev/sda3从阵列中移除。

mdadm --manage /dev/md2 --fail /dev/sda3
mdadm --manage /dev/md2 --remove /dev/sda3

然后覆盖/dev/sda3上的superblock (这个相当重要-如果忘了,调整后系统可能就启动不了了):

mdadm --zero-superblock /dev/sda3

启动到rescue system然后激活所有所需模块:

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

下面按步骤扩展/dev/md2:

mdadm --grow /dev/md2 --size=max

--size=max 意思是可能的最大值,你也可以以KiBytes的形式指定一个值 (参考前节)。

然后检查文件系统...

e2fsck -f /dev/md2

..., 调整文件系统...

resize2fs /dev/md2

... 再检查文件系统

e2fsck -f /dev/md2

正常启动然后运行以下命令来把/dev/sda3添加回/dev/md2阵列:

mdadm --zero-superblock /dev/sda3
mdadm -a /dev/md2 /dev/sda3

看一下:

cat /proc/mdstat

应该会发现/dev/sdb3和/dev/sda3正在同步:


4 链接
Knoppix: http://www.knoppix.net/
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表