Linux停软Raid1扩容方案

Linux下软Raid1扩容方案如上图所示,VG 內的 PE 会分给虚线部分的 LV,如果未来这个 VG 要扩充的話,加上其他

Linux下软Raid1扩容方案

如上图所示,VG 內的 PE 会分给虚线部分的 LV,如果未来这个 VG 要扩充的話,加上其他的 PV 即可。 而最重要的 LV 如果要扩充的话,也是透过加入 VG 內沒有使用到的 PE 來扩充的!

如此一来,我们就可以利用 LV 这个玩意来进行系统的挂载了。不过,你应该要觉得奇怪的是, 那么我的资料写入这个 LV 时,到底他是怎么写入硬盘当中的?其实,依据写入机制的不同,而有两种方式:

1.线性模式 (linear):假如我将 /dev/hda1, /dev/hdb1 这两个 partition 加入到 VG 当中,並且整个 VG 只有一个 LV 时,那么所谓的线性模式就是:当 /dev/hda1 的容量用完之后,/dev/hdb1 的硬盘才会被使用到, 这也是我们所建议的模式。

2.交错模式 (triped):那什么是交错模式?很简单啊,就是我将一笔资料拆成两部分,分別写入 /dev/hda1 与 /dev/hdb1 的意思,感觉上有点像 RAID 0!如此一来,一份资料用两颗硬盘来写入,理论上,读写的效能会比较好。

基本上,LVM 最主要的用处是在实现一个可以弹性调整容量的文件系統上, 而不是在建立一个效能为主的硬盘上,所以,我们应该利用的是 LVM 可以弹性管理整个 partition 大小的用途上,而不是着眼在效能上的。因此, LVM 预设的读写模式是线性模式! 如果你使用 triped 模式,要注意,当任何一个 partition 『归天』时,所有的资料都会『损毁』的! 所以,不是很适合使用这种模式啦!如果要强调效能与备份,那么就直接使用 RAID 即可, 不需要用到 LVM !

创建LVM

假设现在还是/dev/sdb1跟/dev/sdc1组成raid1,有两块新硬盘/dev/sdd和/dev/sde,用fdisk分别对这两块新硬盘进行分区为/dev/sdd1和/dev/sde1,并且system id为8e。

创建PV

用以下命令对sdd1跟sde1分区创建PV:

pvcreate /dev/sdd1 /dev/sde1

然后用pvscan命令查看是否创建成功。用pvdisplay可以查看更详细的信息。

创建VG

用以下命令把sdd1和sde1变成一个VG:

vgcreate -s 16M jobcnvg /dev/sdd1 /dev/sde1参数说明:-s 16M:为PE的大小,这就决定这个VG的最大容量为16M*65534/1024=1T,这个值以后可以通过vgchange来更改。jobcnvg:为VG的名字,可以随便取。/dev/sdd1 /dev/sde1:要加入的设备。

然后用vgscan命令查看是否创建成功。用vgdisplay可以查看详细信息。

创建LV

通过以下命令,把上面创建的jobcnvg,分出一个LV:

lvcreate -l 356 -n jobcnlv jobcnvg参数说明:-l 356:是PE的个数,用vgdisplay可以看到jobcnvg的"Free  PE"数量。-n jobcnlv:是LV的名字,可以随便取。jobcnvg:VG的名字。

然后用lvscan命令查看是否创建成功。用lvdisplay可以查看详细信息。

格式化LV

通过以上步骤,LVM就创建完成了,如果需要挂载使用,就得格式化:

mkfs -t ext3 /dev/jobcnvg/jobcnlv
LV扩容

增加一块硬盘/dev/sdf,通过fdisk把它格式化为/dev/sdf1,system id为8e。

创建PV:

pvcreate /dev/sdf1

扩充VG:

vgextend jobcnvg /dev/sdf1

扩大LV:

lvresize -l +179 /dev/vbirdvg/vbirdlv参数说明:-l +179:增加的PE数量,+号表示增加,-号表示减少,无符号表示设定为多少。resize2fs /dev/vbirdvg/vbirdlv
替换RAID1中的硬盘

替换raid1中的硬盘可参考raid0+1中的替换硬盘,把换出来的硬盘再建成/dev/jobcnvg1/jobcnlv1再放上去,就组成了LVM+RAID1的结构了。

对LVM+RAID1中的LVM扩容

由于扩容的时候LV是不能被占用的,所以这里有两种方法对LV进行扩容。

方案1

先停掉RAID1的服务:

mdadm -S /dev/md0

然后把/dev/jobcnvg/jobcnlv和/dev/jobcnvg1/jobcnlv1进行扩容。

然后再启动RAID1的服务:

mdadm -A /dev/md0
方案2

不用停掉RAID1的服务,先把其中一块LVM移出RAID1:

mdadm -f /dev/md0 /dev/jobcnvg/jobcnlvmdadm -r /dev/md0 /dev/jobcnvg/jobcnlv

对jobcnlv进行扩容后,再接上去:

mdadm --add /dev/md0 /dev/jobcnvg/jobcnlv

同理把jobcnlv1也按以上步骤扩容。

最后

无论用哪种方案,扩容后,都要把RAID1的容量更新:

resize2fs /dev/md0