请教 从U盘中安装的系统启动后硬盘号混乱问题

29 views
Skip to first unread message

Hu Rui

unread,
Apr 13, 2014, 9:57:13 PM4/13/14
to sh...@googlegroups.com
早上好:

昨天遇到一个问题,很是奇怪,请教有经验的朋友。

昨天在一个U盘上安装了Debian 7.4系统,然后从U盘引导,系统启起来了,然后我进去看了下/boot/grub/grub.cfg中的内容。

发现 set root=(hd0,1) 这一行
但是实际fdisk -l看到的系统中的U盘为 /dev/sdb 电脑中硬盘为/dev/sda 

综上也就是系统进去以后识别的U盘为hd1而并非hd0才对,但是实际在引导时却识别成了hd0。这是为何?

补充点我装系统的方式,我插入U盘到电脑中,然后在虚似机中从光盘启动(实际虚似光盘,debian安装iso放在宿主机的硬盘上),然后安装过程中在硬盘分区部分时,安装程序也是识别U盘为/dev/sda的 而虚似机中的硬盘识别为 /dev/sdb的

我试图再确认启动引导过程,然后做了以下尝试

从U盘启动物理机时进入grub后,按c进入grub的交互方式,直接 set root=(hd0,1),后来再执行 cd /b[tab][tab]  很明显 此时grub提示我的的可选目录显然是U盘上的,我再次set  root=(hd1,1) 后执行 cd /b[tab][tab] 此时可选的目录是我物理机硬盘上安装的windows系统的文件。

由此来看 引导时的硬件识别与引导完进入系统后的硬件实识是不同的,这个是随机的?还是说只要我U盘引导 在哪里都会是 sda (hd0) 呢?

请有经验的给点指导,好久不折腾系统了,现在都快不会玩了 grub2 的引导感觉有些小复杂啊。

依云

unread,
Apr 14, 2014, 10:11:09 AM4/14/14
to sh...@googlegroups.com
我的移动设备(U 盘、移动硬盘)启动到 Linux 总不是 /dev/sda。/dev/sda 是
机器自己的硬盘。grub 的我不清楚,没看。

反正不要用这种编号就是了,用 UUID 或者 LABEL 多好。
grub 用 search --no-floppy --fs-uuid --set=root UUID,Linux 下用 /dev/disk/by-uuid/UUID。

--
Best regards,
lilydjwg

Linux Vim Python 我的博客:
http://lilydjwg.is-programmer.com/
--
A: Because it obfuscates the reading.
Q: Why is top posting so bad?

Hu Rui

unread,
Apr 14, 2014, 10:15:46 PM4/14/14
to sh...@googlegroups.com
我的grub.cfg中有这样的部分

...
set root='(hd0,msdos1)'
search --no-floppy --fs-uuid --set=root 62ca25a4-.......
echo 'Loading Linux 3.2.0-4-686-pae ...'
linux /boot/vmlinuz-3.2.0-4-686-pae root=UUID=62ca25a3-....... ro quiet
echo 'Loading initial ramdisk ...'
initrd /boot/initrd.img-3.2.0-4-686-pae
...

以上的部分中 第一个 set root=..  这一行有什么意义?我下面的的确是UUID的。

还有昨天我发现在grub引导时我的U盘的插口为 SCSI0 这个接口 而硬盘是SCSI1接口,我猜想grub引导过程是通过硬件的接口顺序为识别为是否为第一块硬盘(hd0)还是为第二块硬盘(hd1)
进入操作系统后的识别似乎更依靠逻辑识别,所有的硬盘都识别为hd0 了,这个姑且还算是猜想。


--
-- You received this message because you are subscribed to the Google Groups Shanghai Linux User Group group. To post to this group, send email to sh...@googlegroups.com. To unsubscribe from this group, send email to shlug+un...@googlegroups.com. For more options, visit this group at https://groups.google.com/d/forum/shlug?hl=zh-CN
---
您收到此邮件是因为您订阅了 Google 网上论坛的“Shanghai Linux User Group”论坛。
要退订此论坛并停止接收此论坛的电子邮件,请发送电子邮件到shlug+un...@googlegroups.com
要查看更多选项,请访问 https://groups.google.com/d/optout

依云

unread,
Apr 15, 2014, 12:33:53 PM4/15/14
to sh...@googlegroups.com
On Tue, Apr 15, 2014 at 10:15:46AM +0800, Hu Rui wrote:
> 我的grub.cfg中有这样的部分
>
> ...
> set root='(hd0,msdos1)'
> search --no-floppy --fs-uuid --set=root 62ca25a4-.......
> echo 'Loading Linux 3.2.0-4-686-pae ...'
> linux /boot/vmlinuz-3.2.0-4-686-pae root=UUID=62ca25a3-....... ro quiet
> echo 'Loading initial ramdisk ...'
> initrd /boot/initrd.img-3.2.0-4-686-pae
> ...
>
> 以上的部分中 第一个 set root=.. 这一行有什么意义?我下面的的确是UUID的。

