Linux Software Raid 系統轉移

現在硬碟價格愈來低, 但是穩定性也一直是為人所詬病的.
所以我目前系統大概是這樣做的

1) 新買的硬碟放不重要的資料, Offline Backup 資料
2) Item 1) 換下來的硬碟做 Raid 1 當作資料碟
3) Item 2) 換下來的硬碟做暫存碟
4) Item 3) 換下來的硬碟做其他電腦的系統碟
5) Item 4) 換下來的硬碟做動物碟和大量資料傳送碟

以這樣的更換頻率來看, Item 1) 和 Item 2) 是最常換的.
像是某 s 長輩搬東西都還要注意 md5 checksum 的問題, 不過我實在是沒有這麼多力氣去處理
所以都只是搬過去就好了.

如果只是 copy data, 那問題還算簡單, 但是 Linux Software Raid Copy 還是需要一些技巧.

我的 Raid 1 Disk 大概二到三年更換一次, 每次都需要查 Software Raid 相關的指令, 很大的機會還會連回到自己的 Blog, 乾脆這次記錄下來, 以後還可以用, 也可以給大家參考

我 Raid 1 系統比較喜歡在 Local 系統上 Copy, 這樣一來可以少掉 network 的 overhead, 也可以確定完整保留檔案的屬性, 是比較好的做法.

在 Copy 之前, 先簡單說一下步驟
1) 將舊的 Raid Disk 卸下來, 換上新的二顆硬碟上去
2) 拿舊的其中一顆裝上去.
3) 使用 Linux LiveCD 開機
4) 將新硬碟(一顆)設上 Raid
5) 將舊硬碟也設上 Raid
6) Copy 系統碟資料
7) 使用新 Raid 重新開機
8) Copy 資料碟資料
9) 卸下舊 Raid 硬碟
10) 將第二顆硬碟加入到 Raid Disk

其中硬體安裝步驟就省略了, 除非我有事業線美女還有大砲級的器材, 不過這二樣我都沒有.
只有小小工程師 (二年半前的照片再拿來 show 一下)
我是小小工程師

Linux LiveCD 的選擇

我這次是使用 Ubuntu 11.04 x86, 新的 Unity 介面看起來不錯, 但是我找不到 Terminal, 要用 Search 的才行, 不過這並不影響使用.
啟動之後主要是要連上網路. 這個就依照個人環境不同修改了.
這是 Static IP 的範例

# ifconfig eth0 211.21.1.1
# route add default gw 211.21.1.254
# echo "nameserver 168.95.1.1" > /etc/resolv.conf
# ping www.hinet.net

安裝 mdadm

因為接下來幾乎都是要在 root 下做, 懶得每次 sudo 的話
就直接切到 root 吧.

# sudo su -
# apt-get install mdadm

設定新硬碟的分割表, 這邊不多說, 用 cfdisk 應該就可以很順利的將二顆硬碟切成一樣的.

sfdisk copy partition

# sfdisk -d /dev/sda > sda.layout
# sfdisk /dev/sdb < sda.layout
&#91;/BASH&#93;

新硬碟是二顆 2T 的硬碟, 新的規劃是三個 partition , /var /tmp 呢.... 呃~  我懶嘛, / 切大一點就好了.
/dev/md1 (First Partition) : System Disk : 50G
/dev/md2 (Second Partition) : Data Disk : 1945G
/dev/md3 (Third Primary Partition) : Swap Disk : 5G
<h1>建立 md device node
一般來說, 以我的狀況 4 個就夠用了, 但是我原先的硬碟 /boot 和 / 是分開的, 所以我多建一個.
[BASH]
# mknod /dev/md0 b 9 0
# mknod /dev/md1 b 9 1
# mknod /dev/md2 b 9 2
# mknod /dev/md3 b 9 3
# mknod /dev/md4 b 9 4

將新的硬碟規劃成 Raid 1 Device

這邊要注意的是,
1) 新的硬碟在系統內是被抓成 /dev/sdb, 如果看倌要抄的話, 記得要改名.
2) –metadata=0.90 , 表示 Raid 格式用 0.90, 新的 mdadm 支援 1.0, 1.1, 1.2, 查到的資料是 grub 目前不支援 1.0 以上, lilo 看起來也不支援, mdadm 預設支援 1.2 . 有人有提到用 1.2 沒有辦法 auto-detect raid device. 所以這邊一定要停在 0.90. (我是 grub 認不到, 所以有重來過 Orz)
3) Missing : Raid 1 要二顆硬碟, 我這邊只用了一顆硬碟, 另一顆等到 Copy 完畢再做 Sync 即可. 這樣會比較快.

# modprobe raid1
# mdadm --create /dev/md1 -l 1 -n 2 --metadata=0.90 /dev/sdb1 missing
# mdadm --create /dev/md2 -l 1 -n 2 --metadata=0.90 /dev/sdb2 missing
# mdadm --create /dev/md3 -l 1 -n 2 --metadata=0.90 /dev/sdb3 missing

第一行要將 raid1 的 module load 進來, 不知道不執行可不可以, 我是都有執行.

Format Fisk , 這邊就隨你高興了, 不過系統碟建議用 ext3/ext4

# mkfs.ext3 /dev/md1
# mkfs.xfs -f /dev/md2
# mkswap /dev/md3

重建舊的 Raid 硬碟

為什麼只拿一顆硬碟就好, 那是因為舊硬碟是 Raid 1 呀, 所以重建也可以忽略掉另一顆, 這邊我每次都忘記怎麼做, 所以也是這次讓我寫這篇文章的原因.

# mdadm --assemble /dev/md0 /dev/sdc1 missing
# mdadm --assemble /dev/md4 /dev/sdc2 missing
# mdadm --run /dev/md0
# mdadm --run /dev/md4

指令很簡單, 才二行而己, 但是讓我搞很久 -_-!

mount 系統碟

這邊請依照你當時現場的狀況決定.

# mkdir -p /mnt/target
# mkdir -p /mnt/source
# mount /dev/md1 /mnt/target
# mount /dev/md4 /mnt/source
# mount /dev/md0 /mnt/source/boot

清除多餘空間

我的系統是 Gentoo, 在 Copy 之前, 可以先清除一些空間, 讓 Copy 更順暢
這邊的建議是
1) /tmp, /var/tmp : 有些舊系統不會清 /tmp, 和 /var/tmp, 在 copy 之前要清一下
2) 清除 Linux kernel object code
3) 清除 Portage, 這檔案很多又小, /usr/portage/distfiles 又很多 download file, 不必要, 清空
4) 清除 /usr/share/doc : 這個看個人, 我覺得可以清, 但是沒有清的項目.

assume root is /mnt/source
# rm -rf /tmp/*
# rm -rf /var/tmp/*
# cd /usr/src
# cd linux
# make mrproper
# cd /usr/portage
# rm -rf *
# cd /usr/share/doc
# rm -rf *

Copy System Data

# rsync -av /mnt/source/ /mnt/target/

先別休息呀, 還有別的活要幹, 別忘了 LiveCD 是 GUI 介面, Copy 的同時我們還有很多事情要做.
1) 修改 /etc/fstab
2) 安裝 Grub
3) 修改 /boot/grub/menu.lst (如果有需要的話)

# blkid /dev/md1
/dev/md1: UUID="11111111-2be8-4156-98d9-018e20da6dc1" SEC_TYPE="ext2" TYPE="ext3"
# blkid /dev/md2
/dev/md2: UUID="22222222-af0a-41de-a67e-72652a6e8521" TYPE="xfs"
# blkid /dev/md3
/dev/md3: UUID="33333333-e972-4d8f-9879-c58576ea0d03" TYPE="swap"
# vi /etc/fstab

記好 UUID, 準備修改 /etc/fstab, 以下是範例.

UUID=11111111-2be8-4156-98d9-018e20da6dc1       /       ext3    noatime 0 0
UUID=22222222-af0a-41de-a67e-72652a6e8521       /home   xfs defaults,noatime        0 0
UUID=33333333-e972-4d8f-9879-c58576ea0d03       none     swap            sw 0 0

安裝 Grub

當 Copy 的差不多的時候, 就可以準備安裝 Grub 了, 步驟是
1) 先 bind 系統上的 /proc /dev 到 目錄內
2) chroot 進去
3) 執行 grub

# cd /mnt/target
# mount --bind /proc proc
# mount --bind /dev dev
# cd ..
# chroot target
# grub
grub> root (hd1,0)
Filesystem type is ext2fs, partition type 0xfd
grub> root (hd1,1)

Filesystem type is xfs, partition type 0xfd

grub> setup (hd1)

grub 判斷 device 不一定很準確, 需要一些經驗.
不過大致上來說,
sda = hd0, sdb = hd1, sdc = hd2 是沒有錯的.
我也有碰過開完機之後是
sda = hd0, sdd = hd2, sdc = hd1
這樣的.

至於 grub.conf (menu.lst) 就跳過了

Copy 完就可以重開機了, 順利的話就和原來的系統差不多.
我自己是很順利, 沒有什麼問題.

新的系統上, raid 會自己抓到, 在我的系統是在 md126, md127, 之前進系統改過的 Raid 就是 md0 和 md4.
直接再 mount 上去再 rsync 一下.
以我而言, 資料碟大概都是數百 G 上下, 所以 rsync 指令一下, 我就跑去睡覺了.
以上的步驟大概要 2~4 Hours , 依照狀況能力的不同, 不過大概在下午六點左右開始轉換是最好的.

將第二顆硬碟加入 Raid

所有資料都 Copy 完了以後, 確定不會再重開機, 因為 sync 時中斷就要重來, 所以這個步驟大概會耗掉非常久的時間, 以 2T 的硬碟來說, 會超過 14Hours. 如果中間有大量存取會更慢.
這邊要注意的是, 加入的硬碟和 LiveCD 重開抓到的硬碟不同, 所以要用 dmesg | grep sd 看一下, 還有用 cat /proc/mdstat 看一下目前己經加入 Raid 的是那一顆 HDD.

mdadm --manage --add /dev/md1 /dev/sdc1
mdadm --manage --add /dev/md2 /dev/sdc2
mdadm --manage --add /dev/md3 /dev/sdc3

下完指令之後就可以看到在跑 sync 了

# cat /proc/mdstat
Personalities : [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md2 : active raid1 sdc2[2] sda2[0]
1899413056 blocks [2/1] [U_]
resync=DELAYED

md3 : active raid1 sdc3[2] sda3[0]
5269248 blocks [2/1] [U_]
resync=DELAYED

md1 : active raid1 sdc1[2] sda1[0]
48829440 blocks [2/1] [U_]
[==>..................]  recovery = 12.4% (6068736/48829440) finish=6.6min speed=107126K/sec

unused devices:

大功告成… 親一個~~

每次這樣備份都要花一天, 有沒有簡單一點的方法呢?
不要說買 Raid Box 二個, 直接 Copy 過去,  Raid Box 又貴又不一定穩定, 我之前買某一家的, 操一年就掛了, 維修的費用快可以買一台新. 所以我再也不想碰 Raid Box.

On this day..

Share and Enjoy:
  • Print
  • Facebook
  • Yahoo! Buzz
  • Twitter
  • Google Bookmarks
  • Plurk
Related Posts
  1. Using Google Chrome Google Chrome 13.0.761.0 on Windows Windows 7

    網路好的話雲存儲不錯的
    看了 文章受教了,有空自己也試試

  2. Using Mozilla Firefox Mozilla Firefox 4.0.1 on Windows Windows 7

    沒有問題, 只是系統 pending commit 而己.

  3. Debian Linux Software RAID 1 實作 - Tsung's Blog - pingback on 2015/12/16 at 9:59 下午

Leave a Comment


NOTE - You can use these HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Trackbacks and Pingbacks: