+ -
当前位置:首页 → 问答吧 → U盘启动 linux 需要特殊设置?

U盘启动 linux 需要特殊设置?

时间:2008-07-09

来源:互联网

把我的笔记本 LFS 的系统(完善且正常使用的系统)直接复制到 USB KEY,用GRUB 引导,结果出现 kernel 启动界面后 马上 kernel panic!手工进入 GRUB 后,发现只要是用U盘上的 GRUB 引导,系统就不能识别 U 盘设备(本来应当是/dev/sda),而用硬盘上的 GRUB 引导,系统正常识别出 U 盘设备 /dev/sdb !

各位专家给个意见?

对了参照本网站上的帖子用过了 rootdelay=10, 无效果。

作者: linux001   发布时间: 2008-07-09

还真是麻烦啊。已经获得的线索如下:

1、kernel 的 usb mass storage 设置必须是 Y,不能是 M;否则 kernel 在引导根文件系统时并不能正常挂载 U 盘上的系统;

2、用 grub 引导 kernel 时,必须加 rootdelay 参数,否则还是不能正常挂载 U 盘上的根文件系统;

3、在 BIOS 和 GRUB 中,盘的顺序是固定的,比如在我的笔记本上,可以在BIOS中设置启动顺序为:
1 -- USB KEY
2 -- 系统固定硬盘
3 -- USB 移动硬盘
这样当我用 USB KEY 上的 GRUB 启动系统时,三个盘的顺序为:
1 -- USB KEY   --hd0
2 -- 系统固定硬盘 --hd1
3 -- USB 移动硬盘 --hd2
这说明 grub 是按BIOS启动顺序来安排盘顺序的;而且当用机器的启动选项选择不同的盘启动时, grub 会自动调整启动盘的顺序为 hd0。

但是!!当 kernel 启动后,在我的机器上并不认这个顺序,它总是把系统硬盘安排为 /dev/sda,而其它两个盘的顺序不清楚是怎么确定的,所以造成了我前面总是启动不成功!

对于这个问题不知道是否有什么资料?

作者: linux001   发布时间: 2008-07-11

引用:
作者: linux001
还真是麻烦啊。已经获得的线索如下:

1、kernel 的 usb mass storage 设置必须是 Y,不能是 M;否则 kernel 在引导根文件系统时并不能正常挂载 U 盘上的系统;

2、用 grub 引导 kernel 时,必须加 rootdelay 参数,否则还是不能正常挂载 U 盘上的根文件系统;

3、在 BIOS 和 GRUB 中,盘的顺序是固定的,比如在我的笔记本上,可以在BIOS中设置启动顺序为:
1 -- USB KEY
2 -- 系统固定硬盘
3 -- USB 移动硬盘
这样当我用 USB KEY 上的 GRUB 启动系统时,三个盘的顺序为:
1 -- USB KEY   --hd0
2 -- 系统固定硬盘 --hd1
3 -- USB 移动硬盘 --hd2
这说明 grub 是按BIOS启动顺序来安排盘顺序的;而且当用机器的启动选项选择不同的盘启动时, grub 会自动调整启动盘的顺序为 hd0。

但是!!当 kernel 启动后,在我的机器上并不认这个顺序,它总是把系统硬盘安排为 /dev/sda,而其它两个盘的顺序不清楚是怎么确定的,所以造成了我前面总是启动不成功!

对于这个问题不知道是否有什么资料?
关于启动顺序的问题,你可以使用分区UUID而不是设备名来进行mount等操作。
比如,grub中启动的行可以写为
kernel /my-kernel-image root=UUID=48e89736-2980-4dd6-9cbd-28ff29243bc0 ro single

至于uuid,只要在一个能启动的系统上运行如下命令:
ls -l /dev/disk/by-uuid/
就能得到uuid和设备名的对应表。

作者: 地球发动机   发布时间: 2008-07-12

引用:
作者: linux001
还真是麻烦啊。已经获得的线索如下:

1、kernel 的 usb mass storage 设置必须是 Y,不能是 M;否则 kernel 在引导根文件系统时并不能正常挂载 U 盘上的系统;

2、用 grub 引导 kernel 时,必须加 rootdelay 参数,否则还是不能正常挂载 U 盘上的根文件系统;

3、在 BIOS 和 GRUB 中,盘的顺序是固定的,比如在我的笔记本上,可以在BIOS中设置启动顺序为:
1 -- USB KEY
2 -- 系统固定硬盘
3 -- USB 移动硬盘
这样当我用 USB KEY 上的 GRUB 启动系统时,三个盘的顺序为:
1 -- USB KEY   --hd0
2 -- 系统固定硬盘 --hd1
3 -- USB 移动硬盘 --hd2
这说明 grub 是按BIOS启动顺序来安排盘顺序的;而且当用机器的启动选项选择不同的盘启动时, grub 会自动调整启动盘的顺序为 hd0。

但是!!当 kernel 启动后,在我的机器上并不认这个顺序,它总是把系统硬盘安排为 /dev/sda,而其它两个盘的顺序不清楚是怎么确定的,所以造成了我前面总是启动不成功!

对于这个问题不知道是否有什么资料?
Read this:

http://www.linuxsir.org/bbs/showthread.php?t=309148

作者: d00m3d   发布时间: 2008-07-12

引用:
作者: 地球发动机
关于启动顺序的问题,你可以使用分区UUID而不是设备名来进行mount等操作。
比如,grub中启动的行可以写为
kernel /my-kernel-image root=UUID=48e89736-2980-4dd6-9cbd-28ff29243bc0 ro single

至于uuid,只要在一个能启动的系统上运行如下命令:
ls -l /dev/disk/by-uuid/
就能得到uuid和设备名的对应表。
这样虽然kernel引导了,但是由于 fstab 中根分区的定义不对,所以系统还是没法用。

作者: linux001   发布时间: 2008-07-12

引用:
作者: linux001
这样虽然kernel引导了,但是由于 fstab 中根分区的定义不对,所以系统还是没法用。
晕死。你就不会把fstab也换成用UUID呀?给你个参考:
# /dev/sda6
UUID=a13f2e31-d00e-43c4-b3ce-359c544faa8f /boot ext3 relatime 0 2
这是我机器上的fstab里面的一行。

作者: 地球发动机   发布时间: 2008-07-12

引用:
作者: d00m3d
Read this:

http://www.linuxsir.org/bbs/showthread.php?t=309148
关键问题是在U盘中预先写 fstab 时无法确定根分区的位置,这个才是本质的困难!比如你做好的U盘,想在我的机器上用一下:你假设为了U盘先于硬盘启动,我的机器上必然在BIOS中将启动顺序设为 USB KEY先,就是 hd0,于是你把自己U盘的相关设置写为
引用:
menu.lst:
root (hd0,0)
kernel /boot/lfskernel-2.6.24.7 rootdelay=10 root=/dev/sda1

fstab:
/dev/sda1 / ext3 defaults 1 1
这样,你这块U盘铁定在我的笔记本上是不能使用的!因为如果系统里面只有这个 USB KEY 和硬盘,USB KEY铁定会变成 /dev/sdb!虽然你可以通过采用手式输入命令的方式来修改grub的启动项使它正确,但是 fstab 你确无能为力!

作者: linux001   发布时间: 2008-07-12

地球发动机:

能根据我的描述写一个完整的 menu.lst 和 fstab 项吗(假设U盘上系统在分区1)?如果都能用 UUID 来识别分区,那么就可以使USB KEY启动成为可能。因为既然我的机器这样怪,非常可能还有其它的机器会有类似问题。只有找到通用的识别方法才能让USB KEY 真的能用。

作者: linux001   发布时间: 2008-07-12

找到了相关说明,看来对于 USB KEY,必须采用UUID来标识相关启动分区才能正常使用。

作者: linux001   发布时间: 2008-07-12

引用:
作者: linux001
地球发动机:

能根据我的描述写一个完整的 menu.lst 和 fstab 项吗(假设U盘上系统在分区1)?如果都能用 UUID 来识别分区,那么就可以使USB KEY启动成为可能。因为既然我的机器这样怪,非常可能还有其它的机器会有类似问题。只有找到通用的识别方法才能让USB KEY 真的能用。
其实没什么难的呀,就是把所有的/dev/sdx都改成UUID=xxx得了。

作者: 地球发动机   发布时间: 2008-07-12

引用:
作者: linux001
关键问题是在U盘中预先写 fstab 时无法确定根分区的位置,这个才是本质的困难!比如你做好的U盘,想在我的机器上用一下:你假设为了U盘先于硬盘启动,我的机器上必然在BIOS中将启动顺序设为 USB KEY先,就是 hd0,于是你把自己U盘的相关设置写为


这样,你这块U盘铁定在我的笔记本上是不能使用的!因为如果系统里面只有这个 USB KEY 和硬盘,USB KEY铁定会变成 /dev/sdb!虽然你可以通过采用手式输入命令的方式来修改grub的启动项使它正确,但是 fstab 你确无能为力!
不大明白,hd0 是 USB KEY 怎麼會被認作 /dev/sdb 呢?

UUID 是另一方法,雖然流傳已久,這方便解決此類問題,也是最近大發行版開始流行採用的原因

作者: d00m3d   发布时间: 2008-07-12

引用:
作者: linux001
找到了相关说明,看来对于 USB KEY,必须采用UUID来标识相关启动分区才能正常使用。
樓主的問題是否已解決了?

作者: d00m3d   发布时间: 2008-07-12

引用:
作者: d00m3d
樓主的問題是否已解決了?
抱歉没有成功!没有精力老是去试。

问题是,kernel boot 到挂 root 分区时,显示没有找到 "UUID=XXXX" 的根分区,但我写的UUID 是直接从 ls 命令中复制的,不太可能出错。

有人能在自己的机器上试一下用UUID启动是否成功吗?是否需要特别的配置?

作者: linux001   发布时间: 2008-07-13

引用:
作者: linux001
抱歉没有成功!没有精力老是去试。

问题是,kernel boot 到挂 root 分区时,显示没有找到 "UUID=XXXX" 的根分区,但我写的UUID 是直接从 ls 命令中复制的,不太可能出错。

有人能在自己的机器上试一下用UUID启动是否成功吗?是否需要特别的配置?
一樣的問題,這問題太操蛋了,折騰死人。。。

作者: shinesoft   发布时间: 2008-08-07

引用:
作者: shinesoft
一樣的問題,這問題太操蛋了,折騰死人。。。
這問題已經搞掂了,回頭有空再寫詳細的過程。

作者: shinesoft   发布时间: 2008-08-07