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 的任務,接下來重新開機就大功告成!
其他參考: