关于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 ...
随机推荐
- 大规模数据分析统一引擎Spark最新版本3.3.0入门实战
@ 目录 概述 定义 Hadoop与Spark的关系与区别 特点与关键特性 组件 集群概述 集群术语 部署 概述 环境准备 Local模式 Standalone部署 Standalone模式 配置历史 ...
- Kubernetes(K8S)特性有哪些?
Kubernetes简介 Kubernetes是一个开源的,用于管理云平台中做个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单且高效,Kubernetes提供了应用部署,规划 ...
- 事件循环:微任务和宏任务在v8中实现的简单理解
微任务 在js中,当使用promise,会将当前任务加入事件执行的微任务队列,有且只有这一种方法可以,因为当使用了promise,在JS引擎中会触发VM::queueMicrotask,会向m_mic ...
- Java SE 16 record 类型说明与使用
Java SE 16 record 类型说明与使用 作者:Grey 原文地址: 博客园:Java SE 16 record 类型说明与使用 CSDN:Java SE 16 record 类型说明与使用 ...
- 8.maven上传jar包以及SNAPSHOT的一个坑
1,手动上传包 如何将一些新的外部包上传到私服当中呢? 首先是要登录上去,然后点击 Upload,找到 maven-local将jar包找到选中,然后填写对应的三个定位信息即可上传. 在引用的时候,道 ...
- SCI论文写作指南
目录 科技论文的特点 时态的使用 论文的逻辑结构 作者 选择期刊 写作 Title/论文题名 题名 题名的作用 题名基本要求 作者 作者姓名的拼音表达方式 作者单位名与地址的标署 摘要的写作与关键词 ...
- 为什么中国的To B企业都活的很“惨”?
说[中国的To B企业都活的很"惨"]容易引起误解,提问者的To B企业本意应该是软件服务,尤其是指CRM.ERP等强个性化需求的企业管理类软件服务,现阶段更侧重于数字化转型市场中 ...
- Debian+Wine For Termux,兼容Windows on arm的安卓手机子系统!
如果已经安装了termux,先删掉. 安装方法 下载安装我提供的termux 链接: https://pan.baidu.com/s/13hbp6igps18V2RJcOxgQIg 提取码: 1irn ...
- go使用JWT进行跨域认证最全教学
JWT前言 JWT是JSON Web Token的缩写.JWT本身没有定义任何技术实现,它只是定义了一种基于Token的会话管理的规则,涵盖Token需要包含的标准内容和Token的生成过程. JWT ...
- PHP全栈开发(三):CentOS 7 中 PHP 环境搭建及检测
简单回顾一下我们在(一).(二)中所做的工作. 首先我们在(一)中设置了CentOS 7的网络. 其实这些工作在CentOS 6中都是很容易的,因为有鸟哥的Linux私房菜这样好的指导. 但是这些操作 ...