如何在一个可分割的软件 RAID1 上安装 CentOS 5 及 6

1. 究竟可分割的软件 RAID1 是什么?

精简答案:它是一个可以如普通硬盘般被分割的 md 磁盘数组

一直以来,使用 md 磁盘数组的传统方法是:在组成磁盘数组的硬盘上个别创建分区;将这些分区类型设置为 0xfd(自动检测的 linux 磁盘数组);利用这些分区创建一个磁盘区;将它格式化为某种文件系统并使用它。假如你需要数个文件系统在磁盘数组上,你必须创建数个 RAID 磁盘区,意思就是你必须在数组中的每个硬盘上创建完全相同的分区,及创建多个 RAID 磁盘区。相比起来,一个真正的磁盘数组控制器容许你创建一个 RAID 磁盘区,而它可以如普通硬盘般被分割。

因此由 mdadm 2.6 起,它容许你创建可分割的 RAID 碟碟区。这些 RAID 磁盘区的设备名称是 /dev/md_dX,而其上的分区名称是 /dev/md_dXpY。当 mdadm 组合可分割式磁盘数组的磁盘区时,它会自动为其上的分区在 dev 目录内置立记录。

2. 为何你会想将系统案装在一个可分割的软件 RAID1 上?

如果你将系统安装在一个可分割的软件磁盘阵例上,你可以将整个硬盘作为磁盘数组内的成员设备。由于 RAID1 是一个镜像,就算某一个硬盘失效了,你仍可以用其它硬盘来开机,而无须做任何特别步骤如保存开机程序。当你需要维修一个有故障的 RAID 磁盘区,而磁盘数组的成员是整个硬磁,你只需放入新的硬盘及执行 mdadm --add 便可以了;你无须进行分割或做其它事情。

3. 安装程序

这份指引描述如何: i. 由零开始将 CentOS 5 及 6 安装在一个可分割的 RAID1 系统上。 ii. 将现有非 RAID 的 CentOS 5 及 6 安装移植到一个可分割的 RAID1 系统上。

在这份教学文档内,我们会假设你的系统拥有两个硬盘:/dev/sda/dev/sdb

3.1. 第 1 部份:创建数组、挂载及 chroot

如果你要进行新的安装或移植现有的非 RAID 安装,你必须在磁盘末端预留一些未分割的空间。这空间会被 mdadm 用来存储数组的中继数据,亦即是 RAID 的超级数据块。0.90 版的超级数据块,我们采用的版本,只需数 KB 的磁盘空间。因此,在磁盘的末端预留 1MB 未分割空间已经十分稳妥。

预留了超级数据块的空间后,我们便可以创建数组及以 /dev/sda 单一碟盘来引导它。接着你可以加入 /dev/sdb 这个镜像磁盘;或者在降级模式下设置及引导你的 RAID1 系统后才加入它。第二个选择意味着镜像磁盘在后台进行重建,而你继续正常运用系统;由于重建镜像磁盘是项非常冗长的程序,此做法较为可取。

在这两个情况下,我们同样要创建及启用 RAID1 数组,然后以手动方式准备系统,好能设置它从 RAID 开机。

3.1.1. CentOS 5 及 6 通用的步骤

  1. 预留空间给超级数据块。
    1. 新的安装。利用标准的安装程序将 CentOS 安装在第一个硬磁 /dev/sda 上。在安装时请选择手动式分割,并预留最少 1 MB 未分割空间在硬盘的末端。 ii. 移植现有的非 RAID 系统。有需要的话,请缩小最后一个分区来取得硬盘末端的 1 MB 空间。要缩小一个分区,你必需先缩小内里的文件系统,然后才能把分区缩小。请利用 resize2fsparted 来进行此步骤。

  2. 利用 CentOS 的安装碟开机并进入修复模式。安装程序会询问是否需要挂载现存的 CentOS 安装,而你必须拒绝。

  3. 在只有 /dev/sda 的降级模式下,以 mdadm 创建软件磁盘数组:

    mdadm --create --metadata=0.90 --level=1 --raid-devices=2 /dev/md_d0 /dev/sda missing
  4. 选择性。把镜像磁盘 /dev/sdb 加入磁盘数组,并检查 /proc/mdstat 看看是否已经开始创建磁盘数组:

    mdadm --add /dev/md_d0 /dev/sdb
    cat /proc/mdstat

    :纵使是必须的,此步骤可以延期实行;要是你现在略过它,你可在系统下次开机后执行。

  5. 现在你必须手动地挂载系统并 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 -o bind /tmp /mnt/sysimage/tmp
    mount -t proc none /mnt/sysimage/proc
    mount -t sysfs none /mnt/sysimage/sys
    chroot /mnt/sysimage
    上述例子假设整个系统位于一个文件系统内,因为只有 '/' 被挂载。当系统被划分为多个文件系统时,你最少必须挂载 / 、/boot 及 /usr,正如以下例子(分区名称大概会不同):
    ...
    mount /dev/md_d0p9 /mnt/sysimage
    mount /dev/md_d0p1 /mnt/sysimage/boot
    mount /dev/md_d0p3 /mnt/sysimage/usr
    ...

3.2. 第 2 部份:设置系统由 RAID 开机

下列步骤会在 chroot 环境下进行。

3.2.1. CentOS 5 的步骤

  1. 创建 /etc/mdadm.conf

    mdadm --detail --scan > /etc/mdadm.conf 
  2. 编辑 /etc/fstab。你必须将所有 LABEL= 的挂载转为明确的设备名称,例如:/dev/md_d0p1/dev/md_d0p2……

  3. 编辑 /etc/grub.conf,将 root=LABEL=…… 改为 root=/dev/md_d0p1(或者你的设置内的相应分区)。

  4. 现在你必须修正 mkinitrd 脚本。请从 这页下载修正档并执行以下指令:

    cd /sbin
    cp mkinitrd mkinitrd.dist
    patch -p0 < /tmp/mkinitrd-md_d0.patch

详情请参阅这个相关的错误报告

  1. 停止 yum 更新 mkinitrd 组件。在 /etc/yum.conf 内加入
    exclude=mkinitrd*
  2. 创建新的 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。

3.2.2. CentOS 6 的步骤

  1. 创建 /etc/mdadm.conf:

    mdadm --detail --scan > /etc/mdadm.conf
  2. 编辑 /etc/fstab:你必须把所有采用 UUID= 的挂载改为设备名称,例如 /dev/md_d0p1/dev/md_d0p2、……

  3. 编辑 /etc/grub.conf,以 root=/dev/md_d0p1(或对应你设置内的分区)代替 root=UUID=……。你也要把内核的 rd_NO_MD 选项删除(存在的话),否则开机时便不会找到任何 md 设备(RAID)。

  4. 创建新的 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

3.3. 第三部份:重新开机

你现在要做的事情视乎你有没有略过第一部份内的被置标为「选择性」的那一步

  1. 如果你没有略过选择性步骤,亦即是说你已经把镜像磁盘加进数组中,你只须定时检查 /proc/mdstat,看看磁盘数组是否在重建中。当重建完成后,你便可以安全地重新开机。

  2. 否则,假设你略过了选择性步骤,请立即重新开机并实行被略过的步骤来加入镜像磁盘(请以 root 执行指令);镜像磁盘将会在后台进行重建,而你可继续正常运用系统(通过定时检查 /proc/mdstat,你便能得悉磁盘数组何时完成重建)。

Translation of revision 13

zh/HowTos/Install_On_Partitionable_RAID1 (last edited 2019-12-09 09:11:39 by anonymous)