grub语法,grub详解

  grub语法,grub详解

  Grub中的命名约定:

  Grub中的设备语法与我们之前在操作系统中看到的有些不同。我们需要知道这些差异来指定我们的硬盘或分区。

  比如下面这个例子:

  (fd0)

  我们首先需要知道的是,在Grub中,设备的名称是用()括起来的。这里的fd部分表示这是一张软盘。0是设备的标签,Grub中设备的标签从0开始。这个表达式意味着Grub将使用整个软盘。

  (hd0,1)

  这里的Hd是指硬盘。这里的第一个0指的是硬盘的标签,也就是说这里指的是第一个硬盘,第二个数字1指的是分区标签(或者BSD中的[片号])。在这里,我们不得不再次指出,在Grub中,分区标签是从0开始的,而不是从1开始。这个表达式指的是第一个硬盘的第二个分区.

  (hd0,4)

  这个表达式指的是第一个硬盘的第一个扩展分区。这里要注意的是,扩展分区是从4开始的,与我们硬盘的主分区号无关。

  (hd1,a)

  这是指第二个硬盘的BSD a 分区。如果我们需要指明使用哪个段标签,我们将使用以下形式:(hd0,1,a)。如果我们不指定段标签,Grub将寻找包含BSDa 分区的第一个段标签。

  事实上,如果我们想使用Grub来访问硬盘或分区,我们需要在命令行中指定设备,例如:

  根(fd0)或取消隐藏(hd0,2)。为了帮助我们找到我们需要的分区标签,Grub命令行选项有一个参数完成功能。例如,如果我们输入

  根(

  然后我们输入Tab键,Grub会做一个硬盘、分区或者文件名的列表,这样即使我们对这个语法了解太少,也可以很容易的确定目录分区。

  这里要注意的是,Grub并没有区分IDE和SCSI。它只是简单地从0开始,但不区分它的类型。在正常情况下,IDE的驱动器号小于SCSI的驱动器号,尽管当我们在BIOS中更改IDE和SCSI的引导队列时,这一事实发生了改变。

  现在的问题是如何指定一个文件。例如,下面的例子:

  (hd0,0)/vmlinuz

  这里指定了一个名为vmlinuz的文件,这个文件可以在第一个硬盘的第一个分区中找到。在这里,我们应该注意,在指定文件名时也可以使用参数的完成。

  固定

  要安装Grub作为我们的引导加载程序,我们必须首先在我们的类UNIX系统上安装Grub系统和实用程序。我们可以通过源代码tar包安装它,或者使用特定于我们系统的软件包。

  完成这些之后,我们需要将引导加载程序安装到一个设备中(软盘或硬盘)。现在有两种方法可以做到这一点。我们可以使用Grub实用程序将其安装在类似UNIX的操作系统上,或者在软盘上运行Grub。这两种方法非常相似,但是可能实用程序会检测到错误的BIOS驱动程序,所以我们应该非常小心。

  我们也可以在类似UNIX的系统上安装Grub,但是这样我们就要保证我们有一个紧急启动盘,这样如果我们的驱动器意外启动不了,我们就可以用软盘来修复我们的系统。

  Grub经常使用引导镜像,通常放在这个目录:/usr/share/Grub/i386-pc。如果我们不使用grub安装,我们需要将文件stage1、stage2、*stage1_5复制到目录/boot/grub。以后,grub镜像最初存放的目录(通常是/usr/share/grub/i386-pc)称为镜像目录,Grub启动时需要查找的目录(/boot/grub)称为引导目录。

  创建Grub引导软盘:

  要创建Grub引导软盘,我们需要从映像目录中取出文件stage1和stage2,并分别将它们写入软盘的第一和第二块。在类似UNIX的操作系统上,我们可以使用以下命令来实现这一点:

  # cd /usr/share/grub/i386-pc

  # DD if=stage 1 of=/dev/fd0 bs=512 count=1

  1 0条记录在

  1 0条记录出来了

  # DD if=stage 2 of=/dev/fd0 bs=512 seek=1

  153 1记录在

  153 1项记录已完成

  #

  根据我们使用的操作系统,这里的驱动器名称可能会有所不同。

  安装Grub:

  Grub现在可以引导GNU Mach、Linux、FreeBSD、NetBSD、OpenBSD,所以使用Grub作为引导程序是个不错的选择。但是通常,备份分区的第一个扇区是非常重要的,因为我们需要在这个分区上安装Grub的stage1。如果我们想把Grub安装在硬盘的第一个扇区,这并不是特别重要,因为很容易重写。

  如果我们想在本地环境中安装Grub,我们需要创建Grub启动盘,然后用它来重启计算机。

  一旦启动,Grub将显示一个命令行界面。首先,我们将Grub的启动设备设置为包含启动目录的分区:

  grub根(hd0,0)

  如果我们不确定哪个目录包含这个启动目录,我们可以使用下面的find命令来找到它:

  grub查找/引导/grub/stage1

  然后,Grub将查找文件/boot/grub/stage1,并显示包含该文件的目录。

  如果我们正确设置了引导设备,我们可以运行setup命令:

  grub设置(hd0)

  这个命令将在MBR(主引导记录)上安装Grub。如果我们想把它安装在一个扇区而不是MBR上,我们可以使用下面的命令:

  grub设置(hd0,0)

  使用Grub-install安装Grub

  注意:这种方法被认为是相对不安全的,因为会有一些因素使我们的电脑无法启动。比如大多数操作系统都不会告诉Grub如何映射BIOS驱动和系统设备,Grub只是猜测这种映射关系。这种方法在大多数情况下都能成功,但也不总是如此。所以Grub给我们提供了一个名为device map的映射文件,如果有错误我们会修改这个。

  如果我们想使用Grub-install在类UNIX操作系统上安装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-安装hd0

  但是上面的命令认为Grub使用了根目录中的映像。如果我们希望Grub使用另一个目录而不是根目录,我们必须指定-root-directory选项。常见的用法是我们可以创建一个Grub引导软盘。这里有一个例子:

  # mke2fs /dev/fd0

  # mount -t ext2 /dev/fd0 /mnt

  # grub-install-root-directory=/mnt fd0

  #卸载/管理

  另一个例子是,我们在/boot中安装了一个单独的引导分区。因为Grub是引导加载程序,他根本不知道挂载点。因此,我们需要以下内容来运行grub-install:

  # grub-install-root-directory=/boot/dev/hda

  正如我们上面说的,在类UNIX操作系统上,要正确猜测BIOS驱动程序是相当困难的。所以grub-install会在安装完成后提示我们检查是否可以使用正确的映射。所以我们必须非常小心。如果我们得到错误的输出,似乎我们的计算机不能启动没有任何问题。

  这里要注意的是,Grub-install是一个Shell脚本,它真正的任务是由grub shell来完成的。所以我们可以不使用grb-install,直接运行grub来安装grub。但是,除非对其内部情况有清晰的认识,否则不要轻易使用。在运行系统上安装引导程序是非常危险的。

  制作Grub启动光盘:

  我们可以从Grub使用整张CD,而不必制作软盘或硬盘镜像文件,这样会造成兼容性问题。为了从CD引导,Grub使用一个特殊的Stage 2,称为stage2_El Torito。我们在可引导CD中需要的唯一Grub文件是stage2_eltorito和一个可选的配置文件menu.lst我们不需要使用stage1和stage2,因为eltorito与标准引导过程非常不同。

  以下是制作引导光盘的示例。首先,我们必须为引导映像创建一个顶级目录iso:

  $ mdkir iso

  为Grub创建目录:

  $ mkdir -p iso/boot/grub

  复制stage 2 _ elto文件:

  $ CP/sur/share/grub/i386-PC/stage 2 _ eltorito iso/boot/grub

  如果需要,可以在iso/boot/grub下创建一个配置文件menu.lst,将光盘文件和目录复制到iso/目录下。

  最后,生成ISO9660图像文件:

  $ mkisofs-R-b boot/grub/stage 2 _ elto rito-no-emul-boot/-boot-load-size 4-boot-info-table-o grub . iso iso

  这将产生一个名为grub.iso的文件,可以刻录到CD上。

  Mkisofs已经使磁盘可以从文件boot/Grub/stage2_eltorito引导,所以我们不需要在磁盘上安装Grub。

  我们可以使用配置文件中的设备(cd)来访问cd。这是不必要的。从CD引导时,Grub可以自动将引导设备设置为“(CD)”。

  开始:

  Grub可以以某种方式引导多种内核,但是对于一些自由操作系统,我们需要使用特殊的方法。

grub语法,grub详解