如何在一個可分割的軟件 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 通用的步驟

  1. 利用標準的安裝程式將 CentOS 安裝在第一個硬磁 /dev/sda 上。在安裝時請選擇手動式分割,並剩下最少一個單元的未分割空間在硬碟的末端。你遲些便能夠贖回大部份的空間。你須要預留這個空間給 mdadm,因它會將中繼資料儲存在 RAID 磁碟區的最後一個資料塊內。

  2. 利用 CentOS 的安裝碟開機並進入修復模式。安裝程式會詢問是否需要掛載現存的 CentOS 安裝,而你必須拒絕。
  3. 在 mdadm 的降級模式下,以 /dev/sda 建立軟件磁碟陣列:

    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 -t proc none /mnt/sysimage/proc
    mount -t sysfs none /mnt/sysimage/sys
    chroot /mnt/sysimage
    

    由現在開始,所有步驟都在 chroot 環境下進行。

第 2 部份:設定系統由 RAID 開機

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。

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
    

第三部份:重新開機

  1. 現在你唯一要做的就是定時檢查 /proc/mdstat,看看磁碟陣列是否在重建中。當重建完成後,你便可以安全地重新開機。

  2. 你亦可以選擇性地調整你的磁碟陣列上的最後一個分割區,來贖回仍未分割的空間。

Translation of revision 8

zh-tw/HowTos/Install On Partitionable RAID1 (last edited 2012-05-08 15:40:55 by TimothyLee)