我使用的是具有 16GB 存储空间的 USB 2.0 记忆棒,并且有一个 2.8GB 的安装程序 ISO。当将此 ISO 刷新到记忆棒时,我注意到与将 ISO 文件本身复制到记忆棒(4 秒)相比,速度非常慢(5 分钟)。
为什么刷新所需的时间是仅将文件复制到现有分区的时间的 75 倍?
我的假设是,这是因为 ISO 上存在旧的 ISO 9660 文件系统。有人可以确认这个文件系统很慢吗?
我还想知道是否可以使用较新的文件系统(例如 exFAT)的分区制作 ISO。如果不是,为什么 ISO 仍然是操作系统安装程序映像的标准格式?如果可能的话,为什么有人会决定不使用 exFAT 并使用 ISO 9660 呢?
有关 ISO 的信息:
> isoinfo -d -i EndeavourOS_Galileo-Neo-2024.01.25.iso
Setting input-charset to 'UTF-8' from locale.
CD-ROM is in ISO 9660 format
System id:
Volume id: EOS_202401
Volume set id:
Publisher id: ENDEAVOUROS <HTTPS://ENDEAVOUROS.COM>
Data preparer id: PREPARED BY MKARCHISO
Application id: ENDEAVOUROS LIVE/RESCUE CD
Copyright File id:
Abstract File id:
Bibliographic File id:
Volume set size is: 1
Volume set sequence number is: 1
Logical block size is: 2048
Volume size is: 1347830
El Torito VD version 1 found, boot catalog is in sector 126
Joliet with UCS level 3 found.
SUSP signatures version 1 found
Rock Ridge signatures version 1 found
Rock Ridge id 'RRIP_1991A'
Eltorito validation header:
Hid 1
Arch 0 (x86)
ID ''
Cksum AA 55 OK
Key 55 AA
Eltorito defaultboot header:
Bootid 88 (bootable)
Boot media 0 (No Emulation Boot)
Load segment 0
Sys type 0
Nsect 4
Bootoff 7F 127
提前致谢!
编辑:我还尝试使用以下命令刷新 ISO:
dd bs=4M if=my.iso of=/dev/sda conv=fdatasync status=progress
花了 15 分钟,这是输出:
2747269120 bytes (2.7 GB, 2.6 GiB) copied, 160 s, 17.2 MB/s2760355840 bytes (2.8 GB, 2.6 GiB) copied, 160.008 s, 17.3 MB/s
658+1 records in
658+1 records out
2760355840 bytes (2.8 GB, 2.6 GiB) copied, 856.116 s, 3.2 MB/s
以下是有关闪存分区的一些信息:
> lsblk -f /dev/sda
NAME FSTYPE FSVER LABEL UUID FSAVAIL FSUSE% MOUNTPOINTS
sda iso9660 Joliet Extension EOS_202401 2024-01-25-18-25-14-00
├─sda1 iso9660 Joliet Extension EOS_202401 2024-01-25-18-25-14-00
└─sda2 vfat FAT16 ARCHISO_EFI 8093-0377
大部分文件尚未复制到分区中-它正在操作系统缓冲区/缓存中等待稍后刷新。如果您在执行此操作后尝试
sync
或umount
文件系统,则仍需要几分钟时间才能刷新挂起的写入。它不是。作为一个只读文件系统,它在 20 世纪 90 年代就完成了这项工作,并且对于现代 CPU 来说并没有慢多少。(至少与 exFAT 相比,exFAT 无论如何都不是现代文件系统——exFAT 甚至不是基于范围的,它仍然像 20 世纪 80 年代的前辈一样使用簇链)。
但除此之外,“刷新”磁盘映像通常意味着以 1:1 的方式逐个扇区写入它,在这种情况下,文件系统根本不参与该过程 - 整个文件系统结构只是作为一系列连续的扇区进行复制,而无需任何解释它的尝试。将例如 1GB 图像写入磁盘的过程
gnome-disks
应该花费完全相同的时间,无论该图像的内容如何。(一个例外是程序并不真正“刷新”或“写入”图像,而是将其内容提取到新准备的文件系统中(Rufus 就是一个这样的例子)。在这种情况下,新文件的“速度”目标文件系统(几乎总是 FAT32)比源文件系统更重要,因为更新数据结构比读取它们慢——而且通常,提取几百个较小的文件确实比复制单个大文件明显慢——但即使文件系统结构不是最理想的,例如 ISO 9660 和 exFAT 之间的差异在任何类型的现代 CPU 上都很难注意到。)
在这个特定的示例中,您没有指定块大小,
bs=
因此我怀疑至少部分问题是“dd”默认一次仅读取和写入 512 字节(单个扇区)。周围的东西bs=1M
通常会走得更快一些。ISO 9660 仍在使用,因为“ISO”映像首先是CD/DVD映像,并且这是它们的标准文件系统。(尽管如果它们是 DVD 映像,那么它们将使用较新的 UDF 而不是 ISO 9660。例如,任何最新的 Windows.iso 实际上都是仅具有“存根”ISO 9660 文件系统的 UDF 映像。)
您所拥有的 Linux 映像恰好已准备好
isohybrid
同时用作可启动 CD/DVD 光盘(使用 El Torito 标准)和可启动 HDD(使用典型的 BIOS 和 UEFI 启动格式),并使用不同的创造性交错涉及到的分区表;但一般而言,“ISO”映像旨在刻录到 CD 中。所以真正的问题是为什么操作系统安装映像仍然制作为 CD/DVD 映像而不是常规磁盘映像。(我不知道答案。)
至于使用其他文件系统的 CD/DVD,由于 CD/DVD引导过程的工作方式,在技术上可能与 UDF 相同 - 它在技术上应该是可能的,但至少特定扇区 0x11 需要看起来像有效的 ISO 9660 PC 固件将 CD 识别为可引导的“引导记录”,因此新的文件系统必须封装在虚拟的 ISO 9660 结构中,并且操作系统需要预期并识别这一点 - 但它可能不会。