ciaoly
mbr引导的启动盘制作方法

access_time
brush 1238个字
whatshot 22 ℃

17年圣诞节网站的服务器出现问题需要使用引导盘进入救援模式, 奈何随身带的两个引导盘(Ubuntu 16.04 和 CentOS 6.8)都不能引导服务器, 反倒是后来找到的一个使用PE工具刻录的Windows PE盘能正常引导并启动, 联想到机器是06年的老古董, 遂决定自己制作MBR引导的启动盘.


1. 选择操纵系统加载引导器

有很多的系统引导加载程序都支持MBR引导, 所以针对不同的操作系统, 可以有多种不同的引导加载器可供选择, 例如Windows系统可以使用NTLDR、grub2、grub4dos等等, Linux系统则可以使用isolinux、grub2、grub4dos等等, Hackintosh的引导加载器只有变色龙支持mbr.

我个人选择的是grub4dos

2. 将系统加载引导程序写入mbr扇区

工具 :

在Windows上使用工具bootice(下载地址请百度之); 在Linux上可以使用grubinst(针对grub4dos)、bootlace.com(针对grub)、grub-install(针对grub2)甚至dd(大胆的想法), 总之Linux环境下要比Windows麻烦就是了.

实操:

Windows下使用bootice很简单, 以grub4dos为例: bootice主界面如下图示:

bootice主界面

  1. 目标磁盘选择要操作的磁盘(U盘或硬盘自己看着办)

  2. 点击主引导记录, 如图示:

主引导记录

可以看出我的U盘已经安装过grub4dos, 务必确认目标磁盘是要操作的磁盘

  1. 选择grub4dos并点击"安装/配置"

安装/配置

具体配置自行决定, 对于不明白的选项可以大胆尝试, 数据丢失这种小事请自行承担后果.

配置完之后点击"写入磁盘"

安装成功: 成功

Linux下建议自己大胆去飞, 不多言.

注意: 只有将引导加载程序写入了mbr扇区它才能被BIOS引导并发挥作用. 一般来说, 小小的mbr扇区是无法完全容纳操作系统引导加载程序的, 所以很多引导加载程序只是在mbr分区写入了一小段"加载代码", 真正的引导加载程序往往放置在某分区根目录下.

3. 复制引导加载程序主体

如上所述, 我们还需要将引导加载程序的主体程序放置在合适的位置(例如将GRLDR放置在启动盘某分区根目录下). 以grub4dos为例:

  1. 首先到grub4dos下载页面下载grub4dos.
  2. 找到grldr文件并将其放置到启动盘的根目录下

4. 将镜像文件提取到启动盘

提取并不是刻录, 只需要将镜像文件挂载(或者使用某些解压软件, 如7zip/bindzip/好压)然后将文件复制到启动盘的合适(随意)位置即可.

5. 制作引导加载器的配置文件

这一步可以说是比较难的一步了, 因为这一步涉及到启动加载器对应的命令、操作系统启动过程等多方面的知识. 不过对于一个封装好的发行版操作系统, 即使不了解这些知识也可以制作配置文件, 以CentOS 5.11 + grub4dos为例:

1. 找到CentOS 5.11的iso镜像文件(下载地址)

2. 打开iso文件, 找到它的引导加载器配置文件

CentOS 5.11 iso文件的引导加载器目录在 /isolinux/isolinux.cfg 它的启动引导加载器是isolinux, 因为我用的是grub4dos, 所以需要一定的"移植" 打开此文件, 关键配置内容如下:

label linux
  kernel vmlinuz
  append initrd=initrd.img 

3 制作适用于grub4dos的配置文件

这一步必须了解grub4dos的常用命令. grub4dos使用 title 指定菜单标题, 使用 kernel 指定内核镜像, 使用 initrd 指定init镜像, 使用 boot 开始引导操作系统, 等等等等.

grub4dos的配置文件是menu.lst, 一般将其与grldr放置在同一个目录下. 有menu.lst则修改, 无则新建. 当然在下载的grub4dos压缩包中也有附带的menu.lst模板可以用

参考isolinux.cfg, 可以得出grub4dos的对应代码如下:

title install centos 5.11
    find --set-root /grldr
    kernel /path/to/vmlinuz
    initrd /path/to/initrd.img
    boot

注意: 一般在使用grub4dos会指定一个根目录(用于绝对路径等), 使用find命令查找grldr文件并使用 --set-root附加选项将第一次找到grldr的目录设置为根目录. 在指定内核镜像和init镜像时, 可以使用相对路径或绝对路径, 但路径必须确保正确.

对于isolinux中append指定的内核参数, 直接以空格分隔的方式附件给kernel即可. 例如:

# Some code in isolinux.cfg
label ks
  kernel vmlinuz
  append ks initrd=initrd.img
# In menu.lst
title ks
    find --set-root /grldr
    kernel /centos/isolinux/vmlinuz ks initrd=/centos/isolinux/initrd.img
    boot

没错, initrd完全可以以内核附加参数的形式指定, 不过我还是喜欢使用initrd命令指定.

6. 重启计算机并使用启动盘引导

结束

进入CentOS 5.11系统救援模式的方法.

1. 在menu.lst文件中添加救援模式菜单项

title centos 5.11 rescue
    find --set-root /grldr
    kernel /path/to/vmlinuz linux rescue
    initrd /path/to/initrd.img
    boot

其实就是给内核传参数"linux rescue"

2. 将CentOS 5.11的iso镜像拷贝到U盘中

如果不这样做的话, 进入CentOS的救援模式之后, 它会提示如下错误:

Device/dev/sdb4 does not appear to contain centos CDROM image

救援模式错误截图

解决方法就是将iso镜像文件放置到启动盘中, 在提示指定镜像目录时指定iso文件路径即可.

选择对应驱动器

指定iso文件路径

#如无特别声明,该文章均为 ciaoly 原创,转载请遵循 署名-非商业性使用 4.0 国际(CC BY-NC 4.0) 协议,即转载请注明文章来源。
#最后编辑时间为: 2019 年 10 月 12 日


create 添加新评论


account_circle
email
language
textsms





关于 DreamCat

主题名称:DreamCat | 版本:X2.6.220211

主题开发:HanFengA7 | TeddyNight | Dev-Leo | CornWorld | WhiteBearcn | DFFZMXJ

Designed by HanFengA7 Power by Typecho

Copyright © 2015-2022 by LychApe All rights reserved!

加我的QQ
加我的微博
加我的支付宝
加我的微信