2018年12月18日 星期二

複製 CentOS 5 系統

老掉牙的系統,但為了讓系統繼續撐著,要想辦法轉成 VM。可以使用 Vmware 的 Converter 程式來將實體機轉成 VM。不幸的是,並非總是能成功的使用 Converter 來轉成 VM,我要轉的系統即是此種不成功的例子。既然如此,就藉此機會來練功一下,學習如何手動移轉 Linux 系統,不用重新安裝。

備份檔案

要複製系統的硬碟,視自己的狀況,可以直接接上電腦,也可以用 USB 界面連接。
首先,依據原系統的規劃及使用狀況,在新的硬碟上,建立分割區。由於 CentOS 5 的 bootloader 使用 GNU GRUB 0.97,硬碟的 partition table 只能用 MBR ,不能使用 GPT。

我所用的硬碟分割規劃如下
檔案系統              容量  已用 可用 已用% 掛載點
/dev/sda3            23G   16G  6.3G  72% /
/dev/sda5            19G  6.9G   11G  40% /home
/dev/sda1           243M   26M  205M  12% /boot
/dev/sda6           244G  170G   62G  74% /opt
然後,依次複製每個分割區的檔案,其中 -xdev 的選項,是只讀取該分割區的檔案。
mount /dev/sda1 /mnt/hdd
cd /boot
find ./ -xdev -print0 | cpio -pa0V /mnt/hdd

mmount /dev/sda3 /mnt/hdd
cd /
find ./ -xdev -print0 | cpio -pa0V /mnt/hdd

mount /dev/sda5 /mnt/hdd
cd /home
find ./ -xdev -print0 | cpio -pa0V /mnt/hdd
針對要複製的目錄,重複執行上述步驟。

重建 initrd

要下載 CentOS 5.x 的 ISO 來執行 linux rescue
重建 initrd 才行
mkdir /mnt/sysimage
mount /dev/sda3 /mnt/sysimage

mount --bind /proc /mnt/sysimage/proc
mount --bind /dev /mnt/sysimage/dev
mount --bind /sys /mnt/sysimage/sys
chroot /mnt/sysimage

mount /dev/sda1 /boot
cp -p /boot/initrd-$(uname -r).img /boot/initrd-$(uname -r).img.bak
mkinitrd -f -v /boot/initrd-2.6.18-371.el5.img 2.6.18-371.el5
用不同版本的 CentOS 或其他的 Linux OS 所建立的 initrd,在開機時,會出現錯誤。下圖是使用原來的 initrd 所出現的錯誤,無法找到 swap 分割區。

設定 grub

執行及進入 grub 後
grub> root (hd0,0)
grub> setup (hd0)
修改 grub.conf,重新開機。
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.18-400.1.1.el5)
    root (hd0,0)
    kernel /vmlinuz-2.6.18-400.1.1.el5 ro root=UUID=bfe28135-6004-4078-ae40-14dbbf727354 rhgb quiet
    initrd /initrd-2.6.18-400.1.1.el5.img
title CentOS (2.6.18-92.el5)
    root (hd0,0)
    kernel /vmlinuz-2.6.18-92.el5 ro root=LABEL=/ rhgb quiet
    initrd /initrd-2.6.18-92.el5.img
在 grub 中,硬碟編號由 hd0 開始。root 是設定系統的分割區,可以用 root=/dev/sda3,也可以用 label 或 uuid。用 /dev/sda3 來指定,當接線改變,或硬碟編號改變,會有找不到 root device 的困擾,用 uuid 則可確保找到正確的分割區。使用指令 blkid,可以列出分割區的 uuid。


沒有留言:

張貼留言

網誌存檔