关于linux建立u盘legacy启动方式引导
前言
我一直在用linux,但是我在linux制作pe启动盘无法实现,windows有很多制作pe启动盘的软件,如大白菜,u深度什么的,但是linux没有对应的软件,所以我想写一个类似的工具,那么就有必要研究一下,u盘启动方面的知识,到目前为止软件也写好了
u盘启动的方式
现在无论是电脑还有u盘,他们的启动方式只有两种:
1.uefi启动
2.legacy启动
关于uefi启动方式我之前有一篇文章详细说过,这里主要说一下legacy启动。也是一直困扰我很久的问题
与uefi启动不同的是,legacy启动是需要主引导记录的(或者分区引导记录),而主引导记录不是以文件的形式存在的,在硬盘或u盘里面存在的形式是存储到对应的数据块,这就导致坑了我很长时间
(关于更详细的解释,可以详细的看百度百科)
修改或查看主引导记录的软件
1.dg分区工具(查看对应扇区的二进制数据)
2.BOOTICE(查看或修改主引导记录)

点击 主引导记录按钮 就可以查看或修改主引导记录
grub4dos
大白菜启动盘legacy启动用的主引导记录是 grub4dos,占用16个扇区,一个扇区是512字节,这种引导方式也是大部分制作启动盘软件用的引导,可以启动windows也可以启动linux,而且这是个开源项目
怎么实现一个支持legacy启动的u盘
为了建立一个支持legacy启动的u盘,我使用grub4dos这种引导,可以通过bootice 这个软件将引导备份成二进制数据。
然后这个文件可以保存下来

图片中的主引导记录是windows nt 6.x mbr,所以你要提取出 grub4dos 的主引导记录,你可以下个大白菜启动盘制作工具,制作个启动盘,然后再从u盘中提取主引导记录。(不过这太傻了,所以我打算把资源放上来,会在文章结束给出链接)
然后使用dd工具将grub4dos主引导记录写入到新u盘
dd if=mbr.bin of=/dev/sdc bs=446 count=1
dd if=mbr.bin of=/dev/sdc skip=1 seek=1 count=15
mbr.bin 为我备份出来的主引导记录
sdc 为我u盘的设备名
这里我跳过 第一扇区的66字节(四个分区表4x16字节+结束标志 2字节),写入了u盘的前16个扇区
这里的原因可以看百度百科关于主引导记录的解释
1.主引导程序即主引导记录(MBR)(占446个字节)
可在FDISK程序中找到,它用于硬盘启动时将系统控制转给用户指定的并在分区表中登记了的某个操作系统。
2.磁盘分区表项(DPT,Disk Partition Table)
由四个分区表项构成(每个16个字节)。
负责说明磁盘上的分区情况,其内容由磁盘介质及用户在使用FDISK定义分区时决定。(具体内容略)
3.结束标志(占2个字节)
其值为AA55,存储时低位在前,高位在后,即看上去是55AA(十六进制)。
也就是我跳过了磁盘分区表项和结束标志,因为如果不跳过写入的话,新u盘会变成我之前备份u盘的容量大小,比如我重32g u盘备份出来主引导记录,然后还原到4g u盘里面,那么4g u盘也会变成32g,容量错乱,结束标志都一样,所以还原不还原都一样
另外前446 个字节是主引导记录,为什么grub4dos占用16个扇区呢?
关于这个问题,我详细的研究了一下,我单独只还原前 446个字节不还原后15个扇区的数据,然后用 bootice 软件是可以识别到引导的,由此推断前446个字节可以声明引导类型,而主引导逻辑写到后15扇区了,由此我想到了我也可写一个类似bootice的软件(linux平台上的),毕竟linux上还没有bootice这么好用的软件,只判断前446个字节的数据,从而识别主引导记录类型
回归正题
然后在u盘里面放一个 grldr 和一个 menu.lst 文件就可以legacy 启动用到grub4dos引导了
grub4dos 启动 bootmgr 命令
chainloader /bootmgr
boot
这里给一个menu.lst文件例子:
title Start
chainloader /bootmgr
boot
到这里支持legacy启动的u盘就已经制作好了,剩下的就是找一个较好的pe盘镜像了
其他
我制作了在linux上一件制作pe启动盘的软件


