[FrontPage] [TitleIndex] [WordIndex

This is a read-only archived version of wiki.centos.org

如何在一個可分割的軟件 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 的磁碟空間。因此,在磁碟的末端預留 1 MB 未分割空間已經十分穩妥。

預留了超級資料塊的空間後,我們便可以建立陣列及以 /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


2023-09-11 07:23