【Linux】Linux环境下制作ISO镜像与刻录U盘

article/2025/10/7 3:50:00

文章目录

  • 前言
  • 一、工具包安装
  • 二、自定义镜像文件
    • 2.1 拷贝
    • 2.2 更新软件包
    • 2.3 ks文件与启动项修改
    • 2.4 制作ISO文件
  • 三、制作USB启动盘(刻录U盘)
    • 3.1 插入U盘
    • 3.2 格式化U盘分区
    • 3.3 写入镜像
  • 四、总结


前言

本文是记录下在Linux环境下制作系统镜像文件,以及将该镜像文件刻录到U盘中 这两个场景。


一、工具包安装

[root@server ~]# yum install -y createrepo mkisofs dosfstools syslinux  

createrepo:用于对软件包生成分组索引信息
mkisofs:制作镜像文件
dosfstools:主要利用该工具包中的mkfs.vfat对U盘进行格式化
syslinux:使用该包中的isohybrid工具,将标准ISO文件转换成混合ISO,以便写入USB存储设备

二、自定义镜像文件

2.1 拷贝

找一个现有的镜像,挂载到本地,并将其所有内容,拷贝到自己即将打包的自建目录中。

[root@server ~]# mount /dev/sr0 /mnt/
mount: /dev/sr0 写保护,将以只读方式挂载
[root@server ~]# ls /mnt/
CentOS_BuildTag  EULA  images    LiveOS    repodata              RPM-GPG-KEY-CentOS-Testing-7
EFI              GPL   isolinux  Packages  RPM-GPG-KEY-CentOS-7  TRANS.TBL
[root@server ~]# mkdir customISO    
[root@server ~]# cp -ar /mnt/* customISO/[root@server ~]# ll customISO/
总用量 732
-rw-rw-r--. 1 root root     14 910 2019 CentOS_BuildTag
drwxr-xr-x. 3 root root     35 96 2019 EFI
-rw-rw-r--. 1 root root    227 830 2017 EULA
-rw-rw-r--. 1 root root  18009 1210 2015 GPL
drwxr-xr-x. 3 root root     57 910 2019 images
drwxr-xr-x. 2 root root    198 910 2019 isolinux
drwxr-xr-x. 2 root root     43 96 2019 LiveOS
drwxrwxr-x. 2 root root 561152 910 2019 Packages
drwxrwxr-x. 2 root root   4096 910 2019 repodata
-rw-rw-r--. 1 root root   1690 1210 2015 RPM-GPG-KEY-CentOS-7
-rw-rw-r--. 1 root root   1690 1210 2015 RPM-GPG-KEY-CentOS-Testing-7
-r--r--r--. 1 root root   2883 910 2019 TRANS.TBL

2.2 更新软件包

当有自己的实际需求时,将目标RPM包下载到customISO/Packages中,下载方式可以由YUM联网源直接下载,或者就自己Windows下载后并上传。

[root@server ~]# yum install docker -y --downloadonly --downloaddir="/root/customISO/Packages"      
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* centos-sclo-rh: mirrors.ustc.edu.cn
* centos-sclo-sclo: ftp.sjtu.edu.cn
* development: ftp.sjtu.edu.cn
* epel: mirrors.tuna.tsinghua.edu.cn
* extras: ftp.sjtu.edu.cn
* updates: ftp.sjtu.edu.cn
file:///media/repodata/repomd.xml: [Errno 14] curl#37 - "Couldn't open file /media/repodata/repomd.xml"
正在尝试其它镜像。
正在解决依赖关系
--> 正在检查事务
...
...
--> 解决依赖关系完成依赖关系解决==================================================================================================================
Package                                   架构      版本                                    源              大小
==================================================================================================================
正在安装:
docker                                    x86_64    2:1.13.1-209.git7d71120.el7.centos      extras          17 M
为依赖而安装:
atomic-registries                         x86_64    1:1.22.1-33.gitb507039.el7_8            extras          36 k
container-selinux                         noarch    2:2.119.2-1.911c772.el7_8               extras          40 k
container-storage-setup                   noarch    0.11.0-2.git5eaf76c.el7                 extras          35 k
containers-common                         x86_64    1:0.1.40-11.el7_8                       extras          43 k
docker-client                             x86_64    2:1.13.1-209.git7d71120.el7.centos      extras         3.9 M
docker-common                             x86_64    2:1.13.1-209.git7d71120.el7.centos      extras         101 k
fuse-overlayfs                            x86_64    0.7.2-6.el7_8                           extras          54 k
fuse3-libs                                x86_64    3.6.1-4.el7                             extras          82 k
oci-register-machine                      x86_64    1:0-6.git2b44233.el7                    extras         1.1 M
oci-systemd-hook                          x86_64    1:0.2.0-1.git05e6923.el7_6              extras          34 k
oci-umount                                x86_64    2:2.5-3.el7                             extras          33 k
python-dateutil                           noarch    1.5-7.el7                               development     85 k
python-dmidecode                          x86_64    3.12.2-4.el7                            development     83 k
python-pytoml                             noarch    0.1.14-1.git7dea353.el7                 extras          18 k
python-syspurpose                         x86_64    1.24.51-1.el7.centos                    updates        275 k
slirp4netns                               x86_64    0.4.3-4.el7_8                           extras          81 k
subscription-manager                      x86_64    1.24.51-1.el7.centos                    updates        1.1 M
subscription-manager-rhsm                 x86_64    1.24.51-1.el7.centos                    updates        334 k
subscription-manager-rhsm-certificates    x86_64    1.24.51-1.el7.centos                    updates        237 k事务概要
==================================================================================================================
安装  1 软件包 (+19 依赖软件包)总计:25 M
总下载量:25 M
安装大小:86 M
Background downloading packages, then exiting:
No Presto metadata available for development
No Presto metadata available for updates
(1/19): container-storage-setup-0.11.0-2.git5eaf76c.el7.noarch.rpm                         |  35 kB  00:00:00     
(2/19): atomic-registries-1.22.1-33.gitb507039.el7_8.x86_64.rpm                            |  36 kB  00:00:00     
(3/19): containers-common-0.1.40-11.el7_8.x86_64.rpm                                       |  43 kB  00:00:00     
(4/19): docker-client-1.13.1-209.git7d71120.el7.centos.x86_64.rpm                          | 3.9 MB  00:00:00     
(5/19): docker-common-1.13.1-209.git7d71120.el7.centos.x86_64.rpm                          | 101 kB  00:00:00     
(6/19): fuse-overlayfs-0.7.2-6.el7_8.x86_64.rpm                                            |  54 kB  00:00:00     
(7/19): fuse3-libs-3.6.1-4.el7.x86_64.rpm                                                  |  82 kB  00:00:00     
(8/19): oci-register-machine-0-6.git2b44233.el7.x86_64.rpm                                 | 1.1 MB  00:00:00     
(9/19): oci-systemd-hook-0.2.0-1.git05e6923.el7_6.x86_64.rpm                               |  34 kB  00:00:00     
(10/19): python-dmidecode-3.12.2-4.el7.x86_64.rpm                                          |  83 kB  00:00:00     
(11/19): docker-1.13.1-209.git7d71120.el7.centos.x86_64.rpm                                |  17 MB  00:00:00     
(12/19): oci-umount-2.5-3.el7.x86_64.rpm                                                   |  33 kB  00:00:00     
(13/19): python-pytoml-0.1.14-1.git7dea353.el7.noarch.rpm                                  |  18 kB  00:00:00     
(14/19): slirp4netns-0.4.3-4.el7_8.x86_64.rpm                                              |  81 kB  00:00:00     
(15/19): subscription-manager-1.24.51-1.el7.centos.x86_64.rpm                              | 1.1 MB  00:00:00     
(16/19): subscription-manager-rhsm-1.24.51-1.el7.centos.x86_64.rpm                         | 334 kB  00:00:00     
(17/19): subscription-manager-rhsm-certificates-1.24.51-1.el7.centos.x86_64.rpm            | 237 kB  00:00:00     
(18/19): python-syspurpose-1.24.51-1.el7.centos.x86_64.rpm                                 | 275 kB  00:00:00     
(19/19): container-selinux-2.119.2-1.911c772.el7_8.noarch.rpm                              |  40 kB  00:00:05     
------------------------------------------------------------------------------------------------------------------
总计                                                                              4.4 MB/s |  25 MB  00:00:05     
exiting because "Download Only" specified

此时,相关RPM包就更新到了Packages目录中。
因为软件包出现了变化,所以就需要重新更新关联信息。

