voodoomaster 发表于 2009-4-1 23:25:19

centos4如何切换"/"分区的文件系统

系统为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 ram disk,并新加一个/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,switch to 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 root dev什么的记不清了),后面有-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文件系统更好等问题,这个争论下去又没完没了了,我只想求教一个切换"/"到非默认文件系统的方法.

jiangtao9999 发表于 2009-4-2 10:57:48

你试试不用initrd,有的系统这样可以启动。
PS:CentOS 就不是让你尝试这些新东西的版本……

jiangtao9999 发表于 2009-4-2 11:08:15

另外,印象里 /dev 里面不能为空的,至少还需要几个必备设备才行

voodoomaster 发表于 2009-4-4 00:09:30

问题已经解决!过程如下:

先试着disable了initial ram disk的参数新编译一个内核,用它不加initrd来启动,启动后提示unable to find a console后就kernel panic了.不清楚是不是有什么驱动在配置的时候忘记选上了.

无聊之余再仔细检查配置文件,发现拟作为新"/"的sda10上面etc/fstab文件之中,/dev/sda10的文件系统类型居然还是ext3,忘了改成reiser4了!立刻改之.

之后又仔细看了看mkinitrd的脚本,原来可以用--fstab参数指定用于启动的fstab,至此恍然大悟,立即以/dev/sda10的 etc/fstab生成了一个新initrd,成功以/dev/sda10的reiser4分区作为"/"启动了.至于那个不用initrd的内核在将 fstab改正确后能不能启动忘了试一下了,有空再试试能不能不用initrd启动.

看来mkinitrd还是会根据fstab判断系统启动后是以哪个分区作为"/"的,因此不同文件系统作为"/",生成的initrd是不同的(估计就是里面的init脚本有区别).本来想再把这个新的initrd解开来和原来的initrd作比较,但是奇怪的是用gzip -d initrd-xxx.img解压缩的时候,居然报告无效的sfx,无法解压,而用file initrd-xxx.img看文件类型时,明明显示是gzip compress的文件啊,之前用ext3启动时那个initrd也是能够正常gzip解压缩,之后再用cpio解开,不明白这个initrd怎么就不行了.

voodoomaster 发表于 2009-4-14 22:32:08

自己再顶一个,原来最后的gzip无法解压initrd-xxx.img文件的问题是扩展名不对,把原文件改名为initrd-xxx.img.gz后就可以顺利解压了。
页: [1]
查看完整版本: centos4如何切换"/"分区的文件系统