免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2974 | 回复: 5
打印 上一主题 下一主题

centos4如何切换"/"分区的文件系统 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-04-01 23:26 |只看该作者 |倒序浏览
系统为centos4.7,有3个linux用分区,另有一个swap分区
/dev/sda8:   /boot         ext3
/dev/sda9:   /                ext3
/dev/sda10: /usr/local   reiser4
由于centos默认内核只支持ext3,无奈只好使用一个ext3文件系统的"/"分区来安装系统.之后,自行编译安装好了reiser4progs,可以正常使用mkfs.reiser4,fsck.reiser4等工具,再编译好一个2.6.28 +reiser4-patch的内核,用mkinitrd生成相应的initial ramdisk,并新加一个/dev/sda10盘作为/usr/local,系统使用正常(ext3模块和reiser4模块直接编译进内核,不采用module).

最近总是觉得ext3速度太慢,还是reiser4用得爽,想把/分区也一并换成reiser4,只保留/boot采用ext3保证启动时的兼容性问题(我用的grub4dos,不支持reiser4).步骤如下:

1.先修改/etc/fstab,将其中挂载/dev/sda10为/usr/local的一行注释掉
2.重新启动后另行挂载/dev/sda10,把/分区下的东东全拷贝到/dev/sda10下面去,当然/dev,/sys,/proc这些特殊目录只是在/dev/sda10下面建一个目录就行了,没有傻到真的cp -r*./dev/sda10下面的etc/fstab也作了修改,将/dev/sda10指定为/,而/dev/sda8作为/boot仍然不变,注释掉/dev/sda9
3.现在相当于把整个系统都迁移到了/dev/sda10所在的reiser4分区上了,并且相应的/ect/fstab也已准备就绪,只有/boot仍然用/dev/sda8的ext3

完成上述准备后重启系统,问题就来了.如果用自己编译好的那个内核+生成的initrd启动,并且启动的root参数改为root=/dev/sda10,那么启动到挂载完initrd后,重新切换/到/dev/sda10的时候报错,说是无法挂载/dev/sda10,switchto new root failed.而我的内核明明已经有了reiser4的模块(直接编译进内核,而不是以module的方式挂载)

凭经验判断是生成的initrd有问题,只能把"/"切换到ext3上面,而不能切换到reiser4上面.于是打算重新生成一个initrd.先用原来的/dev/sda9作为/启动,然后mount/dev/sda10,再chroot过去,再mkinitrd的时候.报错,无法生成initrd(具体错误信息记不清了)

无奈,直接gunzip了initrd,再cpio-dvim将之前生成的initrd解开,发现其中init启动脚本里面有一行写的是***(具体是chroot dev还是mount rootdev什么的记不清了),后面有-t ext3 的参数,满心欢喜以为问题就出在这里,改之,变为-t reiser4,其它不变,再重新cpio打包生成新的initrd,再次用此initd启动,参数仍然是root=/dev/sda10,但是这次更惨了了,直接报告无法挂载root分区了,依稀记得错误提示是先把我硬盘上所有的分区列一遍(都是正确的),然后报告无法在上述分区中以ext3,reiser4等格式挂载root分区,这下更让我搞不明白了

又试了试以不用initial ramdisk的参数编译了一个内核,仍然直接指定root=/dev/sda10启动,依旧是kernel panic.让人很是郁闷.

估计所有的redhat/centos/fedora系列发行版在生成initrd的时候要判断当前的/分区文件系统类型,以后用这个initrd启动也必须保证/分区文件系统类型和生成这个文件时一致.因为网上看到有人用gentoo成功将/分区换成reiser4来用了,估计应该是和我类似的思路,但是不知redhat系列就为什么不行.

到底应该如何把/分区切换到reiser4文件系统上面去?在此向各位高人求教.

PS:请不要回帖讨论为什么用reiser4,或者xx文件系统更好等问题,这个争论下去又没完没了了,我只想求教一个切换"/"到非默认文件系统的方法.

论坛徽章:
0
2 [报告]
发表于 2009-04-02 06:40 |只看该作者

我就说下我是怎么把/换成ext4的.

假设现在的/是sda1,新建一个分区,sda2,
重新编译内核,使系统上的内核支持ext4,mkfs.ext4 /dev/sda2
创建/mnt/sda1 /mnt/sda2,
分别挂载/dev/sda1 和sda2 到/mnt下的sda1,sda2
cd /mnt/sda1
tar cvpf  /mnt/sda2/linux.tar ./
cd /mnt/sda2
tar xvpf linux.tar -C ./

mount --bind /dev /mnt/sda2/dev
mount --bind /proc /mnt/sda2/proc
chroot /mnt/sda2
grub
重写mbr上的grub,使他使用sda2上的grub,
修改sda2上的grub.conf

exit
reboot
重启后进入sda2上的系统,用mount,fdisk看仔细,现在的/是在sda2上。

mkfs.ext4 /dev/sda1
mount /dev/sda1 /mnt/sda1
tar xvpf /linux.tar -C /mnt/sda1
mount --bind /dev/ /mnt/sda1/dev
mount --binf /proc /mnt/sda1/proc

chroot /mnt/sda1

重写mbr上的grub,使他指回sda1。
exit
reboot。
/分区文件系统的转换就完成了。

要去上班了,等下再解释..

[ 本帖最后由 Celinde 于 2009-4-2 06:44 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2009-04-02 10:02 |只看该作者

回复 #2 Celinde 的帖子

论坛徽章:
0
4 [报告]
发表于 2009-04-02 11:59 |只看该作者
原帖由 Celinde 于 2009-4-2 06:40 发表

我就说下我是怎么把/换成ext4的.

假设现在的/是sda1,新建一个分区,sda2,
重新编译内核,使系统上的内核支持ext4,mkfs.ext4 /dev/sda2
创建/mnt/sda1 /mnt/sda2,
分别挂载/dev/sda1 和sda2 ...

赞,学习了

论坛徽章:
0
5 [报告]
发表于 2009-04-02 22:27 |只看该作者
这样做的话,是不是就不需要重新生成initrd了?可以继续使用以前从ext3分区启动时使用的initrd?

论坛徽章:
0
6 [报告]
发表于 2009-04-03 00:15 |只看该作者
这个..
早上没看清.. 我系统上没做initrd...

你的initrd文件里面有没有/dev/console这个文件。有几次在redhat上重编内核后缺少这个文件导致启动失败。

回头我也试试给RHEL4换个内核....  几乎没用过initrd..不大清楚了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP