# 目录

[TOC]

# 概述

该工具可用于自动制作多操作系统安装盘,同时可用于对安装盘的分区进行管理。

![title](/api/file/getImage?fileId=5dde396256fec85278000038)

# 参数

## 模式

制作模式(刷ISO):

-m a:新创建分区刷ISO

r:在某已存在分区刷ISO

维护模式(不刷ISO):

-m d:删除某系统分区

i:删除所有分区,初始化U盘

p:打印各分区系统信息

## 目标磁盘设备名

-d 设备名:如-d /dev/sdb

## 目标磁盘分区号

-p 分区号:如-p 2(用于-m r和-m d)

## 目标系统架构

-a 系统架构:如-a x86_64(用于-m i)

## 使用分区表类型(还未支持)

-t mbr:使用MBR

gpt:使用GPT

使用分区表类型决定了是UEFI引导模式(使用GPT)还是Legacy引导模式(使用MBR)。

## 系统映像文件路径

系统映像文件路径:如/root/test.iso

# 示例

```

$ ./multios-install -d /dev/sdb -m i -a x86_64 # 清空磁盘分区,创建boot分区并初始化(安装用于x86_64的grub2,复制配置文件)

$ ./multios-install -d /dev/sdb -m a test.iso # 创建一个新分区,刷test.iso系统映像

$ ./multios-install -d /dev/sdb -m a ubuntu.iso # 创建一个新分区,刷ubuntu.iso系统映像

$ ./multios-install -d /dev/sdb -m r -p 3 CentOS.iso # 在/dev/sdb3刷CentOS.iso系统映像,替换刚才刷的ubuntu.iso系统映像

$ ./multios-install -d /dev/sdb -m d -p 2 # 将/dev/sdb2分区删除,同时删除相应的配置

$ ./multios-install # 不输入-d参数(这时即使输入其他参数也无效)进入交互模式

$ ./multios-install -d /dev/sdb -m p # 显示各系统分区信息

```

# 代码

https://github.com/ScottL97/MultiOS

# 注意点

## awk命令使用外部变量

通过-v fdev=$fdev传入。

## 取字符串第一个数值出错

也可以转换成数组后再取值,这里就直接截取了。

```

startnum=14 18

echo ${startnum%% .*}不能实现去掉空格和18

echo $startnum | sed 's/ .*//'可以实现

```

## label中包含空格

label中包含空格,使用下面命令报错:

```

$ sed -i '1a search --no-floppy --set=root -l '${label} menuentry.tmp

sed: can't read 18.04.3: No such file or directory

sed: can't read LTS: No such file or directory

```

所以使用双引号把整个处理命令包含,就不会把空格后面的单词当作下一个参数了:

```

$ sed -i "1a search --no-floppy --set=root -l ${label}" menuentry.tmp

```

必须使用双引号,因为单引号不会将$变量转换为它的值,而是直接打印出来。

# todo

## 进度条

- [x] dd命令收到USR1信号后会显示进度,所以让dd命令在后台执行,然后在一个循环里每隔5秒检测dd进程,并向dd进程发送一个USR1信号,当dd进程退出时退出循环。

- [x] 如果用户中途通过Ctrl-C中断执行,关闭dd进程,trap INT信号

- [] 如果正在执行dd命令,用户中断后删除没有写完整的分区

## dd命令的bs设置

- [] bs值会影响dd命令的执行效率,使用合适的bs值

## 空间浪费

- [] 如果两个分区之间删除的不是最后一个分区,U盘仍然会从后面添加新分区,导致一些空间无法使用。

## 提高效率

- [x] 可以同时在后台刷多个操作系统。

- [] 计算dd执行最快的bs值。

- [] grub只加载必要的模块。

## 增加boot分区修改模式

- [] 使用参数选择要修改的目标系统架构,重新安装相应系统架构的grub2,其他配置文件等不变。

## 删除分区后删除对应的grub菜单menuentry

- [] 删除分区后删除对应的grub菜单menuentry

## os.list增加各分区的大小

- [x] 使用os.list.tmp保存blkid的输出,再遍历该文件,使用fdisk -l等命令获取每个分区的大小,将os.list.tmp的每一行和每个分区的大小作为新的行,将新的输出保存到os.list

## 减少多余输出

- [] 操作过程还有一些mount、umount、mkdir的报错,不影响功能,但还是避免产生这些多余输出

## 使用-m r替换模式时检查分区容量是否足够

- [] 使用-m r替换模式时检查分区容量是否足够

## 完善交互模式,增加菜单

- [] 完善交互模式,增加菜单

## 支持多架构

通过uname -i获取架构,也可以手动设置。

## 支持Legacy boot

- [] 现在boot分区(第一个分区)默认配置为GPT分区表,支持Legacy需要改为使用MBR(DPT)而不是GPT,再执行grub2-install。

- [] 另外UEFI引导模式使用linuxefi和initrdefi命令加载内核和临时文件系统,Legacy使用linux16和initrd16命令,可能需要更改。

## 修改grub菜单界面

- [] 修改grub菜单界面,将各系统分开显示

## 多操作系统启动

- [x] 多操作系统启动使用grub2-mkconfig -o grub.cfg命令可以根据/etc/default/grub配置以及/etc/grub.d/下的脚本自动查找各个硬盘的操作系统以及每个硬盘上的不同内核版本,然后添加grub2菜单项,不需要制作工具。

## 检查本机操作系统和架构

- [] 不同操作系统安装软件的方式可能有所不同,所以需要检查本机操作系统和架构。

# bug

## 用户拉取代码执行时缺少kernel.img

[root@localhost MultiOS]# ./multios-install -d /dev/sdb -m i

Welcome to the MultiOS Installer!

[START INIT]

