2012年3月22日 星期四

Linux 技術研討:如何將大容量硬碟還原到小容量硬碟中


作者:Baron. Wan
相關備份硬碟資訊請參閱 [硬碟備份 Disk to Image]

1. 檢查原先備份的 partition 內容,並依此分割。
    disk.info
    ------------
    > /
    > /boot
    > /var

    used.info
    ------------
    2799608
    44997
    10037036

    create_dir.info
    -------------------
    /proc /sys /tmp /media /mnt

    # fdisk /dev/sda
    分割 /boot, /, /var and swap, 依原備份內容, 設定 /boot 為 active boot
    切割大小只要比實際上使用再大一些即可。
    以上所述:
    /boot 100M
    / 4G
    /var 10G
    # mkfs.ext3 -U <原先的UUID值> /dev/sda1
    # mkfs.ext3 -U <原先的UUID值> /dev/sda2
    # mkfs.ext3 -U <原先的UUID值> /dev/sda3
    # mkswap -U <原先的UUID值>  /dev/sda5

重新開機

2. # mkdir -p /SC_xxxxxxxx_img/{tmp, rootfilesystem,boot,var}

    將之前經由 mksquashfs image 的存放路徑掛載上來:
    # mount -t cifs -o rw //10.100.100.1/SC_xxxxxxxx_img /SC_xxxxxxxx_img

    [註] 之前已利用 mksquashfs {/, /boot, /var} 各作成 image 檔。

    # mount /dev/sda1 /mnt/boot
    # mount /dev/sda2 /mnt/rootfilesystem
    # mount /dev/sda3 /mnt/var
    # cd /mnt/boot
    # unsquashfs /SC_xxxxxxxx_img/boot.img

    root-filesystem.img 是 (/) root-filesystem:
    # cd /mnt/rootfilesystem
    # unsquashfs /SC_xxxxxxxx_img/root-filesystem.img

    對 /mnt/boot 以及 /mnt/rootfilesystem 做以下兩行:
    # mv squashfs-root/* .
    # rm -rf squashfs-root/

    /mnt/rootfilesystem 在上述兩行執行完畢後, create 以下幾個 folder:
    boot, var, proc, sys, tmp, media, mnt

    並將目錄權限添加上:
    chmod 1777 /mnt/rootfilesystem/tmp
    chmod 555 /mnt/rootfilesystem/boot

    # umount /mnt/boot
    # mount /dev/sda1 /mnt/rootfilesystem/boot
    以上將正確的 boot folder 掛載到 root-filesystem 中的 /boot 位置
    ------------------------------------------------------------
    var.img 是 /var 的 image 檔:
    # cd /mnt/var
    # unsquashfs /SC_xxxxxxxx_img/var.img
    # mv squashfs-root/* .
    # rm -rf squashfs-root/
    # cd ..
    # umount /mnt/var
    # mount /dev/sda3 /mnt/rootfilesystem/var

『註1』經測試,可先一次掛載到 root-filesystem 後,再將 image 檔一次還原至該處。
因此 image 檔只需要一個。

『註2』 unsquashfs 後來經測試可用:
 unsquashfs -d /mnt/rootfilesystem -f /backup/root-filesystem.img

3. # blkid (會顯示各個 partition 的 UUID, 或是經由 /dev/disk/by-uuid/ 處也可查詢)
    # chroot /mnt/rootfilesystem
    然後將相對的 UUID 值填入 /etc/fstab 及 /boot/grub/menu.lst

『註3』或者在格式化時,使用 -U 直接採用對應於原先的 partition 的UUID,這樣可以節省後續又要修改/調整 一些檔案所造成的困擾。

4. 調整 /mnt/rootfilesystem/etc/fstab 內,以符合當前 partition 規劃。
** 由於事關原先系統 MBR 內的磁碟切割資訊,因此必須與原 partition 規劃一致。
** /boot/grub/stage1 即為 MBR (hd0) 資訊,stage2 是 boot sector (hd0,0)。

5. check 是否可 chroot /mnt/rootfilesystem/,若可則 chroot
6. grub-install /dev/sda
[參考 http://linux.vbird.org/linux_basic/0510osloader.php#grub_install]

『註4』可直接採用第七點的操作方式進行 mbr 及 boot sector 的安裝工程。

7. 確定 grub 是否有安裝在 mbr 上。
    cat /boot/grub/menu.lst 先 check root 位置。
    grub
           > root (hd0,0)
           > find /grub/stage1 or
           > find /vmlinuz-版本號
           若為 hd0 則:
           > setup (hd0) 同時 check 內容是否有誤! # 安裝到 MBR
       > setup (hd0,0)  # 安裝到 boot sector
     完成後 quit

     最後,先退出 chroot,然後依次 umount /mnt/rootfilesystem/{var, boot},之後再 umount /mnt/rootfilesystem,然後就可以重新開機了。

8. 重新開機後,顯示出了 grub menu 畫面,但出現 error 15: file not found. ?!
Ans: 表示你製作的 filesystem 及 partition 與原先的不同。

9. 成功進入桌面時,發現一件事:由於網卡是之前的 MAC address,因此需要重新調整。兩個方法可以確認當前主機的網卡MAC address:
     # dmesg|grep eth  or 到 /etc/rules.d/70-persistent-net.rules 查詢系統抓到的對應 MAC address。然後我們可以到 /etc/sysconfig/network-scripts/ 來作變更。


完成。

沒有留言: