U盘中的Boot

  1. grub4dos
    1. grub4dos安装
    2. grub4dos设备命名
    3. grub4dos命令参数
      1. 基本命令
      2. 引导命令
    4. grub4dos配置
  2. refind
    1. 安装refind
    2. 使用efi shell
    3. refind配置


记一下自己用的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

  • 官网:refind下载在官网中可以下载到refind,还有各种详细的帮助说明,只是全是英文的。
  • 在这里可以了解uefi
  • 安装:
    可以用bootice安装,直观方便;也可以用以下命令安装:
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 ]

文章标题:U盘中的Boot

本文作者:Yehuohanxing

发布时间:2017-06-08, 23:32:50

最后更新:2018-04-03, 23:26:42

原始链接:http://yehuohan.github.io/2017/06/08/笔记/U盘中的Boot/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录