- 记一下自己用的grub4dos和refind的使用记录。
 grub4dos : 用于管理bios的启动;
 refind : 用于管理efi启动,简单方便实用,界面美观,配合efi shell,UEFI启动超级容易。
grub4dos
grub4dos安装
- grub4dos下载
- 安装方式:bootice 或 grubinst 或 bootlace.com
- bootice: 官网下载, 除了安装外还有众多其它功能;
- grubinst:安装方便;
- bootlace.com:最好对dos命令比较熟悉,对硬盘分区命名等参数熟悉。
grub4dos设备命名
- 设备有ud, pd, nd, hd, cd, fd,
| hd | 磁盘类 | 
| cd | 光驱类 | 
| fd | 软驱类 | 
- 对应的16进制数值
| fd0 | 0x00 | 
| pxe | 0x21 | 
| ud | 0x23 | 
| hd0 | 0x80 | 
| hd32 | 0xa0 | 
| hd127 | 0xff | 
- 其它规则
| () | 空括号,表示当前设备 | 
| (md) | 内存驱动器,实现了将整个内存作为一个磁盘驱动器来访问 | 
| (hd0) | 第一块硬盘,0x80即是第一块硬盘,bootlace.com 0x80 即安装grldr到第一块硬盘 | 
| (hd1) | 第二块硬盘,0x81即是第二块硬盘 | 
| (hd-1) | 最后一个硬盘 | 
| (hd0, 0) | 第一块硬盘第一主分区,主分区(包括扩展分区在内)最多4个(0~3) | 
| (hd0, 4) | 第一块硬盘第一逻辑分区,逻辑分区从4开始 | 
| (hd0)+1 | 将第一块硬盘的第1个扇区当作一个文件 | 
| (hd0, 0)+2 | 将第一块硬盘的第一个分区的前2个扇区当作一个文件 | 
| (hd0)512+2 | 将第一块硬盘的第512个扇区后的2个扇区当作一个文件 | 
grub4dos命令参数
配置文件有问题时,自己就可以敲命令启动了。
基本命令
GRUB --config-file=str
  # 启动grub,str可以是命令(如str可以为 "reboot"),也可以是lst文件(如str可以为 (hd0,0)/menu.lst)
ls (hd0,0)/boot/
  # 列出boot下的目录和文件
ls /boot
  # 列出boot开头的目录和文件
ls dev
  # 列出所有驱动器(不包括分区)
debug on
find
  # 列出所有磁盘,包括分区(必须在debug on模式下)
find --set-root /ntldr
  # 查找包含/ntldr的设备,把第一个找到的设为当前设备
find --set-root uuid () xxxxxxxx
uuid xxxxxxxx
  # 设置uuid为xxxxxxxx的分区分根分区
uuid ()
uuid (hd0,0)
  # 显示设备的uuid
root
  # 显示当前设设备名称及相当信息
root (hd0,0)
  # 把(hd0,0)作为当前磁盘
map /pe.iso (0xff)
map --hook
  # 将pe.iso映射到(hd127)仿真磁盘,pe.iso要求连续存放,不能有碎片
map --mem /pe.iso (0xff)
  # 将pe.iso加载到内存,然后映射,pe.iso可以有碎片,要求内存容量比pe.iso大
map () (hd0)
map (hd0) ()
map --rehook
  # 磁盘交换,即把当前设备变成第一块硬盘
uuid
  # 列出所有设备的uuid
uudi (hd0,0)
  # 列出(hd0,0)的uuid
configfile /menu.lst
  # 加当menu菜单配置文件
halt
  # 关机
reboot
  # 重启
引导命令
kernel [--no-mem-option][--type=TYPE]FILE [ARG...]
  # 尝试载入主引导影像文件。其它项将被作为内核的命令行参数而传递给内核。
  # 使用此命令以前,内核所用到的模块应该被重新载入。
  # 参数 --type 用于说明内核的类型,包括 "netbsd", "freebsd", "openbsd", "linux", "biglinux" 和 "multiboot"。
  # 参数 --no-mem-option 用于说明不必自动传递 Linux 的内存参数。
initrd FILE[FILE...]
  # 加载Linux格式的初始化虚拟盘, 并设置必要的参数。
/*从iso启动Kali实例,镜像在/iso/kali/kali-linux-2016.1-amd64.iso*/
find --set-root /iso/kali/kali-linux-2016.1-amd64.iso
kernel /iso/kali/vmlinuz boot=live config boot=live username=root hostname=kali boot=live username=root hostname=kali findiso=/iso/kali/kali-linux-2016.1-amd64.iso
initrd /iso/kali/initrd.img
  # "/iso/kali/vmlinuz":从kali镜像中提取的vmlinuz文件
  # "boot = live ...findiso=/iso/...":从镜像引导文件中提取的参数
  # "/iso/kali/initrd.img":从kali镜像中提取的initrd.img文件
  # 若镜像已经解,可以直接加载镜像中已经有的引导,或直接加载引导文件
chainloader [--force]FILE
  # 加载扇区链式加载器,注意:在命令行下使用该命令后还需再执行 boot 命令才会真正启动。
chainloader /ntldr
  # 加载ntldr启动文件
chainloader (hd0,0)+1
  # 加载(hd0,0)的第一扇区
chainloader --force /bootmgr
  # 加载bootmgr,忽略启动标识有效性,强制启动
boot -1   (或boot -int18)
  # 根据Bios顺序启动下一设备
grub4dos配置
grub4dos配置,具体见里面的readme.txt
refind
安装refind
bcdedit /set {bootmgr} path \EFI\refind\refind_x64.efi
  # windows下,efi路径为一个fat32分区的\EFI\refind\refind_x64.efi
efibootmgr -c -l \\EFI\\refind\\refind_x64.efi -L rEFInd
  # linux下,"\\EFI\\refind\\refind_x64.efi"为挂载到/boot下的分区中的efi文件
使用efi shell
- 记住最简的使用规律:找到efi文件,然后load(加载)
- efi shell的使用:
*.efi
    #efi shell是一个命令行环境,有efi文件,直接输入 *.efi 就可以加载启动
fs0:
  # 一般是进入到shell.efi所在设备目录
ls
  # 列出目录和文件
la -a
  # 列出所有目录和文件,包括隐藏的
cd
  # 改变目录,cd ..向上一级目录
cp
  # 复制
rm
  # 删除
type
  # 显示文件内容
mkdir
  # 创建目录
touch
  # 建立文件
edit
  # 文本编辑器,可以更改文本配置文件,Ctrl+S是保存,Ctrl+Q是退出
hexedit
  # hex编辑
map
    # 显示所有磁盘映射
refind配置
- /efi/boot/refind_x64.efi:启动rEFInd引导管理
- /efi/tools/shell.efi:启动efi shell环境
refind配置,具体见里面的readme.txt
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 [ yehuohan@gmail.com ]