买了块新的大硬盘,准备把原先硬盘上的Slackware迁移过去,并且采用LVM,xp不要了换成Win7。记录下迁移过程和遇到的一些问题及解决方法。
- 用Slackware 13.0 dvd系统盘引导启动,并分区。Slackware 。
- 建立LV分区并xx
- 格式化LV分区并挂载到新的root目录
- 挂载旧硬盘上的系统目录到旧root目录
- 迁移(复制)旧系统到新硬盘
- chroot到/new_root,制作initrd和LILO
- 在新系统的/dev目录下建立LVM设备文件
- 建立fstab文件
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管理了。
vgscan --mknodes
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
vgchange -ay
mkdir /new_root
mkreiserfs /dev/MYVG/ROOT
mkreiserfs /dev/MYVG/USRLOCAL
mkreiserfs /dev/MYVG/HOME
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
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了,但事实不是这样的,还得额外多些操作。
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。马上就要好了
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一下
/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]