请教mbr和grub的setup关系

系统安装、升级讨论
版面规则
我们都知道新人的确很菜,也喜欢抱怨,并且带有浓厚的Windows习惯,但既然在这里询问,我们就应该有责任帮助他们解决问题,而不是直接泼冷水、简单的否定或发表对解决问题没有任何帮助的帖子。乐于分享,以人为本,这正是Ubuntu的精神所在。
回复
头像
xjflyttp
帖子: 281
注册时间: 2006-10-18 0:36
来自: Core
联系:

请教mbr和grub的setup关系

#1

帖子 xjflyttp » 2009-04-17 15:48

我使用/dev/sda和/dev/sdb实现一个raid1软阵列
跟着把grub分别安装到sda和sdb上.

问题是..
默认安装 ubuntu会把grub安装到sda...
那我是不是可以直接用
dd if=/dev/sda of=/dev/sdb bs=512 count=1
去复制sda设备上面的mbr到sdb上呢?...
T60p/T7600/2G/WD1600BJKT/BT/AR5008/V5200/15' QXGA
ryoohki
帖子: 3249
注册时间: 2008-10-28 20:18

Re: 请教mbr和grub的setup关系

#2

帖子 ryoohki » 2009-04-17 16:53

不能在软raid上面设置mbr的,只能通过在另外的一个普通硬盘上设置mbr再安装grub来引导软raid盘,并且linux系统的/boot目录也不能直接装在软raid上
头像
larryli
帖子: 66
注册时间: 2006-03-10 11:10
来自: 广东 深圳
联系:

Re: 请教mbr和grub的setup关系

#3

帖子 larryli » 2009-04-17 17:39

ryoohki 写了:不能在软raid上面设置mbr的,只能通过在另外的一个普通硬盘上设置mbr再安装grub来引导软raid盘,并且linux系统的/boot目录也不能直接装在软raid上
可以的。以前在 debian 3.0 woody 上手工設置過軟 raid,就安裝時一塊硬盤,安裝完成開啟 raid1 加硬盤。
現在 debian 和 ubuntu 都支撐在安裝時就開啟 raid。
ryoohki
帖子: 3249
注册时间: 2008-10-28 20:18

Re: 请教mbr和grub的setup关系

#4

帖子 ryoohki » 2009-04-17 17:42

楼主如果是在raid上安装ubuntu的话,有关raid的题可以来询问我

在raid上安装ubuntu分2种情况:
1.通过主板内置的raid功能或者raid扩展卡组成raid
2.硬件设备上没有任何raid相关硬件(比如主板不带raid功能,也没有raid扩展卡)
以上2种安装raid的方法以及使用情况是截然不同的
像1的情况组成的raid被归类为硬raid,在此种raid上可以像普通的硬盘上那样设置mbr并安装grub
像2的情况就像我在2楼所说的情况那样

像现在情况下1类的情况比较多,像2的那种纯软raid在新硬件普及的情况下已经不多见了
ryoohki
帖子: 3249
注册时间: 2008-10-28 20:18

Re: 请教mbr和grub的setup关系

#5

帖子 ryoohki » 2009-04-17 17:51

larryli 写了:
ryoohki 写了:不能在软raid上面设置mbr的,只能通过在另外的一个普通硬盘上设置mbr再安装grub来引导软raid盘,并且linux系统的/boot目录也不能直接装在软raid上
可以的。以前在 debian 3.0 woody 上手工設置過軟 raid,就安裝時一塊硬盤,安裝完成開啟 raid1 加硬盤。
現在 debian 和 ubuntu 都支撐在安裝時就開啟 raid。
你那软raid种情况是先在硬盘上划出一块空间,然后系统配置好/boot,再将mbr写入那段空间里去,再使用剩余的磁盘空间配合新加入的硬盘组成的raid1,真正和引导有关的mbr和grub并没有写入raid1区块内,而是放在了那块没有组成raid的分区空间里.
头像
xjflyttp
帖子: 281
注册时间: 2006-10-18 0:36
来自: Core
联系:

