vvoody's woody house » Blog Archive » 迁移旧硬盘上的Linux到新硬盘(LVM)
February 7th, 2010 | by vvoody |

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

  • 用Slackware 13.0 dvd系统盘引导启动,并分区。Slackware 。

  • 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分区并xx

  • 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的说安装程序会将/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文件应该是我旧系统上复制过来的,换了硬盘后能直接使用?啊呀,这方面知识太欠缺了,我自己已经没法解释了,望路过的朋友帮我xx一下 ;-)

  • 建立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]
[2]
[3]
[4] 本地PDF文件
[5]
[6]

Post a Comment

郑重声明:资讯 【vvoody's woody house » Blog Archive » 迁移旧硬盘上的Linux到新硬盘(LVM)】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——