我猜是 fallback,万一那个 UUID 的分区找不到了,就用前边那个。

> 还有昨天我发现在grub引导时我的U盘的插口为 SCSI0 这个接口
> 而硬盘是SCSI1接口,我猜想grub引导过程是通过硬件的接口顺序为识别为是否为第一块硬盘(hd0)还是为第二块硬盘(hd1)
> 进入操作系统后的识别似乎更依靠逻辑识别,所有的硬盘都识别为hd0 了,这个姑且还算是猜想。

DaboD

unread,
Apr 16, 2014, 12:47:18 AM4/16/14
to sh...@googlegroups.com
我的理解是, set root= 是給 grub 看, 讓 grub 知道去哪找到 initramfs, kernel image, 所以在 /boot 是獨立一個 partition 的情況下, 可以看到 image 的 path 是 / 開頭的, 如果跟 /boot 跟 / 是放一塊, 那 image 的 path 前面就會有 /boot. 後面的 root=UUID= 這是在 kernel 初始完後, 產生了 init (pid 1), mount 真正的 root 用. 有錯還請指正 ;)

AR

unread,
Apr 16, 2014, 1:29:06 AM4/16/14
to sh...@googlegroups.com
2014-04-16 12:47 GMT+08:00 DaboD <daid...@gmail.com>:
> 我的理解是, set root= 是給 grub 看, 讓 grub 知道去哪找到 initramfs, kernel image, 所以在 /boot
> 是獨立一個 partition 的情況下, 可以看到 image 的 path 是 / 開頭的, 如果跟 /boot 跟 / 是放一塊, 那 image
> 的 path 前面就會有 /boot. 後面的 root=UUID= 這是在 kernel 初始完後, 產生了 init (pid 1), mount
> 真正的 root 用. 有錯還請指正 ;)

+1

> set root='(hd0,msdos1)'

这个给 grub 看的

> linux /boot/vmlinuz-3.2.0-4-686-pae root=UUID=62ca25a3-....... ro quiet

这行里的 root 是给 kernel 的启动参数


--
Silence is golden.

Hu Rui

unread,
Apr 16, 2014, 3:18:27 AM4/16/14
to sh...@googlegroups.com
谢谢各位,我明白了。

关于U盘在Grub中的识别硬盘号(我上面提到我的U盘在Grub中被识别为hd0了)与操作系统中的识别出来的硬盘号(我上面提到我的U盘在操作系统启动成功后被识别为了hd1),这个区别是如何产生的呢?

我推测可能在Grub中识别的顺序是靠硬件接口的的顺序的,我的U盘插在SCSI0口而硬盘是 SCSI1口,所以U盘为hd0

这个推测合理吗?这个推测合理的话,可是为什么操作系统不按这种方识来识别?

--
-- You received this message because you are subscribed to the Google Groups Shanghai Linux User Group group. To post to this group, send email to sh...@googlegroups.com. To unsubscribe from this group, send email to shlug+un...@googlegroups.com. For more options, visit this group at https://groups.google.com/d/forum/shlug?hl=zh-CN
---

DaboD

unread,
Apr 16, 2014, 6:40:07 AM4/16/14
to sh...@googlegroups.com
grub 的順序應該是 BIOS 給的 boot device 順序.

Linux 的部份沒確認過, 但應該是更接近硬件設備的順序. 如果共用同樣的 prefix, 例如 sd, 那可能就看是先 scan 什麼類型的 bus 決定誰靠前.
要退订此论坛并停止接收此论坛的电子邮件,请发送电子邮件到shlug+unsubscribe@googlegroups.com
要查看更多选项,请访问 https://groups.google.com/d/optout

Hu Rui

unread,
Apr 16, 2014, 9:26:14 AM4/16/14
to sh...@googlegroups.com
嗯,这个说法很合理,以U盘启动时 BIOS给的是第一个顺序,所以是hd0。

Linux的系统识别这个可能需要了解具体内核的实现,所以很多文章都指出不要以hd 或 sd这一类来设定启动吧,因为不同内核,比如Linux类或*BSD类,在这个识别上是有误差的,现在越来越多的引导程序默认都是以UUID来识别了。

谢谢大侠指点。
Reply all
Reply to author
Forward
0 new messages