Re: 请教mbr和grub的setup关系

#6

帖子 xjflyttp » 2009-04-19 22:52

ryoohki 写了:不能在软raid上面设置mbr的,只能通过在另外的一个普通硬盘上设置mbr再安装grub来引导软raid盘,并且linux系统的/boot目录也不能直接装在软raid上
是这样的..
我现在大多数情况使用的是两块硬盘组成mdadm的系统软raid
/dev/sda
/dev/sdb

划分出三个分区
/dev/sda1 type=fd
/dev/sda2 type=fd
/dev/sda3 type=fd

/dev/sdb1 type=fd
/dev/sdb2 type=fd
/dev/sdb3 type=fd

使用/dev/sd{a,b}1 组成 /dev/md0 格式化ext3 挂载 /boot
md1 挂载swap
md2 挂载 /

安装完成以后默认ubuntu/centos他们都只会把grub引导安装到/dev/sda里面...
我则需要额外执行
grub
device (hd1) /dev/sdb
root (hd1,0)
setup (hd1)
quit

这样安装到sdb,不然当sda损坏时会出现用sdb启动无法引导...


由此引发我的一个想法....(前提:我不了解mbr里面结构,也不知道setup(hd1)写的是什么区域)..

当如果我忘记了执行grub 安装到sdb上面的话 用
dd复制sda上面的0磁道到sdb上 事实上无法从sdb引导...
由此产生一个疑问...
grub 里面的setup对硬盘做了些什么...不是写mbr吗? 还是说不同硬盘上面的mbr是不同的?...

不知道这样讲清楚没有...
望高手指点迷津....谢谢 :em11
T60p/T7600/2G/WD1600BJKT/BT/AR5008/V5200/15' QXGA
ryoohki
帖子: 3249
注册时间: 2008-10-28 20:18

Re: 请教mbr和grub的setup关系

#7

帖子 ryoohki » 2009-04-20 14:17

因为想要linux系统识别软raid盘首先要先挂起linux的基本内核才能做到,而linux的基本内核,在默认情况下是存放在/boot目录下的,下面我们来简单分析下grub在引导系统的时候都做了些什么:

title Ubuntu, kernel 2.6.12-10-386
root (hd0,1)
kernel /vmlinuz-2.6.12-10-386 root=/dev/sda1 ro quiet
initrd /initrd.img-2.6.12-10-386
boot

以上是一段标准的grub引导ubuntu的启动项,它保存在/boot/grub/menu.lst中
有root这段是标识安装有grub引导程序的所在磁盘
有kernel这段表示加载linux内核文件,文件名为vmlinuz-2.6.12-10-386;所在盘符为/dev/sda1(这个盘符就是/boot所在地)
有initrd这段表示加载linux基本进程文件,文件名为initrd.img-2.6.12-10-386,盘符跟随linux内核文件所在盘符
有boot这段表示开始linux正式启动
从上面的分析可以得出以下结论,因为软raid需要linux内核来进行识别,因此在linux基本内核还未挂起的情况下,grub根本无法识别软raid,根本不用考虑如何去挂载存放在软raid内的linux基本内核了.
xjflyttp 写了: 由此引发我的一个想法....(前提:我不了解mbr里面结构,也不知道setup(hd1)写的是什么区域)..

当如果我忘记了执行grub 安装到sdb上面的话 用
dd复制sda上面的0磁道到sdb上 事实上无法从sdb引导...
由此产生一个疑问...
grub 里面的setup对硬盘做了些什么...不是写mbr吗? 还是说不同硬盘上面的mbr是不同的?...

