热搜词
发表于 2016-6-11 13:17:55 | 显示全部楼层 |阅读模式

grub命令行程序:


grub-editenv

编辑环境块的工具

grub-mkelfimage

生成一个GRUB的可启动映像

grub-mkfont

升级 GRUB 使用的字体

grub-mkimage

生成一个GRUB的可启动映像

grub-mkrescue

生成一个适用于软盘的GRUB的可启动映像

grub-dumpbios

创建vbios和int10转储

grub-install

在磁盘上安装 GRUB

grub-mkconfig

生成 grub 配置文件

grub-mkdevicemap

自动生成一个设备映射文件

grub-probe

为制定的目录或设备探测设备信息

grub-setup

设置映像从某个设备启动



grub命令参数解释:
命令
选项
解释
    boot
  
  无
  
  引导一个已定义的内核或链式装载程序。
  
    cat
  
  filename
  
  显示指定的文件的内容。
  
    configfile
  
  filename
  
  加载指定的配置文件。
  
    help
  
  [command]
  
  显示帮助 — 一个命令列表或有关指定命令的帮助。
  
    initrd
  
  filename
  
  加载指定的初始 RAM 磁盘文件。
  
    insmod
  
  module_name
  
  加载指定的模块(驱动程序)。
  
    linux
  
  filename
  
  加载指定的 Linux 内核。
  
    ls
  
  [arg]
  
  列出设备或一个设备上的文件。
  
    reboot
  
  无
  
  重新引导计算机。
  
    set
  
  envvar=value
  
  将一个环境变量设置为等于某个值。
  

grub中设备与分区
GRUB2对设备与分区的命名规则举例如下,看看就能明白。需要说明的是磁盘从"0"开始计数,分区从"1"开始计数。
(fd0)          第一软盘
(hd0)          第一硬盘[大多数U盘与USB接口的移动硬盘以及SD卡也都被当作硬盘看待]
(hd1,1)        第二硬盘的第一分区(通用于MBR与GPT分区)
(hd0,msdos2)   第一硬盘的第二MBR分区,也就是传统的DOS分区表
(hd1,msdos5)   第二硬盘的第五MBR分区,也就是第一个逻辑分区
(hd0,gpt1)     第一硬盘的第一GPT分区
(cd)           启动光盘[仅在从光盘启动GRUB时可用]
(cd0)          第一光盘

grub2命令行下执行:
# ls -l
可以查看分区及其UUID。

清单
2. 使用 ls 查看文件系统的设备或内容


grub> ls(hd0) (hd0,gpt5) (hd0,gpt4) (hd0,gpt3) (hd0,gpt2) (hd0,gpt1)


grub> ls (hd0,gpt5)/abi-3.2.0-22-generic grub/ initrd.img-3.2.0-22-genericmemtest86+bin System.map-3.2.0-22-generic vmcoreinfo-3.2.0-22-genericvmlinuz-3.2.0-22-generic

清单 2 中的示例显示了一个具有单个磁盘 (hd0) 的计算机,该磁盘包含 5 个全局惟一标识符 (GUID) 分区表 (GPT) 分区。(hd0,gpt5) 的内容好像是一个 Linux /boot 分区,包含一个 GRUB 配置目录 (grub/)。您可能需要查看其他分区的内容,然后才能找到您的 Linux /boot 分区。如果您的系统未使用单独的 /boot 分区,则必须查找您的 Linux 引导 (/) 分区。

识别 GRUB 配置文件所在位置后,可以设置 prefix 和 root 环境变量,告诉 GRUB 在何处找到配置文件。这些变量分别识别 grub.cfg 所在的目录和它所在的分区:

grub> set prefix=(hd0,gpt5)/grub


grub> set root=(hd0,gpt5)

从这里,您可加载 normal 模块并启动它来调出 GRUB 菜单:
grub> insmod normal


grub> normal


--------------------------------------------------------
grub2配置

grub2-mkconfig -o /boot/grub2/grub.cfg 自动生成一个grub2配置文件。

grub2-setup /dev/sda 这使用默认的文件向设备上灌入grub。

       如果出现如下错误:

            grub-probe:error: Cannot find a GRUB drive for /dev/sda1

        请执行:grub2-install --recheck /dev/sda

       这个命令会修复上述错误。


      grub1.9等后期版本也有类似grub2的上述命令,用法基本相同。


update-grub或者update-grub2  命令,相当于grub2-mkconfig  和 grub2-setup 的结合。自动生成grub配置文件,并且直接向设备上灌如grub。



