本來對 Linux 來說複制系統也就是 cp -a 而己,先前也這樣複制了 2-3 次 Gentoo 吧。可這次 Arch 真的花了我不少時間… 覺得有必要記一下!
先來個介紹,來源是 40G 的硬碟,分區很簡單:
/dev/sde1 /boot
/dev/sde2 swap
/dev/sde3 /
目標的 mdadm/lvm2 系統:
/dev/md0 /boot (/dev/sda1 & /dev/sdb1, ext2)
/dev/md1 / (/dev/sda2 & /dev/sdb2, ext3)
/dev/md2 lvm2 (/dev/sda4 & /dev/sdb4 & /dev/sdd4)
/dev/mapper/vg0-home /home
/dev/mapper/vg0-opt /opt
/dev/mapper/vg0-tmp /tmp
/dev/mapper/vg0-usr /usr
/dev/mapper/vg0-var /var
1. 首先進入 offline 模式
複制 Linux 最好還是在 offline 模式下,這樣便不用特別處理 /dev, /proc, /sys 等掛載點。我使用的是 DFS 的 LiveCD,其實什么版本都沒關係,只要是支援 mdadm/lvm2 的。由於 DFS 未有跟 Arch Linux 一樣使用新的 libata,ide 裝置是 /dev/hda... 這樣表示的,既然 libata 是個趨勢,為了將來覆閱時省工夫,下面我 "人工" 將這些裝置轉化成了 /dev/sda... 跟Arch Linux 一致。
2. 準備新的 Arch 目錄架構
進入 LiveCD 環境后,以 newarch 為新系統的掛載點並建立所需的目錄架構:
# mkdir -p /mnt/newarch
# mount /dev/md1 /mnt/newarch
# mkdir -p /mnt/newarch/boot
# mkdir -p /mnt/newarch/home
# mkdir -p /mnt/newarch/opt
# mkdir -p /mnt/newarch/tmp
# mkdir -p /mnt/newarch/usr
# mkdir -p /mnt/newarch/var
3. 然后掛載上相應的分區 (省略 mdadm/lvm2 的建立過程):
# mount /dev/md0 /mnt/newarch/boot
# mount /dev/mapper/vg0-home /mnt/newarch/home
# mount /dev/mapper/vg0-opt /mnt/newarch/opt
# mount /dev/mapper/vg0-tmp /mnt/newarch/tmp
# mount /dev/mapper/vg0-usr /mnt/newarch/usr
# mount /dev/mapper/vg0-var /mnt/newarch/var
4. 掛載原有 40G 硬碟裡的 Arch:
# mkdir -p /mnt/oldarch
# mount /dev/sde3 /mnt/oldarch
# mount /dev/sde1 /mnt/oldarch/boot
5. 開始複制
# cp -av /mnt/oldarch /mnt/newarch
6. 設定檔的配置
一陣不長不短的等待后,複制完成,接著是按官方 wiki 的指示做好 mdadm/lvm2 相應的設定。留意這裡講的是相對於 newarch 目標系統的路徑,如 /etc/rc.conf 在 LiveCD 下實為 /mnt/newarch/etc/rc.conf。
/etc/rc.conf
USELVM="yes"
/etc/mkinitcpio.conf
MODULES="ata_generic ata_piix raid1 raid456 reiserfs"
HOOKS="base udev autodetect pata scsi sata raid keymap lvm2 filesystems"
md=0,/dev/sda1,/dev/sdb1
md=1,/dev/sda2,/dev/sdb2
md=2,/dev/sda4,/dev/sdb4,/dev/sdd4
/boot/grub/menu.lst
default 0
timeout 5
fallback 1
title Arch Linux
root (hd0,0)
kernel /vmlinuz26 root=/dev/md1 ro md=1,/dev/sdc3,/dev/sdd3
initrd /kernel26.img
/etc/fstab
#
# /etc/fstab: static file system information
#
none /dev/pts devpts defaults 0 0
none /dev/shm tmpfs defaults 0 0
/dev/cdrom /mnt/cdrom iso9660 ro,user,noauto,unhide 0 0
/dev/dvd /mnt/dvd udf ro,user,noauto,unhide 0 0
/dev/md0 /boot ext2 noatime 1 2
/dev/md1 / reiserfs noatime 0 1
/dev/sdb2 none swap sw,pri=1 0 0
/dev/sdd2 none swap sw,pri=1 0 0
/dev/sda2 none swap sw,pri=1 0 0
/dev/vg0/home /home reiserfs noatime 0 1
/dev/vg0/opt /opt reiserfs noatime 0 1
/dev/vg0/tmp /tmp reiserfs noatime 0 1
/dev/vg0/usr /usr reiserfs noatime 0 1
/dev/vg0/var /var reiserfs noatime 0 1
7. 進入 chroot 環境下
以下的指令需在 chroot 環境下執行,所以得先 chroot。
# mount -o bind /dev /mnt/newarch/dev
# mount -t proc none /mnt/newarch/proc
為保證執行 grub-install 時不出錯還要多做以下一步:
# grep -v rootfs /proc/mounts > /mnt/newarch/etc/mtab
# chroot /mnt/newarch /bin/bash
8. 更新 initramfs 的映像檔
# mkinitcpio -p kernel26
9. 修改 /etc/mdadm.conf
DEVICE /dev/sd[acd]1
DEVICE /dev/sd[acd]3
DEVICE /dev/sd[acd]4
ARRAY /dev/md1 level=raid1 num-devices=2 spares=1 UUID=1192e065:a8038ab4:6386aa5a:b25fe52e
ARRAY /dev/md2 level=raid5 num-devices=3 UUID=3d67777f:f4ab5ccd:6310127f:94f272a1
ARRAY /dev/md0 level=raid1 num-devices=2 spares=1 UUID=6e745075:51dee752:b420a73d:56580032
DEVICE 設定是告訴 mdadm raid 分區的位置,而后者是 raid 的組合,經由以下指令取得:
# mdadm -D --scan >>/etc/mdadm.conf
10. 建立必要的 device nodes
也就是 /dev/console, /dev/null, /dev/zero。這就是先前多翻嘗試仍不能進入 Arch 的關鍵,Gentoo 上沒有的東西~~
# /sbin/migrate-udev
11. 把 grub 安裝 MBR
# grub-install --no-floppy /dev/sda
# grub-install --no-floppy /dev/sdb
# grub-install --no-floppy /dev/sdd
12. 任務完成!!
至些大功告成,可以離開 chroot 環境並重新動電腦了。
# exit
# umount /mnt/newarch/boot
# umount /mnt/newarch/home
# umount /mnt/newarch/opt
# umount /mnt/newarch/tmp
# umount /mnt/newarch/usr
# umount /mnt/newarch/var
# umount /mnt/newarch/dev
# umount /mnt/newarch/proc
# umount /mnt/newarch
# reboot
13. Arch wiki 的一些參考資料
Installing_Arch_from_a_LiveCD
Installing_with_Software_RAID_or_LVM
1 則留言:
如果grub中的root(也就是说/是raid上的的一个vg的lv中,如/dev/gv00/vroot,gv00在raid5上),这样的话可以正常进入系统吗?
張貼留言