如何在一个可分割的软件 RAID1 上安装 CentOS 5 及 6
究竟可分割的软件 RAID1 是什么?
精简答案:它是一个可以如普通硬盘般被分割的 mdadm 磁盘数组
一直以来,使用 mdadm 磁盘数组的传统方法是:在组成磁盘数组的硬盘上个别创建分区;将这些分区类型设置为 0xfd(自动检测的 linux 磁盘数组);利用这些分区创建一个磁盘区;将它格式化为某种文件系统并使用它。假如你需要数个文件系统在磁盘数组上,你必须创建数个 RAID 磁盘区,意思就是你必须在数组中的每个硬盘上创建完全相同的分区,及创建多个 RAID 磁盘区。相比起来,一个真正的磁盘数组控制器容许你创建一个 RAID 磁盘区,而它可以如普通硬盘般被分割。
因此由 mdadm 2.6 起,它容许你创建可分割的 RAID 碟碟区。这些 RAID 磁盘区的设备名称是 /dev/md_dX,而其上的分区名称是 /dev/md_dXpY。当 mdadm 组合可分割式磁盘数组的磁盘区时,它会自动为其上的分区在 dev 目录内置立记录。
为何你会想将系统案装在一个可分割的软件 RAID1 上?
如果你将系统安装在一个可分割的软件磁盘阵例上,你可以将整个硬盘作为磁盘数组内的成员设备。由于 RAID1 是一个镜像,就算某一个硬盘失效了,你仍可以用其它硬盘来开机,而无须做任何特别步骤如保存开机程序。当你需要维修一个有故障的 RAID 磁盘区,而磁盘数组的成员是整个硬磁,你只需放入新的硬盘及执行 mdadm --add 便可以了;你无须进行分割或做其它事情。
安装程序
这份指引描述如何由零开始将 CentOS 5 及 6 安装在一个可分割的磁盘数组上。然而,你亦可以将现有非 RAID 的安装移植到一个可分割的磁盘数组上 —— 你只需在现有硬磁上找到未被分割的空间,又或者调整最尾一个分区的尺寸来释放一些空间。请依从这份指引的第三步来进行移植。
在这份教学文档内,我们会假设你的系统拥有两个硬盘:/dev/sda 及 /dev/sdb。
第 1 部份:创建数组、挂载及 chroot
CentOS 5 及 6 通用的步骤
利用标准的安装程序将 CentOS 安装在第一个硬磁 /dev/sda 上。在安装时请选择手动式分割,并剩下最少一个单元的未分割空间在硬盘的末端。你迟些便能够赎回大部份的空间。你须要预留这个空间给 mdadm,因它会将中继数据存储在 RAID 磁盘区的最后一个数据块内。
- 利用 CentOS 的安装碟开机并进入修复模式。安装程序会询问是否需要挂载现存的 CentOS 安装,而你必须拒绝。
在 mdadm 的降级模式下,以 /dev/sda 创建软件磁盘数组:
mdadm --create --metadata=0.90 --level=1 --raid-devices=2 /dev/md_d0 /dev/sda missing
将镜像磁盘 /dev/sdb 加入磁盘数组,并检查 /proc/mdstat 看看是否已经开始创建磁盘数组:
mdadm --add /dev/md_d0 /dev/sdb cat /proc/mdstat
现在你必须手动地挂载系统并 chroot 到里面来更改开机设置:
mkdir /mnt/sysimage mount /dev/md_d0p1 /mnt/sysimage mount -o bind /dev /mnt/sysimage/dev mount -o bind /selinux /mnt/sysimage/selinux mount -t proc none /mnt/sysimage/proc mount -t sysfs none /mnt/sysimage/sys chroot /mnt/sysimage
由现在开始,所有步骤都在 chroot 环境下进行。
第 2 部份:设置系统由 RAID 开机
CentOS 5 的步骤
创建 /etc/mdadm.conf:
mdadm --detail --scan > /etc/mdadm.conf
编辑 /etc/fstab。你必须将所有 LABEL= 的挂载转为明确的设备名称,例如:/dev/md_d0p1、/dev/md_d0p2……
编辑 /etc/grub.conf,将 root=LABEL=…… 改为 root=/dev/md_d0p1(或者你的设置内的相应分区)。
现在你必须修正 mkinitrd 脚本。请从 这页下载修正档并执行以下指令:
cd /sbin cp mkinitrd mkinitrd.dist patch -p0 < /tmp/mkinitrd-md_d0.patch
详情请参阅这个相关的错误报告。
- 停止 yum 更新 mkinitrd 组件。在 /etc/yum.conf 内加入
exclude=mkinitrd*
- 创建新的 initrd 映像:
cd /boot mv initrd-2.6.18-128.el5.img initrd-2.6.18-128.el5.img.bak mkinitrd /boot/initrd-2.6.18-128.el5.img 2.6.18-128.el5
假若你将来需要更新 mkinitrd 组件,但检测可分割磁盘数组的错误仍未被矫正,你必须将以上的修正再次应用在 mkinitrd,然后重新创建 initrd。
CentOS 6 的步骤
创建 /etc/mdadm.conf:
mdadm --detail --scan > /etc/mdadm.conf
编辑 /etc/fstab:你必须把所有采用 UUID= 的挂载改为设备名称,例如 /dev/md_d0p1、/dev/md_d0p2、……
编辑 /etc/grub.conf,以 root=/dev/md_d0p1(或对应你设置内的分区)代替 root=UUID=……。你也要把内核的 rd_NO_MD 选项删除(存在的话),否则开机时便不会找到任何 md 设备(RAID)。
- 创建新的 initramfs 映像:
cd /boot mv initramfs-2.6.32-220.el6.x86_64.img initramfs-2.6.32-220.el6.x86_64.img.bak dracut /boot/initramfs-2.6.32-220.el6.x86_64.img 2.6.32-220.el6.x86_64
第三部份:重新开机
现在你唯一要做的就是定时检查 /proc/mdstat,看看磁盘数组是否在重建中。当重建完成后,你便可以安全地重新开机。
- 你亦可以选择性地调整你的磁盘数组上的最后一个分区,来赎回仍未分割的空间。
Translation of revision 8