安装Grub2

      首先需要准备EFI分区.  在这里, Windows 7安装的EFI分区, 可以直接使用, 有关Windows7的信息不会被复写.
      启动Gentoo Linux或者其他Linux Live CD并chroot到本地硬盘
       mkdir -p /boot    # 创建mount点
       mount /dev/sda2   /mnt/efi # 假设EFI分区为sda2, 将它挂在/mnt/efi目录下.

      执行Grub2安装命令, 为了文件管理方便, 直接将文件安装在EFI分区的/grub2目录下.
     # grub2-install --directory=/usr/lib64/grub/x86_64-efi --target=x86_64-efi --root-directory=/mnt/efi --boot-directory=/mnt/efi --bootloader-id=GRUB2 --removable  sda1

       --directory     #定义了grub2安装的源文件位置, 缺省为/usr/lib64/grub/x86_64-efi
       --target         #定义了目标文件格式, 比如是64或32位EFI模式, 还是GRUB2-BIOS模式.
       --root-directory  #定义文件复制目标位置.  复制到哪里去?
       -- boot-directory  #定义启动目录, 缺省带/boot/grub2的prefix, 所以我们直接定义/就可以.



当你运行 grub-install 时,记得GRUB是安装到整个硬盘驱动器的主引导扇区而不是到一个具体分区,所以不要加上像/dev/sda1一样的分区号。

grub-install 是一个脚本,它完成以下任务:
    * 调用 grub-mkdevicemap 创建设备映像文件 /boot/grub/device.map
    * 复制 *.mod *.lst *.img 文件到 /boot/grub/
    * 调用 grub-probe 自动侦测文件系统类型
    * 调用 grub-mkimage 生成grub2内核文件 /boot/grub/core.img
    * 调用 grub-setup 安装引导记录到mbr或分区




全部评论1
灰儿 发表于 2016-7-30 23:27:12 | 显示全部楼层
一、开机出现 grub rescue 指令模式


假如看到grub rescue,表示mbr (master boot record)的资料,完全对应不上磁盘的状况,所以无法辨别系统的所有分区,更不用说连grub menu都无法读入。所以,处理的方法就是帮他找到grub的设置。





grub rescue>ls
(hd0), (hd0,msdos3), (hd0,msdos2), (hd0,msdos1)
ls可以列出所有的硬碟与分区,(hd0)是第一个硬碟,(hd0,msdos1)是第一颗硬碟的第一个分区。以此类推。输入指令时,可以简写成(hd0,1)表示。若是GPT分割,出现的会是(hd0,gpt0)的格式。


接下来我们必须了解各分区,到底是什麼分区?所以我们可以用ls列出文件列表判断,格式如下:
grub recue> ls (hd0,1)/
grub recue> ls (hd0,2)/
grub recue> ls (hd0,3)/
确定各个分区那个是 / ,哪个是/boot,哪个是swap后,就可以开始继续处理。现在假设 / 是(hd0,3),/boot 是(hd0,2)。


额外说明一下,(hd0,2)/grub下的i386-pc或者x86_64-efi目录,是放置grub模组所在:前者出现在以mbr开机的系统,后者出现在efi开机的系统 。你可以尝试 ls 看看,会发现列出一堆.mod档,这是开机所需要的文件,稍候我们也会需要其中一个模组。






接下来是正式设置,其实只有四行指令:

grub rescue> set root=(hd0,3)
grub rescue> set prefix=(hd0,2)/grub
grub rescue> insmod normal
grub rescue> normal
第一行指令:设置根目录所在的分区
第二行指令:设置grub目录。这样他才知道哪里去找模组。此行设置错误,第三行指令执行时,就无法载入模组。假如你的 /boot 没有额外分割,那这行就要写成 set prefix=(hd0,3)/boot/grub
第三行指令:载入normal模组
第四行指令:执行normal模组
normal模组作用是什麼?他会把一些指令,文件系统模组,及其他需要的模组自动呼叫进来。


假如你的grub.cfg没有问题,应该就可以看见grub菜单了。提醒一点,这模式下,指令只要打错,只能开机重来,无法重打一次覆盖之前的命令。


进入系统后,记得 处理grub的异常状况
回复

使用道具 举报

回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|手机版|小黑屋|管理员之家 ( 苏ICP备2023053177号-2 )

GMT+8, 2024-12-23 15:09 , Processed in 0.168194 second(s), 26 queries .

Powered by Discuz! X3.5

Cpoyright © 2001-2024 Discuz! Team