用pyqt5写的一个简单图形化界面。模拟启动调用的qemu 命令
补上: grub4dos主引导记录二进制数据+grldr下载地址
关于linux建立u盘legacy启动方式引导的更多相关文章
- 【linux】U盘安装启动出现press the enter key to begin the installation process 就不动弹了
今天在物理机上安装centOS6.5 64bit 系统的时候,出现了U盘安装启动出现press the enter key to begin the installation process 就不动 ...
- linux配置redis三种启动方式
下载 wget http://download.redis.io/releases/redis-4.0.9.tar.gz 解压 tar -xzf redis-4.0.9.tar.gz -C /usr/ ...
- CentOS 6.8 Linux系统U盘制作启动项
1.下载CentOS 6.8镜像文件: 2.下载地址:http://man.linuxde.net/download/CentOS_6_8 3.准备一个U盘,最好8G的: 4.下载UltraISO盘制 ...
- Linux 服务器 U盘安装(避免U盘启动)以及拔除U盘后无法引导系统
一.U盘制作 首先下载两个文件: · rhel-server-6.3-i386-boot.iso 启动镜像 · rhel-server-6.3-i386-dvd. ...
- U盘支持启动windows和Linux
1.我是利用大白菜先按照普通方法制作可以引导windows的启动盘,这个没什么好说了,就不多说了. 2.在U盘的根目录下添加一个放Ubuntu镜像的文件夹,然后将Ubuntu的iso文件拷贝至这个目录 ...
- 使用UltraISO制作linux系统安装u盘启动盘
1.首先打开UltraISO软件,尽量下载最新版的,小编曾用某个旧版的UltraISO,制作的安装盘,不能不能识别磁盘,安装失败! 2.点击工具栏中的第二个打开镜像文件工具,如图红色方框标志按钮,然后 ...
- Linux添加快捷启动方式 (Ubuntu Debian CentOS)
ubuntu桌面快捷方式的创建 debian添加快捷启动方式 centos 6 桌面建立应用程序的快捷方式的方法 今天用着用着ubuntu,突然抽搐了,感觉特别别扭,特别不方便.新装的应用程序不好 ...
- linux (fedora 28) 制作启动U盘,启动盘
最近需要安装一款Linux, 由于使用的计算机系统为 fedora 28, 所以只能在linux 制作U盘 使用 df 或者 fdisk -l 查看 U盘文件: Disk /dev/sdb: byte ...
- linux环境下,springboot jar启动方式
linux环境下,springboot jar启动方式 一.前台启动(ctrl+c会关掉进程) java -jar application.jar 二.后台启动(ctrl+c不会关闭) java -j ...
- java项目部署Linux服务器几种启动方式总结经验
一:两种部署包: 部署之前先说下两种包,java项目部署到服务器一般有用war包的,也有用jar包的,微服务spring-cloud普及后大部分打包都是jar,部署之前先搞清楚自己要打war包还是ja ...
随机推荐
- Sublime Text简单使用方法
一.新建和保存文件 一.点击文件,选择新建文件或者快捷键Ctrl+N 二.另存文件,选择保存位置,这里项目的命名以.py为后缀 二.保存代码 快捷键Ctrl+S,上方文字出现小圆点表示未保存 三.运行 ...
- Rust-语句和表达式
语句和表达式 Rust 的函数体是由一系列语句组成,最后由一个表达式来返回值,例如: fn add_with_extra(x: i32, y: i32) -> i32 { let x = x + ...
- 【疑难杂症】关于pycharm无法安装插件显示网络错误问题
今天实在受不了英文的pycharm了,想着赶紧装个中文的插件,结果插件界面给我说我网络有问题 search results are not loaded check the internet conn ...
- k8s 中的 Pod 细节了解
k8s中Pod的理解 基本概念 k8s 为什么使用 Pod 作为最小的管理单元 如何使用 Pod 1.自主式 Pod 2.控制器管理的 Pod 静态 Pod Pod的生命周期 Pod 如何直接暴露服务 ...
- K8S概念理解
Master 负责管理集群 负责协调集群中的所有活动,例如调度应用程序,维护应用程序的状态,扩展和更新应用程序. Worker节点是VM(虚拟机)或物理计算机,充当k8s集群中的工作计算机. 每个Wo ...
- 为什么数字化转型离不开 MES 系统?
确切的说应该是制造业企业的数字化转型离不开MES系统,原因很简单,制造业企业的核心工作是生产制造,做数字化转型就是对生产制造各个环节进行数字化改造,提质增效降成本,而MES系统是制造执行系统,是生产制 ...
- 集合框架——LinkedList集合源码分析
目录 示例代码 底层代码 第1步(初始化集合) 第2步(往集合中添加一个元素) 第3步(往集合中添加第二个元素) 第4步(往集合中添加第三个元素) LinkedList添加元素流程示意图 第5步(删除 ...
- PAT甲级英语单词整理
proper 正确 合适 vertex(vertices)顶点 respectively 个别 分别 indices 指标 索引 shipping 运输 incompatible 不相容 oxidiz ...
- Windows常用快捷键及基本的Dos命令
Windows 常用快捷键 Ctrl + C: 复制 Ctrl + V: 粘贴 Ctrl + A: 全选 Ctrl + X: 剪贴 Ctrl + Z: 撤销 Ctrl + S: 保存 Alt + F4 ...
- Charles的安装与使用
Charles是一款抓包工具,可以用来截取和发送手机APP上的各种请求 在windows上安装Charles,确保手机和电脑在同一个WIFI下,加上一些配置,就可以抓取手机上的APP请求 有能力的同学 ...