mkfs.fat 3.0.20 (12 Jun 2013)

/dev/sdb1: No such file or directory

mkdir: cannot create directory ‘/mnt/efi/grub2’: File exists

Installing for x86_64-efi platform.

grub2-install: error: cannot open `./x86_64-efi/kernel.img': No such file or directory.

[CHECK SUCCESS] OK

原因:

.gitignore中增加了*.img

解决方法:

修改.gitignore后重新提交。

## 缺少命令

用户可能会缺少mkfs.vfat、killall命令

解决办法:先检测用户使用的操作系统,然后检测是否有dosfstools、psmisc工具,如果没有就通过apt-get和yum安装。

## 缺少模块

制作ARM平台的安装盘,加载grub.cfg失败,报以下错:

```

error: file `/grub2/arm64-efi/efi_uga.mod' not found.

error: file `/grub2/arm64-efi/video_bochs.mod' not found.

error: file `/grub2/arm64-efi/video_cirrus.mod' not found.

```

linux安装光盘制作工具,(三)Linux平台多操作系统安装盘制作工具相关推荐

  1. 在linux安装光盘启动不了,linux光盘启动

    [以RedHat 7.3为例] 1.把安装盘的第一张放到光驱,然后重新启动机器,在BOIS中把系统用光驱来引导. 2.等安装界面出来后,按[F4]键,也就是linux rescue模式. 3.一系列键 ...

  2. 如何安装linux安装光盘中的软件包

    如何安装linux安装光盘中的软件包 一般linux安装光盘中会包含大量软件安装包,但linux无法直接读取光盘文件,想要安装其中软件,必须将光盘中的文件挂载到linux临时文件目录下,linux一般 ...

  3. linux安装光盘下载,教你如何下载Fedora 7安装光盘

    教你如何下载Fedora 7安装光盘 发布时间:2007-11-05 16:17:48来源:红联作者:Number 你可以从很多途径取得 Fedora 的安装光盘,其一是从网上下载安装光盘的 ISO映 ...

  4. linux设置操作系统安装盘的iso文件为安装源安装mysql服务_Linux 操作系统安装盘的定制...

    Linux 操作系统安装盘的定制 汪伦伟 2005 年 3 月 01 日发布 1引言 通常由于某种实际应用,需要一个包含所有最近更新的RPM包的操作系统发布盘,以备在安装时一次完成所有的更新操作,或者 ...

  5. EFI启动PE加Linux,macOS安装盘制作并添加EFI和WinPE

    macOS安装盘制作并添加EFI和WinPE制作macOS安装盘 准备:用Mac Downloader.app下载好安装包,下载好就在桌面上, 准备一个U盘,安装包大小一般都在8G以上,小U盘不够用. ...

  6. Linux 操作系统安装盘的定制

    本文阐述如何以一个现有的 RedHat Linux系统安装盘为蓝本,定制符合需要的 Linux 系统安装盘. 1 引言 通 常由于某种实际应用,需要一个包含所有最近更新的RPM包的操作系统发布盘,以备 ...

  7. macos安装盘第三方工具制作_一步一步教你为macOS创建系统安装盘

    电脑用久了就会比较卡,一般用户此时选择最多的是格式化硬盘重新安装系统,这在windows下非常容易,微软官方提供了安装盘制作工具.macOS稍微复杂一点,不过整理过程也是很简单的,本文就简单介绍一下如 ...

  8. CentOS7.5usb安装盘制作,inst.stage2=hd:LABEL=CentOS\x207\x20x\86_64找不到磁盘和无安装源问题

    entOS7.5usb安装盘制作, 解决linuxefi /images/pxeboot/vmlinuz inst.stage2=hd:LABEL=CentOS\x207\x20x\86_64问题 网 ...

  9. 水印图像读取与制作,三通道图转为4通道,制作透明图

    def watermark_handle(watermark_path):'''水印图像读取与制作,三通道图转为4通道,制作透明图:param watermark_path: 水印图像路径:retur ...

最新文章

  1. SQL,NoSQL优缺点总结
  2. 智慧城市新探索:摩拜京东联合利用智能单车数据检测违章停车
  3. 《Pro SQL Server Internals》部分翻译(P155-165)
  4. 监控j服务器jvm运行情况 - spring boot jvisualvm
  5. T extends ComparableT和T extends Comparable? super T含义
  6. [Ubuntu]使用dict/dictd英文字典
  7. ubuntu下面 将桌面换成 英文
  8. 十二、实战启动页(一)
  9. 5_python基础—条件语句(三目运算符)
  10. 19.Delete Documents-官方文档摘录
  11. 2021,我的年终总结......
  12. 标定_基于全景基础设施的多摄像机和3D激光雷达校准
  13. 【 地图系列 】 中国各省市县级 JSON 文件
  14. 通用模块(4)——EEPROM(AT24C08)
  15. 宝宝生活点滴(12.3)
  16. 保弘实业|成功投资理财要做到那几点
  17. 关于Arduino连接L298N供电问题
  18. 2018拼多多校招【最大乘积】Python解法
  19. 树莓派3B配置无线路由器
  20. 用shell脚本输出99乘法表

热门文章

  1. SpringBoot入门(四)——自动配置
  2. 定时任务crontab
  3. 机器学习笔记(2):线性回归-使用gluon
  4. 【转】Golang 关于通道 Chan 详解
  5. 第五十节,面向对象基本介绍
  6. jquery 检查 金钱类型
  7. (译)如何优化cocos2d程序的内存使用和程序大小:第二部分(完)
  8. 从零开始学习ASP.NET MVC 入门
  9. CVPR2021 最佳论文候选—提高图像风格迁移的鲁棒性
  10. 北京 | 蚂蚁集团共享智能团队招聘研究实习生