[root@server customISO]# ls
CentOS_BuildTag  EULA  images    LiveOS    repodata              RPM-GPG-KEY-CentOS-Testing-7
EFI              GPL   isolinux  Packages  RPM-GPG-KEY-CentOS-7  TRANS.TBL
[root@server customISO]# ls repodata/
04efe80d41ea3d94d36294f7107709d1c8f70db11e152d6ef562da344748581a-primary.sqlite.bz2
41232548001a78473ae0f2d4b92e1ec28f7a0593e0495056515887fe2a39b416-filelists.sqlite.bz2
4af1fba0c1d6175b7e3c862b4bddfef93fffb84c37f7d5f18cfbff08abc47f8a-c7-x86_64-comps.xml.gz
521f322f05f9802f2438d8bb7d97558c64ff3ff74c03322d77787ade9152d8bb-c7-x86_64-comps.xml
879e9b33c0ecf18a99bdac5b607b1ea65dc66423b99bdf4214129c5d5923e475-other.sqlite.bz2
afe9c5f88d9c365382c0553424b18192b79f3da7c1e3d120818203e9a5d1a70a-primary.xml.gz
c1977f4def8aa2f0addb2695b9cc6a391ece8bb5d5b53d601db15df6240261f1-filelists.xml.gz
dc871e4d16c013169e2e42f7a7a0659116f5b63f7e07d9a30dccbef2f71a3f0c-other.xml.gz
repomd.xml
repomd.xml.asc
TRANS.TBL
[root@server customISO]# mv repodata/*comps.xml repodata/comps.xml
[root@server customISO]# cd repodata/
[root@server repodata]# ls | grep -v  comps.xml | xargs rm
[root@server repodata]# ls
4af1fba0c1d6175b7e3c862b4bddfef93fffb84c37f7d5f18cfbff08abc47f8a-c7-x86_64-comps.xml.gz  comps.xml
[root@server repodata]# rm -f 4af1fba0c1d6175b7e3c862b4bddfef93fffb84c37f7d5f18cfbff08abc47f8a-c7-x86_64-comps.xml.gz 
[root@server repodata]# ls
comps.xml
[root@server repodata]# cd ..
# 根据指定组文件,创建所有RPM关联信息
[root@server customISO]# createrepo -g repodata/comps.xml .
Spawning worker 0 with 5058 pkgs
Spawning worker 1 with 5058 pkgs
Workers Finished
Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete# 创建完成之后,repodata目录中生成新的关联文件
[root@server customISO]# ls repodata/
11715cacff3b3d5b21d6bd6200acd61b105941f62a00073c9b8d17fd432b1a0d-other.sqlite.bz2
45334bca3ac8e67670079121ec4c65172e9ef5b8339e57dc81356e77a9705992-filelists.sqlite.bz2
4af1fba0c1d6175b7e3c862b4bddfef93fffb84c37f7d5f18cfbff08abc47f8a-comps.xml.gz
521f322f05f9802f2438d8bb7d97558c64ff3ff74c03322d77787ade9152d8bb-comps.xml
5395c62d22fd7fc07b1730de01d2ebcb93c5534b7c0e388294156666fa3a8062-primary.sqlite.bz2
9911d0091adceaeaaebf586a4124a148e4942f172ac07234bda2c81378d112e4-primary.xml.gz
9ee2831230f18fc5e01a34f8fcec44a5b1264a751aca70f6507d632906322bcc-other.xml.gz
9f5deebd7b239a11736d2115e161d1e4f1eb645bc5bfcd9e09b21401f36e4a7d-filelists.xml.gz
repomd.xml

2.3 ks文件与启动项修改

准备Kickstart文件,复制一份模板过来,并根据需要自定义修改,这边就不细说。

[root@server customISO]# cp ~/anaconda-ks.cfg ks.cfg
[root@server customISO]# ls
CentOS_BuildTag  EULA  images    ks.cfg  Packages  RPM-GPG-KEY-CentOS-7          TRANS.TBL
EFI              GPL   isolinux  LiveOS  repodata  RPM-GPG-KEY-CentOS-Testing-7

修改启动项文件,在其中添加单独的一个启动项,设置为默认,并指明ks文件路径。

[root@server customISO]# vi isolinux/isolinux.cfg 
...label linux-ksmenu label ^Kickstart Install CentOS 7menu defaultkernel vmlinuzappend initrd=initrd.img inst.stage2=hd:LABEL=CentOS\x207\x20x86_64 inst.ks=hd:LABEL=CentOS\x207\x20x86_64:/ks.cfg quiet

2.4 制作ISO文件

[root@server customISO]# mkisofs -o /tmp/CentOS-7-x86_64-demo.iso -b isolinux/isolinux.bin -c isolinux/boot.cat --no-emul-boot --boot-load-size 4 --boot-info-table -J -R -V "CentOS 7 x86_64" ....99.69% done, estimate finish Sat Feb 25 22:51:15 202399.79% done, estimate finish Sat Feb 25 22:51:16 202399.88% done, estimate finish Sat Feb 25 22:51:16 202399.97% done, estimate finish Sat Feb 25 22:51:16 2023
Total translation table size: 2048
Total rockridge attributes bytes: 1127937
Total directory bytes: 1689600
Path table size(bytes): 140
Max brk space used 9d2000
5426654 extents written (10598 MB)# 若是将ISO文件刻录到U盘中,则需要进行转换
[root@server customISO]# isohybrid /tmp/CentOS-7-x86_64-demo.iso 
isohybrid: Warning: more than 1024 cylinders: 10599
isohybrid: Not all BIOSes will be able to boot this device

