最近硬碟掛了不少顆, 決定新電腦先做 Raid 1 後再上, 至少可以降低一些資料的損失風險.
主要參考此篇文章: How To Set Up Software RAID1 On A Running System (Incl. GRUB Configuration) (Debian Etch) – 此篇非常完整, 直接參考此篇即可安裝完成
只要照這篇文章做, 就可以完成, 所以在這邊只簡單紀錄步驟, 詳細的可回原文去看.
註1: Raid 1 需準備兩顆硬碟. (sda, sdb)
註2: 此篇文章的操作, 建議都直接轉換成 root 來執行.
RAID 1 設定步驟
安裝 mdadm、initramfs-tools
同步 sda、sdb 磁碟分割
建立 RAID Array(md0, md1…)
格式化 md0, md1 …
Mount 檔案系統(md0, md1…)
將 sda 資料 cp 到 sdb (md0, md1…)
使用 sdb 開機
將 sda 加入 md0, md1.. 並同步.
取消由 sdb 開機的選項
測試
硬體資訊
1T 的硬碟(sda), 做下述的切割: (1T 的 sdb 完全不動)
$ fdisk -l /dev/sda
/dev/sda1 * 1 24 192748+ 83 Linux
/dev/sda2 25 7319 58597087+ 83 Linux
/dev/sda3 7320 12182 39062047+ 83 Linux
/dev/sda4 12183 121601 878908117+ 5 Extended
/dev/sda5 12183 121479 877928121 83 Linux
/dev/sda6 121480 121601 979933+ 82 Linux swap / Solaris
$ df -h
/dev/sda5 825G 730M 782G 1% /
/dev/sda1 183M 23M 151M 13% /boot
/dev/sda2 56G 180M 53G 1% /home
/dev/sda3 37G 508M 35G 2% /var
安裝 mdadm、initramfs-tools
$ apt-get install mdadm initramfs-tools
$ reboot
同步 sda、sdb 磁碟分割
$ cat /proc/mdstat # 看目前有哪些磁區是建置 RAID 環境的
$ sfdisk -d /dev/sda | sfdisk /dev/sdb # 將 sda 的磁碟分割表 複製 給 sdb
$ fdisk -l # sda, sdb 就都長一樣了
修改 sdb 的檔案系統格式
$ fdisk /dev/sdb # 修改 fdisk file system type
t
1 # 1 … n (這邊是 1 ~ 6, 分別跑 6次, 失敗的不要理它)(有幾個就分別輸入幾次)
fd # file system type = Linux raid autodetect
w
$ fdisk -l /dev/sdb
/dev/sdb1 * 1 24 192748+ fd Linux raid autodetect
/dev/sdb2 25 7319 58597087+ fd Linux raid autodetect
/dev/sdb3 7320 12182 39062047+ fd Linux raid autodetect
/dev/sdb4 12183 121601 878908117+ 5 Extended
/dev/sdb5 12183 121479 877928121 fd Linux raid autodetect
/dev/sdb6 121480 121601 979933+ fd Linux raid autodetect
清除 RAID 的 superblock
$ mdadm –zero-superblock /dev/sdb1 # 有錯誤也不用管它
$ mdadm –zero-superblock /dev/sdb2
$ mdadm –zero-superblock /dev/sdb3
$ mdadm –zero-superblock /dev/sdb4
$ mdadm –zero-superblock /dev/sdb5
$ mdadm –zero-superblock /dev/sdb6
建立 RAID Array(md0, md1…)
$ mdadm –create /dev/md0 –level=1 –raid-disks=2 missing /dev/sdb1
$ mdadm –create /dev/md1 –level=1 –raid-disks=2 missing /dev/sdb2
$ mdadm –create /dev/md2 –level=1 –raid-disks=2 missing /dev/sdb3
$ mdadm –create /dev/md3 –level=1 –raid-disks=2 missing /dev/sdb5
$ mdadm –create /dev/md4 –level=1 –raid-disks=2 missing /dev/sdb6
# 參數說明
# missing: 忽略, /dev/sda 上面有系統, 若不使用 missing, 則原有的系統會被重建, 造成系統損毀.
# –create: 建立 RAID 的選項
# –raid-devices=N: 使用幾個磁碟 (partition) 作為磁碟陣列的裝置
# –level=[015]: 設定這組磁碟陣列的等級, 支援很多, 不過建議只要用 0, 1, 5 即可
# –detail: 後面接的磁碟陣列裝置的詳細資訊
$ cat /proc/mdstat
md4 : active raid1 sda6[0] sdb6[1]
979840 blocks [2/1] [_U]
md3 : active raid1 sda5[2] sdb5[1]
877928000 blocks [2/1] [_U]
md2 : active raid1 sda3[0] sdb3[1]
39061952 blocks [2/1] [_U]
md1 : active raid1 sda2[0] sdb2[1]
58596992 blocks [2/1] [_U]
md0 : active raid1 sda1[0] sdb1[1]
192640 blocks [2/1] [_U]
格式化 md0, md1 …
$ mkfs.ext3 /dev/md0
$ mkfs.ext3 /dev/md1
$ mkfs.ext3 /dev/md2
$ mkfs.ext3 /dev/md3
$ mkswap /dev/md4
備份 mdadm.conf
$ cp /etc/mdadm/mdadm.conf /etc/mdadm/mdadm.conf_orig
$ mdadm –examine –scan >> /etc/mdadm/mdadm.conf # 將目前 RAID 資料寫入 conf 檔
Mount 檔案系統(md0, md1…)
$ mkdir /mnt/md0 /mnt/md1 /mnt/md2 /mnt/md3
$ mount /dev/md0 /mnt/md0
$ mount /dev/md1 /mnt/md1
$ mount /dev/md2 /mnt/md2
$ mount /dev/md3 /mnt/md3
$ vi /etc/fstab # 將 /dev/sdb1 修改成 /dev/md0, 如下述:
/dev/md3 / ext3 errors=remount-ro 0 1
/dev/md0 /boot ext3 defaults 0 2
/dev/md1 /home ext3 defaults 0 2
/dev/md2 /var ext3 defaults 0 2
/dev/md4 none swap sw 0 0
將 sda 資料 cp 到 sdb (md0, md1…)
$ cp -dpRx / /mnt/md2
$ cd /boot; cp -dpRx . /mnt/md3
$ cd /home; cp -dpRx . /mnt/md1
$ cd /var; cp -dpRx . /mnt/md2
使用 sdb 開機
$ vi /boot/grub/menu.lst # 於 default 0 後面加入一行 fallback 1, 如下述:
default 0
fallback 1
$ vi /boot/grub/menu.lst # 增加 RAID 開機選項, 將原本 /dev/sda5(根目錄), 改成對應的 /dev/md3
title Debian GNU/Linux, kernel 2.6.26-2-amd64 RAID
root (hd0,0)
kernel /vmlinuz-2.6.26-2-amd64 root=/dev/md3 ro quiet
initrd /initrd.img-2.6.26-2-amd64
$ update-initramfs -u # 重新建立 initrd.img
$ grub # 設定 Grub 使用 sdb 開機
root (hd0,0)
setup (hd0)
root (hd1,0)
setup (hd1)
$ quit
$ reboot
將 sda 加入 md0, md1.. 並同步.
$ df -h # 確定重開機後, 由 md0, md1… 開機.
/dev/md3 825G 730M 782G 1% /
/dev/md0 183M 24M 150M 14% /boot
/dev/md1 56G 180M 53G 1% /home
/dev/md2 37G 508M 35G 2% /var
$ cat /proc/mdstat # 應該會看到跟 md0, md1 … md4
$ fdisk /dev/sda # 修改 sda 檔案系統格式
t
1 # 1 … n (這邊是 1 ~ 6, 分別跑 6次, 失敗的不要理它)(有幾個就分別輸入幾次)
fd # file system type = Linux raid autodetect
w
$ fdisk -l /dev/sdb
/dev/sda1 * 1 24 192748+ fd Linux raid autodetect
/dev/sda2 25 7319 58597087+ fd Linux raid autodetect
/dev/sda3 7320 12182 39062047+ fd Linux raid autodetect
/dev/sda4 12183 121601 878908117+ 5 Extended
/dev/sda5 12183 121479 877928121 fd Linux raid autodetect
/dev/sda6 121480 121601 979933+ fd Linux raid autodetect
將 sda 加入 md0, md1 ..
$ mdadm –add /dev/md0 /dev/sda1
$ mdadm –add /dev/md1 /dev/sda2
$ mdadm –add /dev/md2 /dev/sda3
$ mdadm –add /dev/md3 /dev/sda5
$ mdadm –add /dev/md4 /dev/sda6
加入完成後, 會自動開始同步
$ cat /proc/mdstat
md4 : active raid1 sda6[0] sdb6[1]
979840 blocks [2/2] [UU]
md3 : active raid1 sda5[2] sdb5[1]
877928000 blocks [2/1] [_U]
[======>…………..] recovery = 33.9% (298143360/877928000) finish=150.9min speed=64022K/sec
md2 : active raid1 sda3[0] sdb3[1]
39061952 blocks [2/2] [UU]
md1 : active raid1 sda2[0] sdb2[1]
58596992 blocks [2/2] [UU]
md0 : active raid1 sda1[0] sdb1[1]
192640 blocks [2/2] [UU]
$ watch cat /proc/mdstat # 使用 watch 監控是否 sync 完畢
設定 mdadm.conf
此要等上個步驟 sync 完畢後做.
$ cp /etc/mdadm/mdadm.conf_orig /etc/mdadm/mdadm.conf
$ mdadm –examine –scan >> /etc/mdadm/mdadm.conf
取消預設 sdb 開機的選項 並 增加 RAID 開機選項
$ vi /boot/grub/menu.lst # 增加下述, 並將 /dev/sda5 的開機選項 都註解掉.
title Debian GNU/Linux, kernel 2.6.26-2-amd64 RAID (sda)
root (hd0,0)
kernel /vmlinuz-2.6.26-2-amd64 root=/dev/md3 ro quiet
initrd /initrd.img-2.6.26-2-amd64
title Debian GNU/Linux, kernel 2.6.26-2-amd64 RAID (sdb)
root (hd1,0)
kernel /vmlinuz-2.6.26-2-amd64 root=/dev/md3 ro quiet
initrd /initrd.img-2.6.26-2-amd64
$ update-initramfs -u
$ reboot
測試
移除 sdb
$ mdadm –manage /dev/md0 –fail /dev/sdb1
$ mdadm –manage /dev/md1 –fail /dev/sdb2
$ mdadm –manage /dev/md2 –fail /dev/sdb3
$ mdadm –manage /dev/md3 –fail /dev/sdb5
$ mdadm –manage /dev/md4 –fail /dev/sdb6
$ mdadm –manage /dev/md0 –remove /dev/sdb1
$ mdadm –manage /dev/md1 –remove /dev/sdb2
$ mdadm –manage /dev/md2 –remove /dev/sdb3
$ mdadm –manage /dev/md3 –remove /dev/sdb5
$ mdadm –manage /dev/md4 –remove /dev/sdb6
$ shutdown -h now # 將硬碟拔除重開, 然後換上新硬碟
將新的 sdb 同步 RAID 1
$ cat /proc/mdstat # 會看到只有一顆硬碟的狀況.
$ sfdisk -d /dev/sda | sfdisk /dev/sdb # 或 sfdisk -d /dev/sda | sfdisk –force /dev/sdb
$ mdadm –zero-superblock /dev/sdb1
$ mdadm –zero-superblock /dev/sdb2
$ mdadm –zero-superblock /dev/sdb3
$ mdadm –zero-superblock /dev/sdb4
$ mdadm –zero-superblock /dev/sdb5
$ mdadm –zero-superblock /dev/sdb6
# 增加並同步
$ mdadm -a /dev/md0 /dev/sdb1
$ mdadm -a /dev/md1 /dev/sdb2
$ mdadm -a /dev/md2 /dev/sdb3
$ mdadm -a /dev/md3 /dev/sdb5
$ mdadm -a /dev/md4 /dev/sdb6
$ cat /proc/mdstat # 就會看到開始同步了.
同步完成後更新 Grub 開機
$ grub
root (hd0,0)
setup (hd0)
root (hd1,0)
setup (hd1)
$ quit