« ProFTPD + mod_clamav + Quota 建置備忘 | 首頁 | 2007/12, Vol. 143 PChome Magazine »
2007年12月07日
Linux Software RAID 1 實作
- 於單顆硬碟的系統加上另一顆硬碟, 做成 Software RAID 1
- 狀況測試:
- 指令熱插拔
- 摘除一顆硬碟
- 掛回摘除的硬碟
- 摘除其中一顆硬碟, 以另一顆全新硬碟取代
- 取消 Software RAID 1, 回到最原始的單顆硬碟環境
環境
- Fedora Core 6 (on VMware Server)
- /etc/sysconfig/selinux → SELINUX=disabled
- fdisk -l
Disk /dev/sda: 4294 MB, 4294967296 bytes 255 heads, 63 sectors/track, 522 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/sda1 * 1 456 3662788+ 83 Linux /dev/sda2 457 521 522112+ 82 Linux swap / Solaris Disk /dev/sdb: 4294 MB, 4294967296 bytes 255 heads, 63 sectors/track, 522 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System (第二顆硬碟是空的, 尚未分割磁區)
操作步驟
#安裝所需工具
yum -y install mkinitrd mdadm#將第一顆硬碟的磁碟分割表複製給第二顆硬碟
sfdisk -d /dev/sda | sfdisk /dev/sdbfdisk -l
Disk /dev/sda: 4294 MB, 4294967296 bytes 255 heads, 63 sectors/track, 522 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/sda1 * 1 456 3662788+ 83 Linux /dev/sda2 457 521 522112+ 82 Linux swap / Solaris Disk /dev/sdb: 4294 MB, 4294967296 bytes 255 heads, 63 sectors/track, 522 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/sdb1 * 1 456 3662788+ 83 Linux /dev/sdb2 457 521 522112+ 82 Linux swap / Solarisfdisk /dev/sdb
Command (m for help): t
Partition number (1-4): 1
Hex code (type L to list codes): fd
Changed system type of partition 1 to fd (Linux raid autodetect)Command (m for help): t
Partition number (1-4): 2
Hex code (type L to list codes): fd
Changed system type of partition 2 to fd (Linux raid autodetect)Command (m for help): w
#清除 RAID superblock
mdadm --zero-superblock /dev/sdb1
mdadm --zero-superblock /dev/sdb2#Fedora Core 6 預設只有 /dev/md0, 但我們有兩個 partition, 所以手動再建一個 md1
mknod /dev/md1 b 9 1#建立 RAID 1
mdadm --create /dev/md0 --level=1 --raid-disks=2 missing /dev/sdb1
mdadm --create /dev/md1 --level=1 --raid-disks=2 missing /dev/sdb2#查看 RAID 狀態: RAID 1 已經建立, 目前只有 /dev/sdb 掛入 ARRAY
cat /proc/mdstatPersonalities : [raid1] md1 : active raid1 sdb2[1] 522048 blocks [2/1] [_U] md0 : active raid1 sdb1[1] 3662720 blocks [2/1] [_U] unused devices: <none>#產生 RAID 設定檔
cp /usr/share/doc/mdadm-2.5.4/mdadm.conf-example /etc/mdadm.conf
mdadm --examine --scan >> /etc/mdadm.conf#格式化第二顆硬碟的磁區, 並將第二顆硬碟的 root ( / ) 掛載到 /mnt/md0
mkfs.ext3 /dev/md0
mkswap /dev/md1
mkdir /mnt/md0
mount /dev/md0 /mnt/md0#修改相關設定, 準備以第二顆硬碟 (/dev/md0) 開機
vi /etc/fstab
/dev/md0 / ext3 defaults 1 1 /dev/md1 swap swap defaults 0 0 vi /boot/grub/menu.lst
default=0 timeout=5 title Fedora Core (2.6.18-1.2798.fc6) root (hd1,0) kernel /boot/vmlinuz-2.6.18-1.2798.fc6 ro root=/dev/md0 initrd /boot/initrd-2.6.18-1.2798.fc6-raid.img#將 Software RAID Module 載入 initrd.img
mkinitrd --preload raid1 /boot/initrd-`uname -r`-raid.img `uname -r`#將第一顆硬碟裡的資料全數複製到第二顆硬碟
cp -ax / /mnt/md0#將 GRUB 寫入第二顆硬碟
grubgrub>root (hd1,0)
grub>setup (hd1)
grub>quitreboot
#將第一顆硬碟的 Partition Type 改為 Linux RAID
fdisk /dev/sdaCommand (m for help): t
Partition number (1-4): 1
Hex code (type L to list codes): fd
Changed system type of partition 1 to fd (Linux raid autodetect)Command (m for help): t
Partition number (1-4): 2
Hex code (type L to list codes): fd
Changed system type of partition 2 to fd (Linux raid autodetect)Command (m for help): w
#把第一顆硬碟的磁區加入 RAID
mdadm --add /dev/md1 /dev/sda2
mdadm --add /dev/md0 /dev/sda1#監看 RAID Recovery 的進度
watch cat /proc/mdstat完成後↓
Personalities : [raid1] md1 : active raid1 sda2[0] sdb2[1] 522048 blocks [2/2] [UU] md0 : active raid1 sda1[0] sdb1[1] 3662720 blocks [2/2] [UU] unused devices: <none>#修改 GRUB root device
#其實完成 RAID 1 後, 不管是 root (hd0,0) 還是 root (hd1,0) 都能開機, 但改成 hd0 較好, 因為若其中有一顆掛點, 只剩一顆硬碟開機的時候, 那顆硬碟就是 hd0 啦!
vi /boot/grub/menu.lstdefault=0 timeout=5 title Fedora Core (2.6.18-1.2798.fc6) root (hd0,0) kernel /boot/vmlinuz-2.6.18-1.2798.fc6 ro root=/dev/md0 initrd /boot/initrd-2.6.18-1.2798.fc6-raid.img
狀況測試
- 指令熱插拔:
mdadm --manage /dev/md0 --fail /dev/sdb1 --remove /dev/sdb1
mdadm --add /dev/md0 /dev/sdb1
watch cat /proc/mdstat 觀察 recovery 進度
- 摘除其中一顆硬碟, 開機後一樣可以正常運作
- 掛回剛剛摘除的硬碟, 開機後查看 /proc/mdstat, 把缺少的那顆再掛載進來:
例如: mdadm --add /dev/md0 /dev/sda1
掛載後, cat /proc/mdstat 可看到系統正在進行 recovery
- 摘除其中一顆硬碟, 以另一顆全新硬碟取代 (新硬碟當第二顆), 開機後執行:
sfdisk -d /dev/sda | sfdisk /dev/sdb
mdadm --add /dev/md1 /dev/sdb2
mdadm --add /dev/md0 /dev/sdb1
watch cat /proc/mdstat 靜候 recovery 作業完成
附錄: 取消 RAID 1, 回到最原始的單顆硬碟環境
#設定以第二顆硬碟開機
vi /boot/grub/menu.lstdefault=0 timeout=5 title Fedora Core (2.6.18-1.2798.fc6) root (hd1,0) kernel /boot/vmlinuz-2.6.18-1.2798.fc6 ro root=/dev/sdb1 initrd /boot/initrd-2.6.18-1.2798.fc6.img (不是 -raid 那個)vi /etc/fstab
/dev/sdb1 / ext3 defaults 1 1 /dev/sdb2 swap swap defaults 0 0 #刪除 Software RAID 設定檔
rm /etc/mdadm.conf#所有的 partition 都改回 83 (linux)、82 (swap)
fdisk /dev/sda && fdisk /dev/sdbreboot
#清除 RAID superblock
mdadm --zero-superblock /dev/sda1
mdadm --zero-superblock /dev/sda2mount /dev/sda1 /mnt
chroot /mnt
#改回以第一顆硬碟開機
vi /etc/fstab
/dev/sda1 / ext3 defaults 1 1 /dev/sda2 swap swap defaults 0 0 vi /boot/grub/menu.lst
default=0 timeout=5 title Fedora Core (2.6.18-1.2798.fc6) root (hd0,0) kernel /boot/vmlinuz-2.6.18-1.2798.fc6 ro root=/dev/sda1 initrd /boot/initrd-2.6.18-1.2798.fc6.imgexit
參考資料
Posted by Jamyy at 2007年12月07日 11:27
Trackback Pings
TrackBack URL for this entry:
http://cha.homeip.net/cgi-bin/mt/mt-tb.cgi/321
Comments
Jamyy偶像大大:
Linux中再難的專題對您來講都能迎刃而解,實在是越來越佩服您了,再次給您加油打氣與鼓勵哦^^
Posted by: aok at 2007年12月08日 20:58
aok 您好,
謝謝您的鼓勵 ^^
這都得感謝 HowToForge 那篇文章的詳細指引, 我才能依樣畫葫蘆 :P
Posted by: Jamyy at 2007年12月08日 23:21
Jamyy大大:
想請問一下,LVM 是不是也能做到RAID的效果?
因為我其實攪不太清楚他們的分別.
謝謝
Posted by: 千鈞 at 2007年12月10日 09:14
千鈞您好,
老實說我對 LVM 和 RAID 也不太熟 ^^'
剛剛在 Google 找到了這篇不錯的文章, 希望能對您有幫助:
Red Hat Enterprise Linux Documentation - 高階儲存技術
http://tinyurl.com/35lq8e
此外, 若要兼容 LVM 和 RAID 的優點, 從網路上幾篇文章看來, 都是建構 "LVM on top of RAID" (先建立 RAID, 再在 RAID 上建立 LVM)
ps. google 關鍵字: lvm raid
Posted by: Jamyy at 2007年12月10日 11:23
Jamyy大大您好,
謝謝你的資料
我會慢慢研習一下
p.s.你的回覆真快,感覺很親切^^
Posted by: 千鈞 at 2007年12月10日 12:23