某些文件的文件名被 mkisofs -J -R 截断

某些文件的文件名被 mkisofs -J -R 截断

我已经在 Windows 10 上安装了 mkisofs 3.02a09(i686-pc-mingw32)。

我正在尝试创建 ISO,mkisofs但是一些文件名被截断了:

PS C:\tools> mkisofs -J -R -o VDI-Michelin-Editions-Master-20230929.iso .\VDI-Michelin-Editions-Master-20230929
C:\ProgramData\scoop\apps\cdrtools\current\mkisofs.exe: Warning: Cannot write inode/link information with -no-cache-inodes.
Using DISAB000.TXT;1 for  .\Master-20230929/config/disable_IPv6.cmd.txt (disable_Autorun_All_users.ps1.txt)
Using DISAB000.REG;1 for  .\Master-20230929/config/disable_Autorun_All_users.reg (Disable_APIPA.reg)
Using VMWAR000.CMD;1 for  .\Master-20230929/OSOT/VMwareOSOptimizationTool-OPTIMIZE.cmd (VMwareOSOptimizationTool-FINALIZE.cmd)
Using 537_1000.EXE;1 for  .\Master-20230929/packages/driver_v8/537.13_grid_win10_win11_server2019_server2022_dch_64bit_international.exe (537.13_grid_win10_win11_server2019_server2022_dch_64bit_int.exe)
  0.72% done, estimate finish Fri Sep 29 12:24:55 2023
...
 99.84% done, estimate finish Fri Sep 29 12:24:10 2023
Total translation table size: 0
Total rockridge attributes bytes: 4570
Total directory bytes: 12880
Path table size(bytes): 100
701117 extents written (1369 MB)

.\Master-20230929/packages/driver_v8/537.13_grid_win10_win11_server2019_server2022_dch_64bit_international.exeEDIT0:为什么包含少于 255 个字符(最大 Rock Ridge 长度)的路径被截断为.\Master-20230929/packages/driver_v8/537.13_grid_win10_win11_server2019_server2022_dch_64bit_int.exe

答案1

即使您启用了 Joliet 和 Rock Ridge 扩展,它们仍然是附加元数据,并且实际上并不会替换基线 ISO 9660 文件名。

对于每个长文件名的文件,mkisofs 需要存储名称:Rock Ridge 文件名(255 字节)、Joliet 文件名(截断为 63 个 Unicode 字符),ISO 9660 文件名(截断为 8.3 字节)。当后面的截断与多个文件发生冲突时,无论是否启用 RR/Joliet,mkisofs 都会发出警告。


EDIT0:为什么路径 .\Master-20230929/packages/driver_v8/537.13_grid_win10_win11_server2019_server2022_dch_64bit_international.exe 包含少于 255 个字符(最大 Rock Ridge 长度)被截断为 .\Master-20230929/packages/driver_v8/537.13_grid_win10_win11_server2019_server2022_dch_64bit_int.exe

不是。mkisofs 的输出具有误导性,因为显示条目。此特定消息不仅与截断有关(所有其他文件名都会被悄悄截断为 8.3);它实际上与当两个长名称被截断为相同名称时的冲突处理有关。在本例中,'537_…international' 被截断为编号为 '537_1xxx.EXE',因为它输掉了与 '537…_int' 大概保留了它的“537_13_G.EXE”。

(请注意其他消息提到的两个非常不同的名称,例如“disable_IPv6.cmd.txt”与“disable_Autorun_All_users.ps1.txt”。在此示例中,两者都将被截断为“DISABLE_.TXT”,因此其中一个获胜,而另一个必须使用“DISAB000.TXT”。)

相关内容