常见的 GRUB 2 命令行命令
grub命令行程序:grub-editenv编辑环境块的工具grub-mkelfimage生成一个GRUB的可启动映像grub-mkfont升级 GRUB 使用的字体grub-mkimage生成一个GRUB的可启动映像grub-mkrescue生成一个适用于软盘的GRUB的可启动映像grub-dumpbios创建vbios和int10转储grub-install在磁盘上安装 GRUBgrub-mkconfig生成 grub 配置文件grub-mkdevicemap自动生成一个设备映射文件grub-probe为制定的目录或设备探测设备信息grub-setup设置映像从某个设备启动
grub命令参数解释:
命令选项解释
boot
无
引导一个已定义的内核或链式装载程序。
cat
filename
显示指定的文件的内容。
configfile
filename
加载指定的配置文件。
help
显示帮助 — 一个命令列表或有关指定命令的帮助。
initrd
filename
加载指定的初始 RAM 磁盘文件。
insmod
module_name
加载指定的模块(驱动程序)。
linux
filename
加载指定的 Linux 内核。
ls
列出设备或一个设备上的文件。
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 --removablesda1
--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或分区
一、开机出现 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的异常状况
页:
[1]