迁移旧硬盘上的Linux到新硬盘(LVM)

February 7th, 2010 | by vvoody |

买了块新的大硬盘,准备把原先硬盘上的Slackware迁移过去,并且采用LVM,xp不要了换成Win7。记录下迁移过程和遇到的一些问题及解决方法。

  • 用Slackware 13.0 dvd系统盘引导启动,并分区。Slackware 从12.0开始支持安装系统到LVM

  • Device Boot Start End Blocks Id System
    /dev/sda1 * 1 13 102400 7 HPFS/NTFS
    /dev/sda2 13 2611 20869120 7 HPFS/NTFS
    /dev/sda3 2611 3917 10485760 c W95 FAT32 (LBA)
    /dev/sda4 3917 38913 281110368+ 5 Extended
    /dev/sda5 3917 3981 519047 83 Linux
    /dev/sda6 3982 4504 4200966 82 Linux swap
    /dev/sda7 4505 38913 276390261 8e Linux LVM

    这个是我新硬盘的最终分区情况。sda1是Win7保留的100M启动分区,sda2是Win7系统盘,sda3是D盘。500M大的sda5我原本想作为/boot,不过目前我就Win7+Slackware+LILO不需要,留作未来使用吧。swap(sda6)没有用LVM,剩下的260多G(sda7)都交给LVM管理了。

  • 建立LV分区并激活

  • pvcreate /dev/sda7
    vgcreate MYVG /dev/sda7
    lvcreate -L 20G -n ROOT MYVG
    lvcreate -L 10G -n USRLOCAL MYVG
    lvcreate -L 100G -n DATA MYVG
    lvcreate -L 50G -n HOME MYVG

    vgscan --mknodes
    vgchange -ay

  • 格式化LV分区并挂载到新的root目录

  • mkreiserfs /dev/MYVG/ROOT
    mkreiserfs /dev/MYVG/USRLOCAL
    mkreiserfs /dev/MYVG/HOME

    mkdir /new_root
    mount -t reiserfs /dev/MYVG/ROOT /new_root
    mkdir -p /new_root/usr/local
    mount -t reiserfs /dev/MYVG/USRLOCAL /new_root/usr/local
    mkdir /new_root/home
    mount -t reiserfs /dev/MYVG/HOME /new_root/home

  • 挂载旧硬盘上的系统目录到旧root目录

  • mkdir /old_root
    mount -t reiserfs /dev/sda5 /old_root
    mount -t reiserfs /dev/sda7 /old_root/usr/local
    mount -t reiserfs /dev/sda8 /old_root/usr/local/opt
    mount -t reiserfs /dev/sda9 /old_root/home

    又买了个移动硬盘盒,旧硬盘就可以当移动硬盘了。

  • 迁移(复制)旧系统到新硬盘

  • cd /old_root
    /old_root/bin/tar cpBf - . --exclude=tmp/* | ( cd /new_root && /old_root/bin/tar xvpBf -)

    漫长的等待…… /dev 啥的统统要拷过来。根据参考[5],到这里接着用直接chroot后就可以mkinitrd和lilo了,但事实不是这样的,还得额外多些操作。

  • chroot到/new_root,制作initrd和LILO

  • mount --bind /proc /new_root/proc
    mount --bind /sys /new_root/sys
    mount --bind /dev /new_root/dev
    chroot /new_root
    cd /boot
    mkinitrd -c -k 2.6.29.6-smp -m reiserfs -f reiserfs -r /dev/MYVG/ROOT -L -o /boot/initrd.gz
    vim /etc/lilo.conf
    lilo -v

    三行mount –bind是必须的,slackware的README_LVM.TXT说安装程序会将/proc和/sys挂载上,但我目前不是全新安装没有使用setup安装程序,而且我运行setup企图让它帮我挂载/proc等未果 :( 所以得用–bind(见参考[6]),不过我不是很了解这个选项。不这么mount的话执行mkinitrd会出现cat /proc/partitions错误,执行lilo会出现 Fatal: raid_setup: stat(“/dev/sda”)。

    /etc/lilo.conf 也作相应的调整:

    boot="/dev/sda"
    ......
    image="/boot/vmlinuz"
    initrd="/boot/initrd.gz"
    root="/dev/MYVG/ROOT"
    label="2.6.29.6-smp"
    read-only
    # Linux bootable partition config ends
    # Windows bootable partition config begins
    other = /dev/sda1
    label="Windows7"
    table = /dev/sda
    # Windows bootable partition config ends

    Win7的引导分区是sda1,不是系统盘sda2。马上就要好了 ;-)

  • 在新系统的/dev目录下建立LVM设备文件

  • exit # 退出chroot
    umount /new_root/dev
    chroot /new_root
    vgscan --mknodes
    vgchange -ay

    如果没有这一步,重启后LILO引导菜单已经可以看见,Win7引导正常,Slackware能引导起来,但是在挂载文件系统是提示找不到 /dev/MYVG/ROOT 文件。于是我就如上这么干了,在/dev下就会有MYVG/ROOT等LV设备文件了。不过我不太明白,必须得通过vgscan –mknodes的方式来建立几个lv分区的设备文件吗?那/dev/sda文件应该是我旧系统上复制过来的,换了硬盘后能直接使用?啊呀,这方面知识太欠缺了,我自己已经没法解释了,望路过的朋友帮我解惑一下 ;-)

  • 建立fstab文件

  • /dev/sda6 swap swap defaults 0 0
    /dev/MYVG/ROOT / reiserfs defaults 1 1
    /dev/MYVG/USRLOCAL /usr/local reiserfs defaults 1 2
    /dev/MYVG/HOME /home reiserfs defaults 1 2
    /dev/sda3 /media/D vfat uid=0,umask=0022,fmask=0111,shortname=mixed,iocharset=utf8 0 0
    /dev/cdrom /mnt/cdrom auto defaults,user,ro,noexec 0 0
    devpts /dev/pts devpts gid=5,mode=620 0 0
    proc /proc proc defaults 0 0

至此我的系统迁移完毕。这一次让我发现又有很多不懂不明白啊~~~

参考:
[1] 通用线程: 学习 Linux LVM,第 1 部分
[2] 通用线程:学习 Linux LVM,第 2部分
[3] README_LVM.TXT
[4] LVM White Paper 本地PDF文件
[5] Slackware 12.1 on LVM – Installation and Migration
[6] Backup almost working, LILO hangs

  1. 3 Responses to “迁移旧硬盘上的Linux到新硬盘(LVM)”

  2. By iveney on Mar 2, 2010

    Mozilla Firefox 3.0.6 Ubuntu Linux Mozilla Firefox 3.0.6 Ubuntu Linux

    我的情况跟你有点像。
    不过是在同一块硬盘上升级win7并倒腾成LVM罢了,lol

    Reply

  3. By vvoody on Mar 3, 2010

    Opera 9.80 Linux Opera 9.80 Linux

    嘿嘿,我原来硬盘太小了,只有80G,不够啊 :D

    Reply

  1. 1 Trackback(s)

  2. Aug 8, 2010: Gentoo成功迁移到LVM新硬盘 | I'm M.B.Samnew

Post a Comment