Linux 上制作多启动 U 盘

news/2024/7/6 7:32:26/文章来源:https://www.cnblogs.com/KZ25T/p/18269925

Linux 上制作多启动 U 盘

方法一 Ventoy

参考官网

方法二 手动安装 grub 后分别分区

我本人也曾经长期使用过 Ventoy,这个工具对于新手来说确实容易上手,而且工具功能丰富。不过随着探索的深入,我现在也不是很喜欢 Ventoy,原因可能有很多,比如说工具复杂、源码看不懂一点(因为我菜)、想要自己看看什么样的配置能完成多启动 U 盘的构造,毕竟在前 Ventoy 时代的人的做法似乎已经几乎在互联网上失传。而且我感觉 Ventoy 的做法看起来不太美观,我自己想 keep it simple,当然我认为对于大部分人来说,使用 Ventoy 仍然是一个最方便、稳妥、好用的选择。

系统环境

你需要一台 x86_64 的电脑,安装有 Linux 操作系统。

准备启动 iso

这里的启动 iso 包括 Windows PE、Linux Livecd、Linux 安装 CD(其实也是 Livecd)等。我准备的包括:

首先是 Windows PE,市面上的 Windows PE 很多,功能类似,但镜像目录结构好像千差万别。甚至有的用 windows boot manager 管理启动,有的用 grub 管理启动(这里什么 grub1 grub2 grub4dos 的我都见过),我也没做过,也不懂。我准备了现在比较常用的微PE和FirPE,他俩下载之后都是 exe 文件,选择生成 iso 之后得到两个 iso 文件,就是 PE 镜像。

其次是 Linux livecd,这个就简单了,因为我做过(可以参考我的制作方法),而且都是 grub 引导。这里我用的是我自己做的 livecd,别的没测试过,但我感觉应该都没问题。

前两个 win PE 的 iso,一个是 udf 文件系统,一个是 iso9660 文件系统;一个是 windows boot manager 引导,一个是 grub1 引导,不过最后还是都启动成功了。

另外还要计算每个 iso 的大小,可以用 ls -l 查看之后算出有多少 MB(1024进制),向上取整。

U 盘分区

如果你的 U 盘是空白 U 盘,或者内容都不要了,那么运行

sudo gparted

启动之后删除你的 U 盘上的分区,新建分区。如果有 N 个 iso,那么需要新建 N+1 个:

  • 第一个分区:fat32 格式,建议几十到几百 MB,用于安装 grub
  • 后边的分区,按照上文算出的 MB 数分区,分区格式选已清空或者未格式化(其实怎么选都行)

如果 U 盘有资料,那么需要在 gparted 里挤出来一部分空间(前后都行)使得至少能完成前文所述的分区。当然,安装 grub 的分区也不一定是第一个,注意下面的挂载即可。

另外,如有需要,比如 U 盘剩余空间做常规存储空间,那么也可以添加别的分区。

(我这里 sda3 是用来存放其他资料的)

调整之后点击对钩完成更改。

刻录 iso

把几个 iso 分别刻录到每个分区:

sudo dd if=debian.iso of=/dev/sda2 status=progress
sudo dd if=wepe.iso of=/dev/sda4 status=progress
sudo dd if=firpe.iso of=/dev/sda5 status=progress

然后 gparted 就会变成这样:

查看各个文件系统

每个刻录了 iso 分区的 U 盘,分别查看其引导文件。

对于 windows 来说,一般是 /boot/efi/bootx64.efi;对于 linux 来说,一般是 /boot/efi/grubx64.efi,但也可能有不一样的,比如大小写不一样,这种时候需要自己试试。

# 对每个 iso 的分区执行类似的操作
sudo mount /dev/sda2 /mnt/mobile # 挂载点自选
ls /mnt/mobile/boot/efi/grubx64.efi # 尝试找找有没有这样的文件,并且记下来此时的路径
sudo umount /mnt/mobile

然后使用 blkid 命令查看各个分区的 uuid;

经过测试,我的三个 iso 的启动文件分别是:

Debian Live       UUID: 2024-02-24-22-40-00-00   /EFI/boot/grubx64.efi
WEPE              UUID: xxxxx                    /EFI/BOOT/bootx64.efi
FirPE             UUID: xxxxx                    /efi/boot/bootx64.efi

安装、配置 grub

安装 grub:

sudo mount /dev/sda1 /mnt/mobile # 最后一个挂载点自己选
sudo mkdir /mnt/mobile/boot
sudo mkdir /mnt/mobile/EFI
sudo grub-install --target=x86_64-efi --removable --boot-directory=/mnt/mobile/boot --efi-directory=/mnt/mobile /dev/sda # 记得检查有没有报错

配置:

sudo touch /mnt/mobile/boot/grub/grub.cfg
sudoedit /mnt/mobile/boot/grub/grub.cfg

文件内容为:

insmod all_video
insmod gfxterm
insmod chain
menuentry "Debian Live" {search --fs-uuid --set=root 2024-02-24-22-40-00-00chainloader /EFI/boot/grubx64.efi
}
menuentry "WEPE" {set root=(hd0,gpt4)chainloader /EFI/BOOT/bootx64.efi
}
menuentry "FirPE" {set root=(hd0,gpt5)chainloader /efi/boot/bootx64.efi
}

需要注意的是:

  1. 经过我的尝试,那俩 windows PE 的 UUID 在 grub 里是读取不到的,而且 label 貌似也有问题,总之就是尝试各种办法也没能找到什么好的设置 root 的办法,于是只能硬写 root 为分区编号了。分区编号可以在 grub 界面进入 grub 命令行输入 ls 查看到。

  2. 如果有多个 linux livecd,不能直接用 chainloader:

    man live-boot
    

    可以发现,即使有多个 livecd,系统启动寻找根文件系统时并不会按照 grub 里 root 的位置寻找,而是挨个寻找各个分区。所以这时候需要找到每个 livecd 的 grub 的启动参数:

    sudo mount /dev/sda2 /mnt/kali
    cat /mnt/kali/boot/grub/grub.cfg
    # 找到 grub 里每个启动项 linux 那一行的启动参数,比如
    menuentry "Kali Live" --hotkey=l {linux   /live/vmlinuz boot=live components quiet splash noeject findiso=${iso_path}initrd  /live/initrd.img
    }
    

    那就需要给启动参数加上 bootfrom=/dev/sdXY 指定启动分区在哪,由此写入 U 盘启动分区的 grub 里:

    menuentry "Kali Live" --hotkey=l {search --fs-uuid --set=root xxxx-xx-xx-xx-xx-xx-xx-xxlinux   /live/vmlinuz boot=live bootfrom=/dev/sda2 components quiet splash noeject findiso=${iso_path}initrd  /live/initrd.img
    }
    

    才能正常启动。

chainloader 真是好东西,后边的东西记得按照自己之前搜索到的文件目录进行配置。万能引导器果然万能,甚至可以用 grub2 引导 grub1,grub2,grub4dos,windows boot manager。

配置完成之后解除挂载

sudo umount /mnt/mobile

重启按照你的电脑配置,选择 USB 启动即可使用这些 iso 镜像。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/731800.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux 创建体积小的桌面环境以运行微信和WPS

linux 创建体积小桌面环境以运行微信和WPS 使用 linux 做主力一年多了,最近准备重装系统。目前看来一些常用的闭源软件里,QQ 和搜狗输入法已经算是可以稳定使用了,但微信和 WPS 还有一堆问题,比如:微信:没有 linux 版,使用优麒麟的版本,那个是用网页版微信封装的,目录…

pta7-8分析

智能家居是在当下家庭中越来越流行的一种配置方案,它通过物联网技术将家中的各种设备(如音视频设备、照明系统、窗帘控制、空调控制、安防系统、数字影院系统、影音服务器、影柜系统、网络家电等)连接到一起,提供家电控制、照明控制、电话远程控制、室内外遥控、防盗报警、…

详解:把 Linux 系统做成 Livecd

详解:把 Linux 系统做成 Livecd本文比较长,制作 LiveCD 的时间也比较长Linux Livecd 有很多好处,比如常用于修复受损的系统,可以随时随地用一台电脑启动,对于 kali linux 来说用来做好人好事不留名,很刑很好。但是目前网上相关制作资料大多很差:要么是非常古老的资料,甚…

Sum of Single Effects Linear Regression (susieR):多个因果变异位点的鉴定

使用susieR鉴定多个因果变异位点只需要两个输入文件,一个输入文件是包含Zscore值的SNP位点(zscore.txt),另一个文件是LD matrix(LD.matrix.ld)。 zscore.txt 文件如下所示:LD.matrix.ld 文件如下所示:LD.matrix.ld 文件是通过plink生成的,使用到的命令如下: plink --…

中国居民膳食指南2022

梳理中国居民膳食指南2022中的重要信息中国居民膳食指南2022摘录 准则一 食物多样,合理搭配每天的膳食应包括谷薯类、蔬菜水果、畜禽鱼蛋奶和豆类食物。平均每天摄入12种以上食物,每周25种以上,合理搭配。每天摄入谷类食物200~300g,其中包含全谷物和杂豆类50~150g;薯类…

面经梳理-redis

梳理redis相关面经题目 Redis的高性能体现在哪些方面?纯内存访问 非阻塞I/O,Redis使用epoll作为I/O多路复用技术的实现,再加上Redis自身的事件处理模型将epoll中的连接、读写、关闭都转换为事件,不在网络I/O上浪费过多的时间 单线程避免了线程切换和竞态产生的消耗参考: 《…

Windows 10 迁移用户文件夹(C:\Users)到其他盘

Windows 10 迁移用户文件夹(C:\Users)到其他盘 目标:制作一个符号链接 C:\Users -> D:,像 linux 分区挂载那样。 事先说明:数据无价,请提前保存好用户目录数据。我本人是刚刚重装之后操作的,因此对数据不敏感。 本人参考了 Win11使用mklink转移C:\Users文件夹至非系统…

