Linux 板


LINE

如果有多台硬碟,我通常会建议把grub优先灌在IDE硬碟上的MBR。为什麽? 先解释一些东西。『MBR』是什麽? MBR就是每台硬碟第一个磁区(Sector,它的大小是512bytes)。 当我们一启动电脑,BIOS作完一些基本的测试、初始化之後, 就会查询你之前所设定的开机顺序, 从开机顺序决定要去哪个装置读取程式来载入作业系统。 比如说今天设定从一台硬碟机启动,那麽BIOS就会去读取这台硬碟上的第一个磁区, 也就是所谓的MBR。MBR里通常存放者一些多重开机程式,例如grub、SPFdisk。 这些多重开机程式可以去硬碟上『装有作业系统』的 『不同的分割区』上的第一个磁区(称作boot sector,不要与MBR搞混) 启动作业系统核心loader(例如:Windows XP的NT kernel loader)。 作业系统核心被成功启动後,就可以使用作业系统了。 至於Linux的核心的loader就是grub。grub不能启动Windows的kernel, 所以必须要去分割区上的第一个磁区找到Windows kernel的loader。 所以grub中会有一个指令叫作『chainloader +1』 就是去读取一个Partition(分割区)的boot sector, 那个『+1』代表该Partiton的第一个Sector,『+2』代表第二个Sector、...依此类推。 但grub是一个功能强大的多重开机程式, 根本不可能把那麽多功能塞在一个512bytes的MBR上。 所以这个程式被切割成几个部份:Stage 1、Stage 1.5、Stage 2。 这三个档案可以在/boot/grub/底下找到。 Stage1大小为512bytes,所以刚好可以存在MBR上。 当电脑一开机,BIOS启动MBR上的grub Stage1,Stage 1会去启动硬碟上的Stage 1.5。 可是有一个问题出现了,Stage 1是如何找到Stage 1.5的? Stage 1只有区区的512bytes,是没有多余的能力可以操纵分割区上的档案系统, 所以没有办法用这个方法找到Stage 1.5。 而Stage 1其实是用一个方法找到Stage 1.5的档案,就是当初在安装grub到MBR时 Stage 1.5所在硬碟上的那一个磁区的位置会被纪录到MBR中, 所以Stage 1就会去指定的磁区位置找到Stage 1.5执行它。 那麽Stage 1.5是作什麽用的呢?Stage 1.5有很多个档案, 分别是用来处理档案系统(File System)用的。 像『fat_stage1_5』就是用来处理FAT Partition上面的档案用的、 『e2fs_stage1_5』是用来处理Ext2、3的档案系统用的。 所以grub到了Stage 1.5就可以由File System处理许多Partition上的档案。 那麽接下来Stage 1.5会去启动Stage 2。 Stage 2就是grub的主要核心,几乎大部分的功能都在里面。 可是又有一个问题出现了,Stage 1.5是如何找到Stage 2的? 答案是:因为Stage 1.5已经可以辨识Partition上的File System, 所以自然有办法找到Stage 2的档案。 Stage 2启动後会去读取menu.lst,然後grub的开机选单就呈献在我们眼前。 还有一件事要注意的,就是我们开机启动grub後, grub会对电脑上的每一台硬碟机命名。 BIOS一开机时会在主记忆体初使化BIOS中断服务(BIOS interrupts)。 grub似乎是从BIOS的中断服务得知电脑上的硬碟数量。 可是BIOS对每台硬碟机给的排序有一个特色(这一句话我不是很肯定), 就是可以用来开机的那一个硬碟机比较特殊,都是『第一个』硬碟机。 不管是用SATA、IDE、USB或SCSI硬碟开机,那一台硬碟就是『第一个』硬碟机。 其余的硬碟机分别会依 Primary IDE Master→Primary IDE Slave→Secondary IDE Master→ Secondary IDE Slave→SCSI、USB或SATA 作排序。如果该插槽的硬碟机不存在就跳过排序。(光碟机不算在内) 然後grub会依照BIOS所给定的排序,分别给每一台硬碟机一个名称--BIOS drive。 这个名称的命名是从数字『0』开始 (据说grub 2会改成从『1』开始。Partition的命名也是从『0』开始。), 第一台硬碟机就命名为『hd0』、第二台硬碟机就命名为『hd1』、 第三台『hd2』、...依此类推。 例如以下组合: [1] (『Primary IDE Slave HDD with grub』 + 『SATA HDD』), 从『Primary IDE Slave HDD with grub』开机 → 『Primary IDE Slave HDD with grub=hd0』,『SATA HDD=hd1』 [2] (『Primary IDE Master HDD』 + 『SATA HDD with grub』), 从『SATA HDD with grub』开机 → 『Primary IDE Slave HDD=hd1』,『SATA HDD with grub=hd0』 [3] (『Primary IDE Master HDD』 + 『Secondary IDE Master CDROM』 + 『Secondary IDE Slave HDD with grub』), 从『Secondary IDE Slave HDD with grub』开机 → 『Primary IDE Master HDD=hd1』 ,『Secondary IDE Slave HDD with grub=hd0』 现在大概清楚grub的命名原理了吧。 那为什麽我会建议把grub灌到IDE硬碟上呢? 举个例子:假设我们把Linux、grub灌在一台电脑的IDE HDD上的第3个分割区, 这台电脑还有一台SATA HDD。如果说今天改变主意,我们从IDE HDD启动Linux, 然後我们在Linux中想把grub灌在SATA HDD上。 我们会执行以下指令: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # grub >> root (hd0,2) >> setup (hd1) >> quit ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 这样grub Stage1是会被灌到SATA HDD上的MBR没错, 可是我们个Stage 1.5与Stage 2却是在『(hd0)』的硬碟上, 也就是说『Stage 1.5』所在的硬碟hd0上某个磁区的位置会被纪录到MBR中, 这样才可以给Stage 1找到。被纪录到MBR的不是只有Stage 1.5所在的磁区位置, 还有所在的硬碟代号--hd0。 如果现在就重新开机,并调整BIOS为从SATA HDD开机,就会出现失败。 为什麽?因为之前说过,用来启动grub的那一台硬碟是第一台硬碟, 本来我们从IDE HDD开机进Linux,那个时候的hd0指的是IDE HDD。 可是灌好grub到SATA HDD後,重新开机、调整BIOS开机顺序後, hd0变为SATA HDD那一台。在开机的时候, SATA HDD上grub会去找hd0上某一处磁区的Stage 1.5。 可是我们知道Stage 1.5应该是在IDE HDD上才是, 并不存在SATA HDD上,所以会产生错误。 诸如此类的问题还有不少,所以我是建议把grub灌在IDE硬碟上。 如果没有IDE硬碟,就不用担心这个问题,就把它灌在SATA、SCSI、USB硬碟上。 其实上面的讲法不够好,更一般的说法是: 请按照 Primary IDE Master→Primary IDE Slave→Secondary IDE Master→ Secondary IDE Slave→SATA 1→SATA 2→.... 的顺序安装在以上第一个出现的硬碟机上。 不过上面那个失败的范例也是有解决的方法, 就是手动指定装置档对应到BIOS drive。可以使用grub的『device』指令。 指令如下,请自行意会: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # grub >> device (hd1) /dev/hda >> device (hd0) /dev/sda >> root (hd1,2) >> setup (hd0) >> quit ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 还有一个grub的问题就是装置档的问题。现在许多Linux Distribution使用 udev来管理装置档(也就是/dev底下的那些档案)。 可是udev在Linux核心开机後才会动态制作那些装置档,例如/dev/hda、/dev/sda。 我们常用Live CD去救援的时候,在chroot到我们要被救援的Linux partition後, 会发现grub抓不到任何硬碟。这是为什麽? 这是因为似乎grub在作业系统中执行的时候(就是不是在开机的时候执行), 是去/dev底下搜寻硬碟机的。 可是那个被救援的Linux partition的Linux核心并没有被启动,udev也没有正常执行, 所以在chroot後的/dev底下没有任何有关硬碟的装置档, 所以此时grub会找不到任何硬碟机。 解决的方法是用『mknod』这个指令手动创造装置档。 例如: # mknod /dev/hdc b 22 0 是用来创造hdc这个装置档到/dev底下。 那个『22』不是乱打的,它可以在Linux kernel Document查到 /usr/src/linux/Documentation/devices.txt 而那个『0』指的就是/dev/hdc本身。 如果要创造/dev/hdc4这个装置档,可以用这个指令。 # mknod /dev/hdc4 b 22 4 以下是一些常用的代号: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 3 block First MFM, RLL and IDE hard disk/CD-ROM interface 0 = /dev/hda Master: whole disk (or CD-ROM) 64 = /dev/hdb Slave: whole disk (or CD-ROM) 22 block Second IDE hard disk/CD-ROM interface 0 = /dev/hdc Master: whole disk (or CD-ROM) 64 = /dev/hdd Slave: whole disk (or CD-ROM) 8 block SCSI disk devices (0-15) 0 = /dev/sda First SCSI disk whole disk 16 = /dev/sdb Second SCSI disk whole disk 32 = /dev/sdc Third SCSI disk whole disk ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 制作好装置档後,再执行grub就可以找到硬碟了。 记得装完grub後要把手动制作的装置档rm掉,让udev来管理装置档。 (不删掉应该也不会有什麽问题) (如有错误,欢迎指正) -- 《金刚经》 又念过去於五百世,作忍辱仙人,於尔所世,无我相、无人相、无众生相、无寿者相。 http://web.cc.ncu.edu.tw/~93501025/jg.doc --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.115.218.133
1F:推 realmax:谢谢大大分享,好完整的解说,转寄回去慢慢研究:)_ 07/26 09:00
2F:推 allen0529:写的真好,我又学到很多知识罗(∩_∩) 07/26 11:03
3F:推 sagek:写的真详细 推 07/26 12:43
4F:推 jeonjh:很用心...推 07/26 14:33
5F:推 nfsong:推 01/18 10:01







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:WOW站内搜寻

TOP