如何在一個可分割的軟件 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 通用的步驟
- 預留空間給超級資料塊。
新的安裝。利用標準的安裝程式將 CentOS 安裝在第一個硬磁 /dev/sda 上。在安裝時請選擇手動式分割,並預留最少 1 MB 未分割空間在硬碟的末端。 ii. 移植現有的非 RAID 系統。有需要的話,請縮小最後一個分割區來取得硬碟末端的 1 MB 空間。要縮小一個分割區,你必需先縮小內裡的檔案系統,然後才能把分割區縮小。請利用 resize2fs 及 parted 來進行此步驟。
利用 CentOS 的安裝碟開機並進入修復模式。安裝程式會詢問是否需要掛載現存的 CentOS 安裝,而你必須拒絕。
在只有 /dev/sda 的降級模式下,以 mdadm 建立軟件磁碟陣列:
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 -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 的步驟
建立 /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。
3.2.2. 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
3.3. 第三部份:重新開機
你現在要做的事情視乎你有沒有略過第一部份內的被標示為「選擇性」的那一步:
如果你沒有略過選擇性步驟,亦即是說你已經把鏡像磁碟加進陣列中,你只須定時檢查 /proc/mdstat,看看磁碟陣列是否在重建中。當重建完成後,你便可以安全地重新開機。
否則,假設你略過了選擇性步驟,請立即重新開機並實行被略過的步驟來加入鏡像磁碟(請以 root 執行指令);鏡像磁碟將會在背景進行重建,而你可繼續正常運用系統(透過定時檢查 /proc/mdstat,你便能得悉磁碟陣列何時完成重建)。
Translation of revision 13