不知道这样讲清楚没有...
望高手指点迷津....谢谢 :em11
mbr的引导过程其实是比较复杂的,不过我们可以简单的认为,写在mbr的数据是一个查找动作,它所查找的就是menu.lst这个文件在哪里,而menu.lst文件就标识出了系统的内核在哪里应该怎样启动,接着grub就按照meun.lst的内容来挂载系统,而menu.lst是属于grub的,menu.lst在哪里grub就在哪里,我们在执行grub时候运行的setup(hd1)就是告诉grub要把mbr这个查找动作的数据写到哪个硬盘里去{(hd?)是grub识别硬盘的表示方法,(hd0)代表你电脑上的第一块硬盘,如果(hd1)就表示电脑上的第二块硬盘,(hd2)就表示电脑上的第三块硬盘,/dev/sd??是linux识别硬盘的表示方法,/dev/sda表示电脑上的第一块硬盘,/dev/sdb表示电脑上的第二块硬盘},同时当你有块硬盘损坏时,你把那块损坏的硬盘移除后硬盘的顺序就发生了变化,这时你要去修改menu.lst内各个项目所对应的盘符才能正常启动了,比如说你原来的/dev/sda损坏了,你把它拿掉后,原来的/dev/sdb就变成了/dev/sda了
头像
xjflyttp
帖子: 281
注册时间: 2006-10-18 0:36
来自: Core
联系:

Re: 请教mbr和grub的setup关系

#8

帖子 xjflyttp » 2009-04-21 1:08

ryoohki 写了:因为想要linux系统识别软raid盘首先要先挂起linux的基本内核才能做到,而linux的基本内核,在默认情况下是存放在/boot目录下的,下面我们来简单分析下grub在引导系统的时候都做了些什么:

title Ubuntu, kernel 2.6.12-10-386
root (hd0,1)
kernel /vmlinuz-2.6.12-10-386 root=/dev/sda1 ro quiet
initrd /initrd.img-2.6.12-10-386
boot

以上是一段标准的grub引导ubuntu的启动项,它保存在/boot/grub/menu.lst中
有root这段是标识安装有grub引导程序的所在磁盘
有kernel这段表示加载linux内核文件,文件名为vmlinuz-2.6.12-10-386;所在盘符为/dev/sda1(这个盘符就是/boot所在地)
有initrd这段表示加载linux基本进程文件,文件名为initrd.img-2.6.12-10-386,盘符跟随linux内核文件所在盘符
有boot这段表示开始linux正式启动
从上面的分析可以得出以下结论,因为软raid需要linux内核来进行识别,因此在linux基本内核还未挂起的情况下,grub根本无法识别软raid,根本不用考虑如何去挂载存放在软raid内的linux基本内核了.
xjflyttp 写了: 由此引发我的一个想法....(前提:我不了解mbr里面结构,也不知道setup(hd1)写的是什么区域)..

当如果我忘记了执行grub 安装到sdb上面的话 用
dd复制sda上面的0磁道到sdb上 事实上无法从sdb引导...
由此产生一个疑问...
grub 里面的setup对硬盘做了些什么...不是写mbr吗? 还是说不同硬盘上面的mbr是不同的?...

不知道这样讲清楚没有...
望高手指点迷津....谢谢 :em11
mbr的引导过程其实是比较复杂的,不过我们可以简单的认为,写在mbr的数据是一个查找动作,它所查找的就是menu.lst这个文件在哪里,而menu.lst文件就标识出了系统的内核在哪里应该怎样启动,接着grub就按照meun.lst的内容来挂载系统,而menu.lst是属于grub的,menu.lst在哪里grub就在哪里,我们在执行grub时候运行的setup(hd1)就是告诉grub要把mbr这个查找动作的数据写到哪个硬盘里去{(hd?)是grub识别硬盘的表示方法,(hd0)代表你电脑上的第一块硬盘,如果(hd1)就表示电脑上的第二块硬盘,(hd2)就表示电脑上的第三块硬盘,/dev/sd??是linux识别硬盘的表示方法,/dev/sda表示电脑上的第一块硬盘,/dev/sdb表示电脑上的第二块硬盘},同时当你有块硬盘损坏时,你把那块损坏的硬盘移除后硬盘的顺序就发生了变化,这时你要去修改menu.lst内各个项目所对应的盘符才能正常启动了,比如说你原来的/dev/sda损坏了,你把它拿掉后,原来的/dev/sdb就变成了/dev/sda了