三、制作USB启动盘(刻录U盘)

3.1 插入U盘

将USB插入到物理机中,并确保虚机能识别到该设备。
在这里插入图片描述

3.2 格式化U盘分区

[root@server ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE  MOUNTPOINT
sda               8:0    0   40G  0 disk  
|-sda1            8:1    0    1G  0 part  /boot
`-sda2            8:2    0   39G  0 part  |-centos-root 253:0    0   37G  0 lvm   /`-centos-swap 253:1    0    2G  0 lvm   [SWAP]
...
...
sde               8:64   1 57.8G  0 disk  
`-sde4            8:68   1 57.8G  0 part  
sr0              11:0    1 10.3G  0 rom   
[root@server ~]# mkfs.vfat -I /dev/sde
mkfs.fat 3.0.20 (12 Jun 2013)
[root@server ~]# 

3.3 写入镜像

[root@server ~]# dd if=/tmp/CentOS-7-x86_64-demo.iso of=/dev/sde

注意,此时是看不了进度的。
可另开一个窗口,输入下面命令

[root@server ~]# kill -USR1 `pidof dd`

此时原窗口就会显示:

[root@server customISO]# dd if=/tmp/CentOS-7-x86_64-demo.iso of=/dev/sde
记录了728305+0 的读入
记录了728305+0 的写出
372892160字节(373 MB)已复制,1137.09 秒,328 kB/秒

由于虚机和U盘之间传输速率较慢,这个写入时间会比较长,我这边5GB大小镜像,刻录了近5h。

四、总结

U盘刻录完成后,便可以将其拿来在虚拟机上进行安装测试一番,至于如何以U盘作为启动盘来安装系统,这边可看一下【Linux】使用U盘自动化安装Linux(VMware虚拟机)



http://chatgpt.dhexx.cn/article/DRbsdTDL.shtml

相关文章

U盘镜像刻录(制作U盘启动盘)

一、下载镜像刻录软件 UItralSO刻录 链接:https://pan.baidu.com/s/1TVLdHxPGtPzlfRyxyHvsog 提取码:uuny 二、刻录系统ISO文件 1、点击菜单栏的文件,打开要安装的ISO文件 2、插入U盘,刻录前,先格式化 右键U盘&…

Vitis开发笔记:将镜像刻录到SD卡

一、方法1:windows系统下 1. 安装Win32DiskImager.exe工具 下载链接: http://sourceforge.net/projects/win32diskimager/ 2. 如下图所示 步骤1:浏览 镜像 文件的路径 步骤 2:选择 SD 卡分区作为设备(必须小心选择&am…

将镜像刻录到U盘的方法

将镜像刻录到U盘的方法 1.利用到的工具:UltraISO,根据ISO的大小,选择适当的U盘一个(之前要进行格式化); 2.将准备刻录的所有ISO文件放在一个文件夹下; 3.打开…

镜像光盘如何刻录到U盘

在我们给计算机装系统过程中,往往碰到使用镜像光盘安装的情况,在安装过程中出现速度过慢、卡在某个百分比的情况,这个时候为解决安装速度过慢的问题,往往需要把系统镜像转移到U盘(刻录系统镜像到U盘)&#…

tcping : ping ip地址+端口号

起因:windows下cmd ping命令无法ping某一个端口。 对策:使用tcping工具了,Windows没有自带这个小工具,需要自己下载下来,放到 C:\Windows\System32 下。 tcping工具下载地址https://elifulkerson.com/projects/tcping.php 之后将 tcping.ex…

TCP/IP---ping命令

简单的说,Ping就是一个测试程序,如果Ping运行正确,你大体上就可以排除网络访问层、网卡、MODEM的输入输出线路、电缆和路由器等存在的故障,从而减小了问题的范围。 它所利用的原理是这样的:利用网络上机器IP地址的唯一…

自己动手学TCP/IP--ICMP(ping报文)

ping是ICMP的一种,是用来检查网络是否通畅或者网络连接速度的命令。 报文长度(98bytes)= 以太网头(14bytes)+ IP头(20bytes)+ICMP头(8)+ ICMP数据内容(56字节) 报文格式 ICMP回显请求报文类型是8(ICMP_ECHO),标识符字段是进程的ID,用于接受应答包的处理,序列…

ping命令使用什么协议

几乎每一名网工及弱电工程师都遇到过网络不通的情况,通常判断标准是以外网连通性及 Ping 测试得出结果,而 ping 属于 ICMP 协议中的一个工具。ping 是为了测试另一台主机是否可达,发送一份 ICMP 回显请求给目标主机,并等待 ICMP 回…

ping协议(ICMP)的原理

文章目录 ping的工作原理查询报文类型差错报文类型目标不可达消息重定向消息超时消息 查询报文类型的使用整个流程 差错报文类型的使用 ping的工作原理 ping是基于ICMP(Internet Control Message Protocol)协议工作的,首先熟悉一下ICMP协议 …

ping ip+端口

windows 在window中想要ping 某个地址,只需要在cmd 中输入:pingIP ping 127.0.0.1但是这样只能知道ip是可以ping通的,并不知道它的某个端口是否可以ping通,于是可以使用telnet命令。 只需要在cmd中输入:Telnet IP 端…

2.1 TCP/IP命令(Ping)

2.1 TCP/IP命令(Ping) 1.概念 Ping命令来源于物理学中测声纳脉冲的回应情况,利用它可以检查网络是否连通,从而帮助我们分析和判定网络故障。ping命令使用的是ICMP(Internet Control Message Protocol)协议,即Internet控制消息协议的缩写&am…

通过抓包深入分析HTTPS

本文字数:6189字 预计阅读时间:16分钟 Https介绍 https其实是在http上加了一层(SSL/TSL)加密协议,根据维基百科的解释: ❝ 超文本传输安全协议(英语:HyperText Transfer Protocol Secure,缩写&a…

用Wireshark抓包分析协议 计算机网络

此篇博客记录使用Wireshark抓包分析协议。 目录 一、DNS 二、分析TCP握手过程 三、TLS报文 四、HTTP协议 五、SMTP 六、ARP 七、RTP 八、RTMP 一、DNS DNS是域名系统,Domain Name System的缩写,是基于TCP/IP的一个服务。DNS是将主机名到IP地址转…

TCP/IP协议抓包分析

目录 一、TCP/IP协议在协议中分层的位置 二、TCP三次握手流程 三、打开wireshark抓包 四、TCP三次握手分析 1、TCP第一次握手 五、四次挥手流程 六、四次挥手抓包分析 一、TCP/IP协议在协议中分层的位置 二、TCP三次握手流程 1、客户端向服务端发送⼀个SYN1(…

使用Wireshark抓包分析TCP协议

wireshark数据包详细栏每个字段对应的分层。 1、分层介绍 1.1、数据链路层 我们点开这个字段,从该字段中可以看到相邻两个设备的MAC地址 1.2、网络层 本层主要负责将TCP层传输下来的数据加上目标地址和源地址。 1.3、传输层 这一层用到了TCP协议 tcp包头 每个字…

wireshark抓包分析——TCP/IP协议

本文来自网易云社区 当我们需要跟踪网络有关的信息时,经常会说“抓包”。这里抓包究竟是什么?抓到的包又能分析出什么?在本文中以TCP/IP协议为例,简单介绍TCP/IP协议以及如何通过wireshark抓包分析。 Wireshark 是最著名的网络通…

使用wireshark抓包分析实战

今天继续给大家介绍渗透测试相关知识,本文主要内容是使用wireshark抓包分析实战。 免责声明: 本文所介绍的内容仅做学习交流使用,严禁利用文中技术进行非法行为,否则造成一切严重后果自负! 一、wireshark分析ARP协议 …

Wireshark抓包及分析——HTTP

1、首先我们打开 Wireshark,可以看到有很多的网络,选择自己正在使用的网络,比如我现在就是使用 WLAN,双击点开就可以了。 2、然后开始抓包分析,在浏览器中输入网址 3、可以看到 Wireshark 已经抓到很多数据包&…

Http实战之Wireshark抓包分析

Http相关的文章网上一搜一大把,所以笔者这一系列的文章不会只陈述一些概念,更多的是通过实战(抓包代码实现)的方式来跟大家讨论Http协议中的各种细节,帮助大家理解那些反反复复记不住的的概念! 搭建测试项目…

Wireshark抓包详细分析

wireshark抓包介绍 这里选了wifi网卡,开始抓包 上方的文本框可以输入一些规则,对抓到的包进行过滤。 过滤策略: 只看 TCP 协议的包,可以输入 tcp 然后回车;如果想看使用 UDP 协议的某个端口,输入 udp.p…