我使用的是具有 16GB 存储空间的 USB 2.0 棒,并且有一个 2.8GB 的安装程序 ISO。当将此 ISO 刷入棒时,我注意到速度非常慢(5 分钟),而将 ISO 文件本身复制到棒上(4 秒)。
为什么刷新所花的时间是将文件复制到现有分区所花时间的 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
答案1
为什么刷新所花的时间是将文件复制到现有分区所花时间的 75 倍?
大部分文件未复制到分区中然而– 它正在等待操作系统缓冲区/缓存,稍后刷新。如果您在执行此操作后尝试sync
或umount
文件系统,它仍需要几分钟来刷新待处理的写入。
我的假设是,这是因为 ISO 上存在旧的 ISO 9660 文件系统。有人能确认这个文件系统很慢吗?
不是。作为只读文件系统,它在 20 世纪 90 年代就完成了这项工作,而且在现代 CPU 上速度并不慢。(至少与 exFAT 相比,exFAT 根本不是一个现代文件系统——exFAT 甚至不是基于扩展的,它仍然使用簇链就像 1980 年代的前辈一样)。
但除此之外,“刷新”磁盘映像通常意味着以 1:1 的方式逐扇区写入,在这种情况下,文件系统不涉及整个过程完全没有问题——整个文件系统结构只是作为一系列连续的扇区被复制,而不会尝试对其进行解释。使用将 1GB 图像写入磁盘的过程gnome-disks
应该花费完全相同的时间,无论该图像的内容如何。
(例外情况是以下程序:不真正“刷新”或“写入”映像,而是将其内容提取到新准备的文件系统中(Rufus 就是这样一个例子)。在这种情况下,新目标文件系统(几乎总是 FAT32)的“速度”将比源文件系统更重要,因为更新数据结构比读取数据结构慢 - 而且通常,提取几百个较小的文件确实会比复制单个大文件慢 - 但即使文件系统结构不是最理想的,例如 ISO 9660 和 exFAT 之间的差异在任何类型的现代 CPU 上都几乎不会引人注目。)
编辑:我还尝试使用以下方法刷新 ISO:
在这个特定的例子中,你没有指定块大小,bs=
所以我怀疑至少部分问题是 'dd' 默认一次只读取和写入 512 个字节(单个扇区)。其他方法bs=1M
通常会更快一些。
我还想知道是否可以制作包含较新文件系统(例如 exFAT)分区的 ISO。如果不行,为什么 ISO 仍然是操作系统安装程序映像的标准格式?如果可以,为什么有人会放弃 exFAT 而改用 ISO 9660?
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,从技术上讲,可能与 UDF 相同,因为 CD/DVD引导过程可以工作 - 从技术上来说这应该是可行的,但至少特定的扇区 0x11 需要看起来像一个有效的 ISO 9660“引导记录”,以便 PC 固件能够将 CD 识别为可引导的,因此新的文件系统必须包装在一个虚拟的 ISO 9660 结构中,并且操作系统需要预期并识别这一点 - 但很可能做不到。