嗯..目前情况是这样的.
当我对/dev/sda和/dev/sdb 分别用grub/root(hd0/1) setup(hd0/hd1) 写入mbr以后..
使用任意一块硬盘都可以正确引导系统...而无需修改menu.lst...
我是这样理解的.
linux 软件raid 需要在引导内核后才会加载软raid1的模块..
而在此之前从bios启动到grub这个过程(包括读取内核镜像和initrd) 其实还是直接访问/dev/sda1 (/boot) 设备(或者是/dev/sdb1,由bios启动顺序决定.)
而此操作是只读所以不会引发软raid在启动后对阵列的同步..
而/dev/md1 (/boot) 分区的数据实际上是被linux软raid负责同步的.
当内核加载后则通过menu.lst里面指派的根目录/dev/md2设备挂载...
从而省略了修改menu.lst的步骤...(似乎一切系统挂载都已经被md设备替代,并没有直接访问/dev/sd*)

是不是可以认为mbr里面的数据对于两块硬盘来说是专属的...非一致的...
也是我直接用dd去复制/dev/sda的mbr到/dev/sdb无法在sdb上生效的原因?

刚才用dd把两块硬盘的mbr导出用二进制比较 发现的确是不同的...之前有点像当然了`~ :em04
T60p/T7600/2G/WD1600BJKT/BT/AR5008/V5200/15' QXGA
头像
larryli
帖子: 66
注册时间: 2006-03-10 11:10
来自: 广东 深圳
联系:

Re: 请教mbr和grub的setup关系

#9

帖子 larryli » 2009-04-21 1:49

grub 的 setup 操作只是在 mbr 安装一个一级引导,menu.lst 是二级引导的事情。
手工写一下就可以。
刚刚才想起用 woody 的时候,还是用的 lilo,引导是死的,所以不存在认不认 raid 的问题。。。
ryoohki
帖子: 3249
注册时间: 2008-10-28 20:18

Re: 请教mbr和grub的setup关系

#10

帖子 ryoohki » 2009-04-21 8:15

xjflyttp 写了: linux 软件raid 需要在引导内核后才会加载软raid1的模块..
而在此之前从bios启动到grub这个过程(包括读取内核镜像和initrd) 其实还是直接访问/dev/sda1 (/boot) 设备(或者是/dev/sdb1,由bios启动顺序决定.)
而此操作是只读所以不会引发软raid在启动后对阵列的同步..
而/dev/md1 (/boot) 分区的数据实际上是被linux软raid负责同步的.
当内核加载后则通过menu.lst里面指派的根目录/dev/md2设备挂载...
从而省略了修改menu.lst的步骤...(似乎一切系统挂载都已经被md设备替代,并没有直接访问/dev/sd*)
主要问题是grub根本不能识别软raid,就算你在menu.lst里强行写入/dev/md1,也是无法挂载的,因为/dev/md1(2)这个所谓的软raid设备根本是在linux基本内核挂起后才生成的设备,这就是在grub引导期间/dev/md1(2)这个设备根本就不存在,又何来能够通过软raid引导系统呢?
头像
xjflyttp
帖子: 281
注册时间: 2006-10-18 0:36
来自: Core
联系:

Re: 请教mbr和grub的setup关系

#11

帖子 xjflyttp » 2009-04-23 14:55

larryli 写了:grub 的 setup 操作只是在 mbr 安装一个一级引导,menu.lst 是二级引导的事情。
手工写一下就可以。
刚刚才想起用 woody 的时候,还是用的 lilo,引导是死的,所以不存在认不认 raid 的问题。。。

误解我的意思了...

有兴趣你也可以试试看把mbr从sda 复制到sdb 跟着用sdb引导... 实际上是启动不了的....


我从来没认为grub去认识md设备.... :em01

grub是直接访问/dev/sda1 或者/dev/sdb1 也就是我的boot分区挂载的md1设备...
实际上raid1只是1:1复制...直接识别为ext3 类型 是可以直接操作的... 而且载入内存是只读操作..

我的问题是复制sda的mbr到sdb 和 grub setup(hd0) setup(hd1) 的区别....
并且需要知道硬盘的mbr并不在软raid的管理之中...我的软raid是基于分区的,而不是整个磁盘...
这一点跟硬raid完全管理阵列成员是不同的...
因此才产生出我的问题... 也就是当完全挂掉的时候 需要更换bios引导顺序来保证启动的正常..
上次由 xjflyttp 在 2009-04-23 15:11,总共编辑 1 次。
T60p/T7600/2G/WD1600BJKT/BT/AR5008/V5200/15' QXGA
头像
xjflyttp
帖子: 281
注册时间: 2006-10-18 0:36
来自: Core
联系:

Re: 请教mbr和grub的setup关系

#12

帖子 xjflyttp » 2009-04-23 15:06

ryoohki 写了:
xjflyttp 写了: linux 软件raid 需要在引导内核后才会加载软raid1的模块..
而在此之前从bios启动到grub这个过程(包括读取内核镜像和initrd) 其实还是直接访问/dev/sda1 (/boot) 设备(或者是/dev/sdb1,由bios启动顺序决定.)
而此操作是只读所以不会引发软raid在启动后对阵列的同步..
而/dev/md1 (/boot) 分区的数据实际上是被linux软raid负责同步的.
当内核加载后则通过menu.lst里面指派的根目录/dev/md2设备挂载...
从而省略了修改menu.lst的步骤...(似乎一切系统挂载都已经被md设备替代,并没有直接访问/dev/sd*)
主要问题是grub根本不能识别软raid,就算你在menu.lst里强行写入/dev/md1,也是无法挂载的,因为/dev/md1(2)这个所谓的软raid设备根本是在linux基本内核挂起后才生成的设备,这就是在grub引导期间/dev/md1(2)这个设备根本就不存在,又何来能够通过软raid引导系统呢?

同样...您也曲解了我的意思...

那我在明确的说一下..
在加载内核以前..grub从mbr 到menu.lst 到 加载内核 这个过程是完全直接访问/dev/sda (sdb)设备 并不经过md , 他根本不认得什么是md

首先,通过grub setup对sdb进行安装 可以做到 从sda或者sdb 任意一个设备启动....

“这就是在grub引导期间/dev/md1(2)这个设备根本就不存在,又何来能够通过软raid引导系统呢?”
而我之前给过我的做法..

代码: 全选

grub
device (hd1) /dev/sdb
root (hd1,0)
setup (hd1)
quit
其次..grub是通过直接访问/dev/sda1 或者 /dev/sdb1 (由bios启动顺序决定) 中内核文件 加载内核...
并不是直接访问md设备的...
加载内核后识别了md设备,此后的所有io操作又会由两块阵列成员来完成.


我的疑问只是局限于mbr是否能通过复制让第二块硬盘也可以启动..... 并不是我不知道他们的流程.... :em01
T60p/T7600/2G/WD1600BJKT/BT/AR5008/V5200/15' QXGA
zwkno1
帖子: 1
注册时间: 2013-04-03 8:19
系统: ubuntu

Re: 请教mbr和grub的setup关系

#13

帖子 zwkno1 » 2013-07-19 16:03

用dd把boot所在的分区都复制过去就行了,setup不仅写mbr还写stage1,stage2
回复