Nuxt3 的生命周期和钩子函数(二)

摘要:本文深入介绍了Nuxt.js框架中几个关键的生命周期钩子函数,包括app:redirected(SSR环境下重定向前触发)、app:beforeMount(CSR下应用挂载前)、app:mounted(CSR下Vue应用在浏览器挂载时)、app:suspense:resolve(CSR中Suspense组件解析子组件完成时)以及link:prefe…

性能测试教程

一、什么是性能测试 通俗地讲,性能测试就是检查一个系统或软件在承受各种工作负载时,它的表现如何。这就像你买了一辆新车,不仅要看它的外观和内饰,更想知道它在高速行驶、爬坡、满载等情况下的表现,比如油耗、速度、稳定性等。 在软件或系统领域,性能测试会模拟用户在实…

如何把 linux 桌面变得像 Windows

如何把 linux 桌面变得像 Windows @目录如何把 linux 桌面变得像 Windows第0步 下载主题第一步:搞 xfce 的窗口第2步 搞 xfce 的顶端状态栏第3步 搞 xfce 的终端第4步 搞 xfce 的快捷键 众所周知,linux 最好的桌面是 Windows(开玩笑,请勿当真);我本人比较喜欢 Windows 的…

URDF - 建模原理

1. 基本建模文件 URDF 基本单位:弧度 弧度/s 米 2. URDF进化版本 - xacro模型文件

linux在tty终端显示中文字符的最终解决办法(fbterm字体间距,简单实用)

linux在tty终端显示中文字符的最终解决办法(fbterm字体间距,简单实用)Linux 的tty文字终端默认是不支持中文的,这对我们使用文字终端办公造成一定困扰,而且还限制字体,只有几种并不好用的字体。这里我解决以上问题。 我的系统: uname -sr Linux 6.1.0-kali7-amd64基于D…

空气动力学复习总结

绪论与补充 流体的物理模型 流体定义:静止状态无法承受剪切应 连续介质假设:不考虑分子间隙,认为介质连续分布于流体所占据的整个空间。流体由连续的流体微团组成,宏观上要足够小,以反映流场“点”状态;微观上要足够大,以消除分子随机运动带来的宏观物理量在统计上的涨落…

cv2.imread

cv2.imread 是 OpenCV (Open Source Computer Vision Library)中的一个函数,用于读取图像文件。 参数:filename: 要读取的图像文件的路径。 flags:指定图像读取的方式。默认为 cv2.IMREAD_COLOR,表示读取彩色图像。可以使用以下标志修改读取方式:cv2.IMREAD_COLOR:默认参…

linux修改swap分区的方法,和需要注意的坑

linux修改swap分区的方法,和需要注意的坑 电脑配置:x86_64,Windows 10+kali linux双系统电脑。 $ uname -r 6.1.0-kali5-amd64修改的方法和我上一篇blog差不多,我销毁了 swap 之后又在另一个地方重建了该分区,再次重启之后 dmesg 发现启动时间多达41秒(平时10秒),而且耗…

hadoop00_大数据技术介绍

生态架构数据导入 离线方式处理的数据,需要通过 ETL 模块实现导入到大数据存储系统进行存储;其中 Sqoop 是常见的抽取结构化数据工具,而 Flume、LogStach 是用于抽取结构化、半结构化数据的工具。 数据存储 大数据的数据存储系统,最常见的包括分布式文件系统 HDFS;如果需要…

高级计算机网络--计算题

1.有如下的四个/24地址块,试进行最大可能的聚合 212.56.132.0/24 212.56.133.0/24 212.56.134.0/24 212.65.135.0/24主要区别在第三字节 1000 0100 1000 0101 1000 0110 1000 0111所以最长相同前缀为 1000 0100 为132212.56.132.0/22 2.一个UDP用户数据报的数据部分为4192B,…

猿人学第一题逆向

下xhr断点观察堆栈调用信息,发现没有异步任务 直接一步一步往下跟这个地方很可疑下断点看看 大概率是这个地方 扣代码点击查看代码 window = global;var hexcase = 0; /* hex output format. 0 - lowercase; 1 - uppercase */ var b64pad = ""; /* base-64…

linux(双系统电脑)缩小根目录分区、给/home单独分区的简单方法

linux(双系统电脑)缩小根目录分区、给/home单独分区的简单方法​ 电脑配置:x86_64,有1T的固态硬盘。Windows 10+kali linux双系统电脑。 $ uname -r 6.1.0-kali5-amd64在操作之前有 300G 作为一整个根目录安装 kali,文件系统 为 ext4,没有给 /home 单独分区。现在整个根目录…

5_Spring Bean Scope 失效分析

Scope作用域 1. Scope类型有哪些 截至目前为止,Spring 目前有如下几种scope:singleton: 从ioc容器中返回的都是同一个对象 prototype: 从ioc容器中可以返回多个对象 request: 该类型的bean的生命周期就和request请求一样,每当有request请求发送过来,就会创建一个bean对象放入…