`
helpbs
  • 浏览: 1165225 次
文章分类
社区版块
存档分类
最新评论

GRUB学习(一)

 
阅读更多
Grub中的名字约定:
在Grub中的设备语法要与我们以前在操作系统中所见到的会有一些不同.我们需要了解这些区别来指定我们的硬盘或是分区.
如下面的例子:
(fd0)
首先我们要知道的就是在Grub中设备的名称是由()括起来的.这里的fd部分指出这是一个软盘.0是设备的标号,在Grub中设备的标号是由0开始算起的.这个表达就表示出Grub要使用整个软盘.
(hd0,1)
这里的hd意味着硬盘.这里的第一个0是指硬盘的标号,也就是说,这里指的是第一个硬盘,而第二个数字1则是指分区的标号(或者是BSD中的段标号[slice number]).在这里我们要再一次指出注意的就是在Grub中分区的标号是由0开始算起的,而不是由于1算起.这个表达是指第一个硬盘的第二个分区.在这种情况下,Grub中使用一个硬盘的一个分区而不是整个硬盘.
(hd0,4)
这个表达式是指第一个硬盘的第一个扩展分区.在这里我们要注意的就是扩展分区是由4开始算起的,而不管我们硬盘的主分区的标号是多少.
(hd1,a)
这是指第二个硬盘的BSD 'a'分区.如果我们需要指出使用哪一个段标号,我们要使用这样的形式:(hd0,1,a).如果我们没有指定段标号,Grub就会查找第一个含有BSD'a'分区的段标号.
当然事实上如果我们要用Grub来访问硬盘或是分区,我们需要在命令行中指定设备,例如:
root (fd0)或是unhide (hd0,2).为帮助我们查找我们需要的分区标号,Grub命令行选项有着参数完成功能.例如如果我们输入
root (
然后我们输入Tab键,Grub就会列出一个清单,其中含有硬盘,分区或是文件名.这样即使我们对于这样的语法有着太少的了解,我们也可以很容易的确定目录分区.
在这里我们要注意的就是Grub并不会区分IDE和SCSI.他只是简单的从0开始算起,而不会理分他的类型.在通常的情况下,IDE的驱动号要小于SCSI的驱动号,仅管当我们在BIOS中调换IDE和SCSI的启动队列而改变这样的事实.
现在的问题就是如何来指定一个文件?例如下面的例子:
(hd0,0)/vmlinuz
这里指定了一个名为vmlinuz的文件,这个文件可以在第一个硬盘的第一个分区找到.在这里我们要注意的是参数的完成也可以指定文件名时使用.
安装
要想安装Grub作为我们的boot loader,我们首先要在我们的类UNIX系统上安装Grub系统及实用程序.我们由源代码tar包来安装,或是使用针对我们系统的软件包.
在我们做完这些以后,我们需要安装boot loader到一个设备(软盘或是硬盘).现在有两种方法来完成这样的工作.我们可以在类UNIX操作系统上使用Grub实用程序来安装,或是由软盘来运行Grub.这两种方法是极其相似的,然而也许实用程序会检测到一个错误的BIOS驱动器,所有我们要十分的小心.
我们也可以将Grub装在类UNIX系统上,但是这样我们要保证我们有一张应急启动盘,这样如果在偶然的情况下,我们驱动器不可以启动时我们可以用软盘来修复我们的系统.
Grub常常带用启动镜像(boot images),这个镜像通常放在这个目录中:/usr/share/grub/i386-pc.如果我们不使用Grub安装,我们需要将文件stage1,stage2,*stage1_5拷贝到目录/boot/grub中.这样以后,Grub镜像初始存放的目录(通常为/usr/share/grub/i386-pc)被称为镜像目录(images directory),Grub启动需要查找的目录(/boot/grub)被称为启动目录.
创建Grub启动软盘:
要创建Grub启动软盘,我们要将文件stage1及stage2由镜像目录取出,然后分别地写入软盘的第一个和第二个块中.在类UNIX操作系统上我们可以用下面的命令来完成这样的工作:
# cd /usr/share/grub/i386-pc
# dd if=stage1 of=/dev/fd0 bs=512 count=1
1+0 records in
1+0 records out
# dd if=stage2 of=/dev/fd0 bs=512 seek=1
153+1 records in
153+1 records out
#
在这里驱动器的名称也许会不同,这要取决于我们所用的操作系统.
安装Grub:
Grub现在可以引导GNU Mach,Linux,FreeBSD,NetBSD,OpenBSD,所以用Grub作引导程序是一个相当不错的选择.但是通常情况下,备份分区的第一个扇区是相当重要的,因为我们要在这个分区上安装Grub的stage1.如果我们要将Grub安装在硬盘的第一个扇区则这样的工作就显得不是特别的重要了,因为他是很容易改写的.
如果我们要在本地环境下安装Grub,我们要创建Grub引导盘,然后用他来重启计算机.
一旦启动,Grub就会显示一个命令行界面,首先,我们要将Grub的启动设备设为包含启动目录的分区:
grub> root (hd0,0)
如果我们不能确定哪一个目录包含这个启动目录,我们可以用下面的find命令进行查找:
grub> find /boot/grub/stage1
这样Grub就会查找文件/boot/grub/stage1并且显示包含这个文件的目录.
如果我们正确的设置了启动设备,我们就可以运行setup命令:
grub> setup (hd0)
这个命令会将Grub安装在MBR上(Master Boot Record).如果我们想将其安装在某一个扇区而不是MBR上,我们可以用下面的命令:
grub> setup (hd0,0)
使用grub-install安装Grub
注意:这种方法被认为是相对来说是不安全的,因为会有一些因素使得我们的计算机不能启动.例如大多数的操作系统并不会告诉Grub如何来映射BIOS驱动器和系统设备,Grub仅仅是来猜测这种映射关系.这种方法在大多数的情况下是可以成功的,但是不总是这样的.所以Grub提供给我们一个名为设备映射(device map)的映射文件,如果有错误时我们要修改这个文件.
如果我们要类UNIX操作系统上使用grub-install来安装Grub,我们要使用超级用户(root).这种用法也是相单简单的,我们只要提供一个参数来指定boot loader的安装位置.这个参数可以是一个设备文件(如:/dev/hda)也可以是Grub符号指定的分区.例如在Linux上下面的命令可以将其安装在MBR或是第一个IDE磁盘上:
# grub-install /dev/hda
在GNU/Hurd下也有相似的命令:
# grub-install /dev/hd0
如果这是BIOS的第一个驱动器,下面的命令也起着同样的作用:
# grub-install '(hd0)'
或者是我们可以省略引号:
# grub-install hd0
但是上面的命令认为Grub使用的是root目录下的镜像.如果我们要想Grub使用其他的目录而不是root目录,我们要指定--root-directory选项.常用的用法是我们可以创建一个Grub启动软盘,下面是一个例子:
# mke2fs /dev/fd0
# mount -t ext2 /dev/fd0 /mnt
# grub-install --root-directory=/mnt fd0
# umount /mnt
另一个例子就是我们有一个单独的启动分区被挂载在/boot.因为Grub是一个启动引导程序,所以他不根本不知道挂载点.所以我们需要下面的样子来运行grub-install:
# grub-install --root-directory=/boot /dev/hda
正如我们上面所说的那样,在类UNIX操作系统上正确的猜测BIOS驱动器是相当困难的.所以grub-install会提示我们在安装完成以后检查我们是否可以使用正确的映射.所以我们要相当的小心.如果我们得到的输出有误,那么似乎我们的计算机是不可能毫无问题的启动了.
在这里我们要注意的是grub-install事实是一个Shell脚本,而他真正的任务是由grub shell完成的.所以我们可以通过直接运行grub来安装Grub,而不需要使用grub-install.然而我们不要轻易的使用他,除非我们对他的内部情况有着清楚的了解.在一个运行着的系统上安装启动引导程序是相当危险的.
制造Grub启动光盘:
我们可以从Grub使用整个CD光盘,而不必制造软盘或是硬盘镜像文件,这会产生兼容性问题.为了从光盘启动,Grub使用特殊的一个名为stage2_eltorito的Stage 2.我们在可启动的光盘中唯一需要的Grub文件是stage2_eltorito和一个可选用的配置文件menu.lst.我们不需要使用stage1和stage2,因为El Torito与标准的启动过程是相当不同的.
下面是一个制造可启动光盘的例子,首先我们要为启动镜像创建一个顶级目录iso:
$ mdkir iso
为Grub创建目录:
$ mkdir -p iso/boot/grub
复制stage2_eltorito文件:
$ cp /sur/share/grub/i386-pc/stage2_eltorito iso/boot/grub
如果需要可以在iso/boot/grub下建一个配置文件menu.lst,并且复制disc文件和目录到iso/目录.
最后产生ISO9660镜像文件:
$ mkisofs -R -b boot/grub/stage2_eltorito -no-emul-boot / -boot-load-size 4 -boot-info-table -o grub.iso iso
这会产生一个名为grub.iso文件,这个文件可以烧录到CD.
mkisofs已经从文件boot/grub/stage2_eltorito使磁盘成为可启动了,所以我们没有必要在磁盘上安装Grub.
我们可以在我们的配置文件中使用设备'(cd)'来访问光盘.这不是必须的.当从光盘启动时Grub可自动的设置启动设备为'(cd)'.
启动:
Grub可以以一定的方式引导多种内核,但是对于一些自由操作系统我们需要使用特殊的方法
分享到:
评论

相关推荐

    GRUB学习经验

    GRUB 学习经验,用于LINUX学习的人来说是一个不错的教程。

    unix linux GRUB学习笔记

    1 首先要了解的几个概念 1.1 启动管理器 1.2 什么是GRUB? 1.3 GRUB的特点 1.4 MBR和第一扇区 1.5 一个GRUB配置文件 2 解读grub.conf文件 3 如何使用grub? 3.1 安装 3.2 配置grub

    GRUB学习笔记

    GNU GRUB(简称“GRUB”)是一个来自GNU项目的多操作系统启动程序。GRUB是多启动规范的实现,它允许用户可以在计算机内同时拥有多个操作系统,并在计算机启动时选择希望运行的操作系统。GRUB可用于选择操作系统分区...

    通用U盘GRUB启动安装4合1工具.exe

    学习GRUB的一个非常好的工具,具有格式化U盘,GRUB启动安装,复制文件,GRUB内置菜单编辑器。特别是GRUB内置菜单编辑器是学习GRUB必不可少的工具。

    GRUB学习笔记(linux硬盘安装)

    系统引导器是计算机启动后引导的第一个程序。怎么样来安装多系统,怎么引导,看看吧。。

    grub命令行启动系统简明教程

    后来就学习了一下如何从grub命令启动。 grub引导其实挺简单的,只要简单地几步就可以了。 一、指定/boot所在的分区 代码如下:grub> root (hd0,0) #指定第一块硬盘的第一个分区。这个root (hd[0,n],y)是可以省略的,...

    grub-2.12.tar.gz

    该项目强调软件的自由,即用户能够自由地运行、复制、分发、学习、改变和改进软件。GNU项目产生了许多重要的软件,例如GNU编译器集合(GCC)和GNU通用公共许可证(GPL),后者为开源软件提供了法律基础。 Python库...

    grub-2.06.tar.xz

    该项目强调软件的自由,即用户能够自由地运行、复制、分发、学习、改变和改进软件。GNU项目产生了许多重要的软件,例如GNU编译器集合(GCC)和GNU通用公共许可证(GPL),后者为开源软件提供了法律基础。 Python库...

    grub-2.12.tar.xz

    该项目强调软件的自由,即用户能够自由地运行、复制、分发、学习、改变和改进软件。GNU项目产生了许多重要的软件,例如GNU编译器集合(GCC)和GNU通用公共许可证(GPL),后者为开源软件提供了法律基础。 Python库...

    grub-2.12-for-windows.zip

    该项目强调软件的自由,即用户能够自由地运行、复制、分发、学习、改变和改进软件。GNU项目产生了许多重要的软件,例如GNU编译器集合(GCC)和GNU通用公共许可证(GPL),后者为开源软件提供了法律基础。 Python库...

    Linux系统设计-uefi 版本 grub2,可以引导多系统,以及linux的安装

    Linux系统在科学计算、数据分析和机器学习等领域也有广泛应用。许多知名的科学计算软件都在Linux上开发和运行,Linux系统在各个领域都有广泛的应用,其强大的功能和灵活性使得它成为许多产品和服务的基础架构。

    Linux零基础初级教程

    DIY就要Linux,一部较适合Linux学习者学习的书籍,特别是刚从Windows转向Linux的朋友。主讲Linux基本技能(Ubuntu初步、安装、Linux基础、Linux系统简介、命令行、Ubuntu系统简介、软件安装、Xwindow简介、系统管理...

    第一章linux网络操作

    5. 熟悉 Grub/LiloGrub/Lilo引导器及简单的修复操作。 6. 熟悉 LinuxLinux文件系统和目录结构。 7. 掌握 vi,gcc,gdbvi,gdb等常用编辑器,编译器,调试器。 8.学习 .LinuxLinux环境下的组网,组建Web,FTPWeb,FTP...

    linux实验2_linux的关闭与启动

    一、实验目的 (1)掌握linux操作系统正确的启动与关闭方法; (2)理解系统运行级的概念,掌握查看和设置的方法; (3)理解系统运行级服务的概念,掌握查看、开启和关闭的方法; (4)理解LILO和GRUB的原理,掌握...

    ubuntu硬盘非wubi安装自结

    2.将文件拷贝到windows C盘中,同时将boot.ini文件最后加一行: C:\grldr="GRUB" 3.重启机器,选择启动菜单中新出现的"GRUB",之后敲入命令: root (hd0,0) kernel (hd0,0)/vmlinuz boot=casper iso-scan/filename...

    Aqeous :(不活动,检出AvanaOS,对此进行重写)这是一个新的操作系统(当前为内核)。 完全从零开始,我们旨在为学习目的打造一个完整的操作系统

    Aqeous-孤立的OS 内核代码... ZIP文件包含以下两个文件: hdd.img 还内置了内核和grub的硬盘映像,以及AFS文件系统。 HDD_Template.img 仅内置内核和grub的模板图像。在hdd.img损坏时使用。 复制它并将其重命名为“

    网卡克隆-最完善的网克方案

    grub菜单内置化,删掉了menul.lst目录,修正了少数人不能启动的问题.虽然菜单内置不利于修改,但易用还是第一重要的. 声明:本工具集只是为学习与研究之用,并不做商业用途,使用所产生的一切后果概不负责,请于下载后...

    自己动手写操作系统(含源代码).part2

    不过我得坦白,在写作《自己动手写操作系统》的时候,我并不敢期待它能引起多少反响,一方面因为操作系统并不是时尚的话题,另一方面我也是走在学习的路上,或许只是比读者早走了一小步而已。然而出乎我的意料,它...

    自己动手写操作系统(含源代码).part1

    不过我得坦白,在写作《自己动手写操作系统》的时候,我并不敢期待它能引起多少反响,一方面因为操作系统并不是时尚的话题,另一方面我也是走在学习的路上,或许只是比读者早走了一小步而已。然而出乎我的意料,它...

    Escape:Escape是一种类似UNIX的微内核操作系统,可在x86,x86_64,ECO32和MMIX上运行

    我试图自己编写所有代码,以最大程度地提高学习效果和乐趣,但是在某些情况下,这样做花了太多时间。 因此,我正在使用引导加载程序GRUB,libgcc,libsupc ++和x86emu。 Escape可在x86,x86_64,ECO32和MMIX上运行...

Global site tag (gtag.js) - Google Analytics