2010年9月18日

手動複製ubuntu Linux

複製硬碟由小到大簡單, 由大到小比較難, 我就遇到這種問題.
兩家2G的卡片, 就有不同的大小.

這是第一個CF的大小
Disk /dev/sda: 2079 MB, 2079866880 bytes
這是第二個的
Disk /dev/sdb: 2029 MB, 2029805568 bytes

這是partition的layout
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 3756031 1876992 83 Linux
/dev/sda2 3758078 4061183 151553 5 Extended
/dev/sda5 3758080 4061183 151552 82 Linux swap / Solaris

在較小的CF卡上, 我決定將後面的swap放棄掉. Linux的partition不變.


1. 我先備份bootloader(Grub)
$dd if=/dev/sda of=MBR-backup bs=446 count=1
我不備份到512bytes的原因, 是因為不想備份到partition table.
參考這篇文章: http://embraceubuntu.com/2005/10/20/backing-up-the-mbr/

2. 按照之前sda所得到的partition table, 用fdisk設定到sdb上, 只有swap的partition變小.
並將之格式化.
# mkfs.ext2 /dev/sdb1
swap 因為要設定UUID, 所以待會再做
再把bootloader 還原回去
$ dd if=MBR-backup of=/dev/sdb

3. 將/dev/sdb1 mount 到/mnt上, 用rsync備份根目錄下的資料到/mnt下

# mount /dev/sdb1 /mnt
# cd /
因為mnt, proc, sys的目錄都是虛擬的檔案系統, 所以不用copy
# rsync -a --exclude=mnt --exclude=proc --exclude=sys * /mnt/
# sync

4. 最後, 需要修改硬碟磁區的UUID及udev網卡的rule
因為ubuntu 用UUID來區別partition, 因此需要根據原本的/etc/fstab所記載的UUID來修改.
# tune2fs -U b39b9f26-ebfa-470b-a68a-30dbcc0e7a13 /dev/sdb1
參考網址如下:
http://wiki.linux.org.hk/w/Manage_filesystem_with_UUID
swap的UUID需在mkswap就指定
# mkswap -U 592b51dd-5e1e-440f-9017-f200e7bf078c /dev/sdb5

由於要使用新的CF卡的是另一台相同硬體的電腦, 因此網卡的mac是不同的, 而ubuntu的網卡命名方式又是由mac address來決定
網卡的名稱是由udev的70-persistent-net.rules
修改 /etc/udev/rules.d/70-persistent-net.rules
將mac address改為新硬體網卡的 mac就可以了

註: 我不直接改新CF卡上的/etc/fstab裡的UUID是有原因的; 如果直接將新CF卡裡的/etc/fstab內的根目錄及swap改成新卡上的UUID, 開機時仍會找不到舊的UUID, 我猜想initrd裡是不是也有記錄同樣的fstab. 為了怕麻煩, 直接將新CF卡上的UUID改成跟以前一樣比較快.

沒有留言:

coap-client 4.3.0 Windows build

coap-client  is a  wget -like tool to generate simple requests for retrieval and modification of resources on a remote server.  Got the sour...