使用 dd 做系統轉移

最近的一次 case 中,有客戶的 Linux 發生了怪異現象,就是硬碟似乎變慢並且效能也不如之前,於是在考慮過後,決定更換一顆新的硬碟。

做系統備份的方法其實有很多,像是 tar、cp、cipo ... 等工具都是很好的備份工具,但是這次我選擇了 dd 工具來做兩顆硬碟之間的備份,也就是說把 hda 的資料全都放到 hdb 去,然後再做交換。

在實做的時候,我發現一個很有趣的現象,因為這台主機主要是用來放 source 專用的,雖然有做 RAID 1 mirror,但是整個 hda2 居然吃了 70GB 如此大的空間。後來,推測應該是在建立主機之初沒有把硬碟做適當的分割,所有的資料都放在同一個分割區裡,當然 source 是會長大的東西,所以日子一久就慢慢的吃掉了很多空間 ...

我來說明一下這次的環境吧:

/dev/hda1:150MB,/boot
/dev/hda2:150GB,/
/dev/hda3:其它,swap

嗯 ... 所以說,知道了吧!全部只有兩個分割區,若是使用 dd 來做系統轉移的話,若是有兩顆原本同型號、同容量的硬碟的的話當然是最好的,但是事實總是很殘忍的,要找到一模一模型號的硬碟可不是這麼容易的事,所以我當時決定使用一顆比目前還大的硬碟來做轉換對像,於是乎客戶就準備了一顆 200G 的硬碟來做轉換了。

我先把第二顆硬碟放上去,裝在 IDE1 的 slave,並且使用 Live CD 做開機,主要的目地就是確保在轉移過程沒有任何的資訊再寫入 /dev/hda 或 /dev/hdb。因為這次並不打算再做任何的其它分割,所以我就把新的 200 GB 硬碟分割為如下情況:

/dev/hdb1:170 MB,/boot
/dev/hdb2:170GB,/
/dev/hdb3:512 MB,swap
其餘空閒

OK,做好了分割之後,再來就是 format 啦!

root # mke2fs -j /dev/hdb1
root # mke2fs -j /dev/hdb2
root # mkswap /dev/hdb3

接下來就是重頭戲了,你可以很清楚的發現,我“故意”把每個分割區都切的比原本的還大,這是怕在 copy 的時候會發生容量不符的情況,所以才如此做,現在就準備來使複製的動作!

root # dd if=/dev/hda1 of=/dev/hdb1
root # dd if=/dev/hda2 of=/dev/hdb2

好了,小弟現在很認真的說,在 copy /dev/hda2 的時候,我一共等了快要四個小時,所以以後千萬要記得做好系統規劃,不然會等到死!

當完成了複製之後,要記得做系統 scan,而且是必做喔,因為等一下我們要修正磁碟容量:

root # e2ckfs -f /dev/hdb1
root # e2ckfs -f /dev/hdb2

一樣的,在掃描 /dev/hdb2 的時候又是一長串時間 ...

當等待的時間過去之後,我們就可以來做磁碟容量調整了:

root # resize2fs /dev/hdb1
root # resize2fs /dev/hdb2

好了,各位觀眾,這時已經做好系統移轉,但是有一個問題,就是這新的硬碟會無法開機,所以就必需安裝 GRUB Loader 才行。

要重新安裝 GRUB 有很多方法,小弟我是這麼做的:

關掉電腦,把退役的 160 G 硬碟拿下來,並且把新的 200 G 硬碟 jump 調成 master,裝到電腦裡去;使用 RedHat 光碟開機,並以 rescue mode 進入:

boot: linux rescue

進入系統之後,重新 chroot 系統:

root # chroot /mnt/sysimage
root # grub-install /dev/hda

如此就完成安裝 GRUB 的任務,接下來重新開機就大功告成!

09/04/2005

首頁