CentOS Harddisk Copy Using Command dd

在 linux 下完整複製硬碟,先要了解整個硬碟的編號及分割磁區的狀況:

# mount

//看掛載的磁區。

/dev/mapper/VolGroup00-LogVol00 on / type ext3 (rw)

proc on /proc type proc (rw)

sysfs on /sys type sysfs (rw)

devpts on /dev/pts type devpts (rw,gid=5,mode=620)

/dev/hdc1 on /boot type ext3 (rw)

tmpfs on /dev/shm type tmpfs (rw)

none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)

sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)

# df -h

//看掛載點。

檔案系統              容量  已用 可用 已用% 掛載點

/dev/mapper/VolGroup00-LogVol00

                      573G  3.9G  539G   1% /

/dev/hdc1              99M   25M   70M  26% /boot

tmpfs                 2.0G     0  2.0G   0% /dev/shm

# df -a

檔案系統               1K-區段      已用     可用 已用% 掛載點

/dev/mapper/VolGroup00-LogVol00

                     599949728   4006040 564976292   1% /

proc                         0         0         0   -  /proc

sysfs                        0         0         0   -  /sys

devpts                       0         0         0   -  /dev/pts

/dev/hdc1               101086     24747     71120  26% /boot

tmpfs                  2074944         0   2074944   0% /dev/shm

none                         0         0         0   -  /proc/sys/fs/binfmt_misc

sunrpc                       0         0         0   -  /var/lib/nfs/rpc_pipefs

# fdisk -l

//看硬碟及其分割區,下面的 LVM 就是對應到上面 df 指令下看到的 VolGroup00-LogVol00

Disk /dev/hdc: 640.1 GB, 640135028736 bytes

255 heads, 63 sectors/track, 77825 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System

/dev/hdc1   *           1          13      104391   83  Linux

/dev/hdc2              14       77825   625024890   8e  Linux LVM

# cd /dev/mapper/

# ls -la

drwxr-xr-x  2 root root     100  6月 27 14:00 .

drwxr-xr-x 11 root root    3960  6月 27 14:01 ..

crw-------  1 root root  10, 63  6月 27 14:00 control

brw-rw----  1 root disk 253,  0  6月 27 14:00 VolGroup00-LogVol00

brw-rw----  1 root disk 253,  1  6月 27 14:00 VolGroup00-LogVol01

# cd /dev/

# ls -la

//會看到 hda 有一些 cdrom 或 dvd 設定的相關字樣。

故得知:

hda = cdrom (dvd, dvdrom)

hdc = hdc1 (/boot) + hdc2 (LVM or /dev/mapper/VolGroup00-LogVol00 or /)

拆機裝一樣的硬碟,再看看有無改變:

# fdisk -l

這次比上面多了一顆 /dev/hdb 的硬碟裝置。

於是知道了新的硬碟編號為 hdb。且舊的為 hdc, hdc 還分為兩個 partitions,一掛載 /boot ,另一掛載 /。再來以 dd 指令完整 sector by sector 複製硬碟:

# dd if=/dev/hdc of=/dev/hdb

等待一下就可以複製成功。

也可以用 livecd 開機,然後再下 dd 指令。據說 ghost 也可以達到此功能,但我還沒試。

參考以下:

* http://www.l-penguin.idv.tw/article/dd-sys-backup.htm

使用 dd 做系統轉移 (原文連結:http://www.l-penguin.idv.tw/article/dd-sys-backup.htm )

最近的一次 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 的任務,接下來重新開機就大功告成!

其他參考: