前言
在早期,要在Debian上建構Soft Raid是大工程,除了相關的的設定步驟繁雜,就連同系統的initrd/initramfs等都要自己進行更新,讓核心能在掛載/之前認得Soft Raid。還好新版的Debian已提供了較為友善的工具,所以這一部份的建構已比過往輕鬆許多。是故以下將以Soft Raid 1作為示範,如有謬誤請指正,感謝。
所需套件
硬體配置
分割硬碟
我們假設系統上有兩顆硬碟/dev/sda、/dev/sdb,其中/dev/sda為原來的200 GB系統硬碟,/dev/sdb為全新250 GB的硬碟。由於Soft Raid可以針對partition做鏡像,所以我們將/dev/sdb每個分割區大小設定成和/dev/sda一樣,多的部份再獨立分割成額外的分割區,以達成配置Soft Raid的前置步驟。在這邊我們要將所有的分割區都做Soft Raid,包含根目錄:
- /dev/sda:200 GB(原先的系統硬碟,不用更動)
# fdisk -l /dev/sda
Disk /dev/sda: 200.0 GB, 200048565760 bytes
255 heads, 63 sectors/track, 24321 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 * 1 34 273073+ 83 Linux
/dev/sda2 35 24321 195085327+ 5 Extended
/dev/sda5 35 642 4883728+ 83 Linux
/dev/sda6 643 1007 2931831 83 Linux
/dev/sda7 1008 1089 658633+ 82 Linux swap / Solaris
/dev/sda8 1090 1138 393561 83 Linux
/dev/sda9 1139 24321 186217416 83 Linux
- /dev/sdb:250 GB(此顆硬碟較大,所以將多出來的空間分割成最後一個磁區/dev/sdb10)
# fdisk -l /dev/sdb
Disk /dev/sdb: 250.0 GB, 250058268160 bytes
255 heads, 63 sectors/track, 30401 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sdb1 * 1 34 273073+ 83 Linux
/dev/sdb2 35 30401 243922927+ 5 Extended
/dev/sdb5 35 642 4883728+ 83 Linux
/dev/sdb6 643 1007 2931831 83 Linux
/dev/sdb7 1008 1089 658633+ 82 Linux swap / Solaris
/dev/sdb8 1090 1138 393561 83 Linux
/dev/sdb9 1139 24321 186217416 83 Linux
/dev/sdb10 24322 30401 48837568+ 83 Linux
其中/dev/sda7和/dev/sdb7為swap,在此我們不將swap也做Soft Raid(要做也可以)。
更改分割區的system id
別急著將更動的資訊寫入硬碟,在此還少一個步驟:我們需將代號「83」的「Linux」分割區更改為代號「fd」的「Linux raid autodetect」。更動後的分割表如下:
# fdisk -l /dev/sda
Disk /dev/sda: 200.0 GB, 200048565760 bytes
255 heads, 63 sectors/track, 24321 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 * 1 34 273073+ fd Linux raid autodetect
/dev/sda2 35 24321 195085327+ 5 Extended
/dev/sda5 35 642 4883728+ fd Linux raid autodetect
/dev/sda6 643 1007 2931831 fd Linux raid autodetect
/dev/sda7 1008 1089 658633+ 82 Linux swap / Solaris
/dev/sda8 1090 1138 393561 fd Linux raid autodetect
/dev/sda9 1139 24321 186217416 fd Linux raid autodetect
- /dev/sdb:250 GB(最後一個磁區/dev/sdb10因不需鏡像,所以不用更動)
# fdisk -l /dev/sdb
Disk /dev/sdb: 250.0 GB, 250058268160 bytes
255 heads, 63 sectors/track, 30401 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sdb1 * 1 34 273073+ fd Linux raid autodetect
/dev/sdb2 35 30401 243922927+ 5 Extended
/dev/sdb5 35 642 4883728+ fd Linux raid autodetect
/dev/sdb6 643 1007 2931831 fd Linux raid autodetect
/dev/sdb7 1008 1089 658633+ 82 Linux swap / Solaris
/dev/sdb8 1090 1138 393561 fd Linux raid autodetect
/dev/sdb9 1139 24321 186217416 fd Linux raid autodetect
/dev/sdb10 24322 30401 48837568+ 83 Linux
到此就可以按「w」將更動資料寫入硬碟。
設定Soft Raid 1
接下來我們將使用mdadm工具建立我們的Soft Raid 1虛擬裝置。在這邊預計的配置如下:
Soft Raid裝置名稱 | 實體鏡像分割區 |
/dev/md0 | /dev/sda1、/dev/sdb1 |
/dev/md1 | /dev/sda5、/dev/sdb5 |
/dev/md2 | /dev/sda6、/dev/sdb6 |
/dev/md3 | /dev/sda8、/dev/sdb8 |
/dev/md4 | /dev/sda9、/dev/sdb9 |
所以我們執行以下命令:
# mdadm --add /dev/md0 --level 1 --raid-devices=2 missing /dev/sdb1
# mdadm --add /dev/md1 --level 1 --raid-devices=2 missing /dev/sdb5
# mdadm --add /dev/md2 --level 1 --raid-devices=2 missing /dev/sdb6
# mdadm --add /dev/md3 --level 1 --raid-devices=2 missing /dev/sdb8
# mdadm --add /dev/md4 --level 1 --raid-devices=2 missing /dev/sdb9
- /dev/md[0-4]就是我們的Soft Raid虛擬裝置,--level指定的是raid等級(在此我們用1,代表鏡像),--raid-devices指定有幾個分割區。最後一個missing特別重要,是代表忽略的意思。原因是/dev/sda上面有我們的系統,若是這邊不使用missing參數,則原有的系統會被重建,造成系統損毀。這裡要特別注意。
- 到此為止,我們已經將Soft Raid虛擬裝置建立起來了。接下來我們將新建的Soft Raid裝置格式化(假設要格式化為ext3):
# make.ext3 /dev/md0
# make.ext3 /dev/md1
# make.ext3 /dev/md2
# make.ext3 /dev/md3
# make.ext3 /dev/md4
- 接下來我們要修改/etc/fstab的資料,使系統開機時知道要使用soft raid的配置。在此以root分割區為示範,原本的設定值應該是:
/dev/sda1 / ext3 defaults,errors=remount-ro 0 1
/dev/md0 / ext3 defaults,errors=remount-ro 0 1
/dev/sda7 none swap sw 0 0
- 現在請加上第二個swap分割區,並加入pri=1的參數:
/dev/sda7 none swap sw,pri=1 0 0
/dev/sdb7 none swap sw,pri=1 0 0
- 請修改grub開機管理員的參數,讓核心能再開機時知道root分割區以更動為/dev/md0。請修改/boot/grub/menu.lst,並將其中root=/dev/sda1改成root=/dev/md0,然後存檔離開即可。改完之後的設定值會像這樣:
kernel /boot/vmlinuz-2.6.17-2-686 root=/dev/md0 ro
- 最後我們需要讓initramfs在開機時就能載入soft raid的驅動,以讓核心順利驅動soft raid,所以我們在此要重新配置initramfs(都用預設值即可):
# update-initramfs --priority=low mdadm
- 現在依序將剛格式化好的raid磁碟裝置掛載上來(比如掛載到/mnt),並將原系統上相對應的目錄搬移到對應的raid磁碟裝置上(在此以/dev/md0作為示範,其餘以此類推):
# mount /dev/md0 /mnt
# tar clf - -C / . | tar xpvf - -C /mnt
# umount /dev/md0
- 最後,將grub開機管理程式也複製一份到/dev/sdb的mbr,即完成整個soft raid的配置:
- 重開機,若一切順利,則會使用剛建立好的soft raid開機。此時請將/dev/sda加入soft raid中(是否完成重建,請cat /proc/mdstat就可知道進度):
# mdadm --add /dev/md0 /dev/sda1
# mdadm --add /dev/md1 /dev/sda5
# mdadm --add /dev/md2 /dev/sda6
# mdadm --add /dev/md3 /dev/sda8
# mdadm --add /dev/md4 /dev/sda9
重建損毀資料
- 先正常關機。
- 將/dev/sda的電源、排線拔除,剩下/dev/sdb。
- 開機,此時使用/dev/sdb獨立開機。
- 正常開機後,以root身份登入,並將soft raid紀錄中有關連到/dev/sda的紀錄移除:
# mdadm --fail /dev/md0 /dev/sda1
# mdadm --fail /dev/md1 /dev/sda5
# mdadm --fail /dev/md2 /dev/sda6
# mdadm --fail /dev/md3 /dev/sda8
# mdadm --fail /dev/md4 /dev/sda9
# mdadm --remove /dev/md0 /dev/sda1
# mdadm --remove /dev/md1 /dev/sda5
# mdadm --remove /dev/md2 /dev/sda6
# mdadm --remove /dev/md3 /dev/sda8
# mdadm --remove /dev/md4 /dev/sda9
- 關機。並換上新的硬碟。此時再用/dev/sdb開機。
- 一樣以root登入,並將新硬碟分割成和/dev/sdb的分割表一樣,再重新加入soft raid即可(是否完成重建,請cat /proc/mdstat就可知道進度):
# mdadm --add /dev/md0 /dev/sda1
# mdadm --add /dev/md1 /dev/sda5
# mdadm --add /dev/md2 /dev/sda6
# mdadm --add /dev/md3 /dev/sda8
# mdadm --add /dev/md4 /dev/sda9
- 最後別忘了將grub開機管理程式複製一份至/dev/sda的mbr:
#如此應可順利完成重建。
參考文件
http://www.debian-administration.org/articles/238
http://www.epimetrics.com/topics/one-page?page_id=421&topic=Bit-head%20Stuff&page_topic_id=120
http://xtronics.com/reference/SATA-RAID-debian-for-2.6.html
http://deb.riseup.net/storage/software-raid/
Comments (0)
You don't have permission to comment on this page.