LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
楼主: qhgary

为什么kernel /boot/vmlinuz-2.4.21 ro root=/LABEL=/不能启动

[复制链接]
 楼主| 发表于 2005-1-15 14:41:05 | 显示全部楼层
明白了,那是不是说官方的内核是不支持这种LABEL=的方式的,是这样么?我之前之所以能够这样用,是因为我用的是Redhat修改过的内核代码,是这样么?
回复 支持 反对

使用道具 举报

发表于 2005-1-15 14:57:13 | 显示全部楼层
具体的细节我也不太清楚,反正我的经验一向就是自己编译的内核,都不能用LABEL=。
回复 支持 反对

使用道具 举报

发表于 2005-1-27 23:18:53 | 显示全部楼层
听说是RH的杰作。
回复 支持 反对

使用道具 举报

发表于 2005-1-28 11:24:20 | 显示全部楼层
Post by kj501
具体的细节我也不太清楚,反正我的经验一向就是自己编译的内核,都不能用LABEL=。

好像跟RH的LVM有关,有待证实
回复 支持 反对

使用道具 举报

发表于 2005-1-31 16:21:20 | 显示全部楼层
Post by phyma
好像跟RH的LVM有关,有待证实


应该是LVM无关,我测试了一下,用的从www.kernel.org上下载的 linux-2.4.29.tar.gz 的内核,重新编译后,直接在/boot/grub/grub.conf中使用新内核加上 root=LABEL=/ 的确不能引导,因为grub似乎不认这种格式,后来在initrd中找到了答案。

根据redhat自带的initrd中的linuxrc,修改了一个这样的版本:

#!/bin/nash
echo Mounting proc filesystem
mount -t proc /proc /proc
echo Creating block devices
mkdevices /dev
echo Creating root dev
mkrootdev /dev/root
echo 0x0100 > /proc/sys/kernel/real-root-dev
echo Mounting root filesystem
mount -o defaults --ro -t ext3 /dev/root /sysroot
pivot_root /sysroot /sysroot/initrd
umount /initrd/proc

同时,需要一个initrd.img的目录结构:
bin dev etc linuxrc loopfs proc sbin sysroot
(其中sbin是bin的symlink)
复制/sbin/nash到initrd.img的bin目录下
在initrd.img的dev目录下复制以下设备文件:
console null ram systty tty1 tty2 tty3 tty4
现在重新打包initrd.img,并将它加到grub.conf中,例如:
title RedHat Enterprise Linux AS (2.4.29)
  root (hd0,0)
  kernel /bzImage-2.4.29 ro root=LABEL=/
  initrd /initrd.img
这样就可以使用了。
回复 支持 反对

使用道具 举报

发表于 2005-1-31 16:27:07 | 显示全部楼层
虽然可以使用了,但还是有点不明白,我的分析如下,还请指教:

#!/bin/nash
echo Mounting proc filesystem
mount -t proc /proc /proc
这大家都知道,是加载/proc文件系统,因为后面的mkrootdev要从/proc/cmdline中取kernel的boot参数

echo Creating block devices
mkdevices /dev
生成/dev目录及相应的文件

echo Creating root dev
mkrootdev /dev/root
根据/proc/cmdline中的LABEL=/找到disklabel为"/"的硬盘分驱,这句其实就是LABEL=xxx实现的关键所在,然后将/dev/root设置到具体的分区。

echo 0x0100 > /proc/sys/kernel/real-root-dev
这句就没有看明白了,这是什么意思?

echo Mounting root filesystem
mount -o defaults --ro -t ext3 /dev/root /sysroot
mount disklabel为"/"的分驱

pivot_root /sysroot /sysroot/initrd
将/sysroot(即disklabel为"/"的分驱)设置成当前的root,并将老的root移动到/sysroot/initrd中

umount /initrd/proc
umount proc文件系统


echo 0x0100 > /proc/sys/kernel/real-root-dev
这句起什么作用呢?
回复 支持 反对

使用道具 举报

发表于 2005-1-31 16:28:48 | 显示全部楼层
Post by 黑夜编码人
应该是LVM无关,我测试了一下,用的从www.kernel.org上下载的 linux-2.4.29.tar.gz 的内核,重新编译后,直接在/boot/grub/grub.conf中使用新内核加上 root=LABEL=/ 的确不能引导,因为grub似乎不认这种格式,后来在initrd中找到了答案。

根据redhat自带的initrd中的linuxrc,修改了一个这样的版本:

#!/bin/nash
echo Mounting proc filesystem
mount -t proc /proc /proc
echo Creating block devices
mkdevices /dev
echo Creating root dev
mkrootdev /dev/root
echo 0x0100 > /proc/sys/kernel/real-root-dev
echo Mounting root filesystem
mount -o defaults --ro -t ext3 /dev/root /sysroot
pivot_root /sysroot /sysroot/initrd
umount /initrd/proc

同时,需要一个initrd.img的目录结构:
bin dev etc linuxrc loopfs proc sbin sysroot
(其中sbin是bin的symlink)
复制/sbin/nash到initrd.img的bin目录下
在initrd.img的dev目录下复制以下设备文件:
console null ram systty tty1 tty2 tty3 tty4
现在重新打包initrd.img,并将它加到grub.conf中,例如:
title RedHat Enterprise Linux AS (2.4.29)
  root (hd0,0)
  kernel /bzImage-2.4.29 ro root=LABEL=/
  initrd /initrd.img
这样就可以使用了。

跟grub无关,grub不处理内核的root=*命令行,把它直接传递给了kernel
回复 支持 反对

使用道具 举报

发表于 2005-1-31 16:31:12 | 显示全部楼层
谢谢提醒 :p

感觉上是mkrootdev这句来实现了LABEL=xxx,但不明白/proc/dev/real-root-dev有什么作用呢?
回复 支持 反对

使用道具 举报

发表于 2005-1-31 16:33:23 | 显示全部楼层
man pages上找到的:
mkrootdev path
Makes path a block inode for the device which should be mounted as root. To determine this device nash uses the device suggested by the root= kernel command line argument (if root=LABEL is used devices are probed to find one with that label). If no root= argument is available, /proc/sys/kernel/real-root-dev provides the device number.

那linuxrc将0x0100(即256)写入到/proc/sys/kernel/real-root-dev表示什么意思呢?难道device number=256代表一个特别的意义?
回复 支持 反对

使用道具 举报

发表于 2005-1-31 17:35:49 | 显示全部楼层
找到答案了 :p

# Change root device from /dev/fd0 to /dev/ram0
echo "0x100" > /proc/sys/kernel/real-root-dev
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表