SoftRaid



前言

在早期,要在Debian上建構Soft Raid是大工程,除了相關的的設定步驟繁雜,就連同系統的initrd/initramfs等都要自己進行更新,讓核心能在掛載/之前認得Soft Raid。還好新版的Debian已提供了較為友善的工具,所以這一部份的建構已比過往輕鬆許多。是故以下將以Soft Raid 1作為示範,如有謬誤請指正,感謝。

 

所需套件

# aptitude install mdadm

 

硬體配置

分割硬碟

我們假設系統上有兩顆硬碟/dev/sda、/dev/sdb,其中/dev/sda為原來的200 GB系統硬碟,/dev/sdb為全新250 GB的硬碟。由於Soft Raid可以針對partition做鏡像,所以我們將/dev/sdb每個分割區大小設定成和/dev/sda一樣,多的部份再獨立分割成額外的分割區,以達成配置Soft Raid的前置步驟。在這邊我們要將所有的分割區都做Soft Raid,包含根目錄:

 

# 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

 

 

# 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

 

 

# 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

 

 

 

# make.ext3 /dev/md0

# make.ext3 /dev/md1

# make.ext3 /dev/md2

# make.ext3 /dev/md3

# make.ext3 /dev/md4

 

 

# mkswap /dev/sdb7

 

 

/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

 

 

/dev/sda7 none swap sw,pri=1 0 0

/dev/sdb7 none swap sw,pri=1 0 0

 

 

kernel /boot/vmlinuz-2.6.17-2-686 root=/dev/md0 ro

 

 

# update-initramfs --priority=low mdadm

 

 

 

# mount /dev/md0 /mnt

# tar clf - -C / . | tar xpvf - -C /mnt

# umount /dev/md0

 

 

# grub-install /dev/sdb

 

 

# 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

 

重建損毀資料

 

 

  1. 先正常關機。
  2. 將/dev/sda的電源、排線拔除,剩下/dev/sdb。
  3. 開機,此時使用/dev/sdb獨立開機。
  4. 正常開機後,以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

 

  1. 關機。並換上新的硬碟。此時再用/dev/sdb開機。
  2. 一樣以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

 

  1. 最後別忘了將grub開機管理程式複製一份至/dev/sda的mbr:

 

# grub-install /dev/sda

 

#如此應可順利完成重建。

 

參考文件

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/