前言

我一直在用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. PHP获取当前周一、周末时间等(持续更新)

    获取周一和周日的日期 $week = date('w') == 0 ? 7 : date('w'); $Sunday = strtotime('today -' . ($week - 1) . 'da ...

  2. 【全网最全】springboot整合JSR303参数校验与全局异常处理

    一.前言 我们在日常开发中,避不开的就是参数校验,有人说前端不是会在表单中进行校验的吗?在后端中,我们可以直接不管前端怎么样判断过滤,我们后端都需要进行再次判断,为了安全.因为前端很容易拜托,当测试使 ...

  3. JS 模块化 - 02 Common JS 模块化规范

    1 Common JS 介绍 Common JS 是模块化规范之一.每个文件都是一个作用域,文件里面定义的变量/函数都是私有的,对其他模块不可见.Common JS 规范在 Node 端和浏览器端有不 ...

  4. KubePi主界面添加镜像仓库并授权给集群,供创建Deployment时选择镜像使用

    1.添加kubeoperator自带的nexus仓库 2.添加harbor 3.把添加的镜像仓库授权给集群 4.关于镜像仓库secrets的有关说明 5.实际效果 6.从添加授权的镜像仓库创建工作负载 ...

  5. 通俗易懂理解 MySQL B+树、数据存储、索引等知识

    文章转载自:https://mp.weixin.qq.com/s?__biz=MzI1MDgwNzQ1MQ==&mid=2247485630&idx=1&sn=681c9c0d ...

  6. es根据关键词查看某个指定索引的内容并删除

    # 根据关键词查询某个索引的内容 GET product/_search?q=title:测试商品 {"query":{"match_all":{}}} # 根 ...

  7. 1-VSCode搭建GD32开发环境

    一.使用VSCode开发GD32的原因 1-单片机开发用的最多的IDE为Keil,而Keil为商用软件,并非开源,而且只支持windows环境,介于当前关系,有断供的风险在. 2-其他IDE类似第1条 ...

  8. IDEA设置问题

    一. IDEA 相关设置 1.1 去除SQL语句的黄色背景 Settings > Editor > Inspections > SQL No data sources configu ...

  9. 数据火器库八卦系列之瑞士军刀随APP携带的SQLite

    来源:云数据库技术 数据库打工仔喃喃自语的八卦历史 1. 为导弹巡洋舰设计,用在手机上的数据库 2. Small and Simple, and Better 3. 如何看出是自己的娃:产品定位,特点 ...

  10. C#-7 结构和枚举

    一 什么是结构 结构是程序员定义的数据类型,有数据成员和函数成员,和类非常类似. 类是引用类型,而结构是值类型: 结构和类一样可以实现接口: 结构是隐式密封的,不能被派生: 结构类型的变量不能为nul ...