前言

我一直在用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启动方式引导的更多相关文章

  1. 【linux】U盘安装启动出现press the enter key to begin the installation process 就不动弹了

    今天在物理机上安装centOS6.5  64bit 系统的时候,出现了U盘安装启动出现press the enter key to begin the installation process 就不动 ...

  2. linux配置redis三种启动方式

    下载 wget http://download.redis.io/releases/redis-4.0.9.tar.gz 解压 tar -xzf redis-4.0.9.tar.gz -C /usr/ ...

  3. CentOS 6.8 Linux系统U盘制作启动项

    1.下载CentOS 6.8镜像文件: 2.下载地址:http://man.linuxde.net/download/CentOS_6_8 3.准备一个U盘,最好8G的: 4.下载UltraISO盘制 ...

  4. Linux 服务器 U盘安装(避免U盘启动)以及拔除U盘后无法引导系统

    一.U盘制作 首先下载两个文件: ·         rhel-server-6.3-i386-boot.iso    启动镜像 ·         rhel-server-6.3-i386-dvd. ...

  5. U盘支持启动windows和Linux

    1.我是利用大白菜先按照普通方法制作可以引导windows的启动盘,这个没什么好说了,就不多说了. 2.在U盘的根目录下添加一个放Ubuntu镜像的文件夹,然后将Ubuntu的iso文件拷贝至这个目录 ...

  6. 使用UltraISO制作linux系统安装u盘启动盘

    1.首先打开UltraISO软件,尽量下载最新版的,小编曾用某个旧版的UltraISO,制作的安装盘,不能不能识别磁盘,安装失败! 2.点击工具栏中的第二个打开镜像文件工具,如图红色方框标志按钮,然后 ...

  7. Linux添加快捷启动方式 (Ubuntu Debian CentOS)

    ubuntu桌面快捷方式的创建 debian添加快捷启动方式 centos 6 桌面建立应用程序的快捷方式的方法   今天用着用着ubuntu,突然抽搐了,感觉特别别扭,特别不方便.新装的应用程序不好 ...

  8. linux (fedora 28) 制作启动U盘,启动盘

    最近需要安装一款Linux, 由于使用的计算机系统为 fedora 28, 所以只能在linux 制作U盘 使用 df 或者 fdisk -l 查看 U盘文件: Disk /dev/sdb: byte ...

  9. linux环境下,springboot jar启动方式

    linux环境下,springboot jar启动方式 一.前台启动(ctrl+c会关掉进程) java -jar application.jar 二.后台启动(ctrl+c不会关闭) java -j ...

  10. java项目部署Linux服务器几种启动方式总结经验

    一:两种部署包: 部署之前先说下两种包,java项目部署到服务器一般有用war包的,也有用jar包的,微服务spring-cloud普及后大部分打包都是jar,部署之前先搞清楚自己要打war包还是ja ...

随机推荐

  1. 统一建模语言UML---类图

    什么是统一建模语言,来看看百科中的介绍统一建模语言(Unified Modeling Language,UML)是一种为面向对象系统的产品进行说明.可视化和编制文档的一种标准语言,是非专利的第三代建模 ...

  2. Windows Admin Center无法访问

    近日,有一台安装了Windows Admin Center的服务器无法访问了.遇到错误ERR_HTTP2_INADEQUATE_TRANSPORT_SECURITY.本以为这是更新了Chromium内 ...

  3. Java SE 7、接口

    接口 接口就是给出一些没有实现的方法,封装到一起,到某个类要使用的时候,在根据具体情况把这些方法写出来 语法 interface 接口名{ ​ //属性 ​ //方法 } class 类名 imple ...

  4. 深度剖析Istio共享代理新模式Ambient Mesh

    摘要:今年9月份,Istio社区宣布Ambient Mesh开源,由此引发国内外众多开发者的热烈讨论. 本文分享自华为云社区<深度剖析!Istio共享代理新模式Ambient Mesh>, ...

  5. 第六章:Django 综合篇 - 14:Django 日志

    Django使用Python内置的logging模块实现它自己的日志系统. 如果你没有使用过logging模块,请参考Python教程中的相关章节. 直达链接<logging模块详解>. ...

  6. kubeadm使用外部etcd部署kubernetes v1.17.3 高可用集群

    文章转载自:https://mp.weixin.qq.com/s?__biz=MzI1MDgwNzQ1MQ==&mid=2247483891&idx=1&sn=17dcd7cd ...

  7. Elasticsearch基础但非常有用的功能之一:别名

    文章转载自: https://mp.weixin.qq.com/s?__biz=MzI2NDY1MTA3OQ==&mid=2247484454&idx=1&sn=43e95a2 ...

  8. MongoDB分片集群中配置参数说明

    replication:   #副本集的名称 replSetName: myshardrs01 sharding: #分片角色 clusterRole: shardsvr sharding.clust ...

  9. 2022IDEA破解

    注意 本教程适用于 IntelliJ IDEA 2022.1.2 以下所有版本,请放心食用~ 本教程适用于 JetBrains 全系列产品,包括 IDEA.Pycharm.WebStorm.Phpst ...

  10. 鼠标悬停过度事件:Transition

    CSS代码:<style> div{width:100px;height:100px;background:blue;transition: 0.5s;//0.5秒完成}div:hover ...