genisoimage 乱码文件名

genisoimage garbles filenames

我正在尝试为脱机 RPM 存储库构建 ISO 映像。我有我需要的文件和结构,但是当我创建ISO镜像时,文件名是乱码:

ConsoleKit-32bit-0.2.10-64.65.1.x86_64.rpm

变成

ConsoleKit-32bit-0.2.10-64..r

我已经在命令行中使用以下选项进行了尝试,结果相同:

genisoimage -f -U -o update.iso /data/iso
genisoimage -f -l -allow-lowercase -o update.iso /data/iso
genisoimage -f -l -allow-leading-dots -relaxed-filenames -allow-lowercase -allow-multidot -no-iso-translate -o update.iso /data/iso

有什么我可能遗漏的可以保留文件名的东西吗?这对于 ISO 存储库正常工作至关重要。

你错过了 -joliet-long

加上 -U -r 应该不错。

正如 David Bugg 的回答所暗示的那样,您启用的标志实际上不允许您的文件名是它们的全长。

纯 ISO 9660 仅支持 31 个字符的文件名,包括 3 个字符的扩展名 (genisoimage 通常将其限制为 8.3 格式,但您使用的 -l 禁用该限制并允许完整的 31 )。您提到的具有截断名称的文件被截断为 29 个字符,包括扩展名中的一个字符,因此 31 包括扩展名中的两个空白字符。

Joliet 允许最多 64 个 unicode 字符名称,并且可以更长 (103),并带有 David Bugg 建议的标志。然而,这仅适用于 Windows,并且在某种程度上适用于 Linux。 genisoimage 手册页 建议另外使用 -R(或 -r 具有更好的所有权默认值),因为 Rock Ridge 标准支持 255 字节文件名和大于 8 个目录的文件夹深度,并且是真正的标准,不像 joliet。

没有提到 Windows 是否支持 Rock Ridge,但我怀疑它是否支持,所以我建议同时使用两者,这样 Windows 用户就不会将 ISO 安装到他们的驱动器中来检查它并查看损坏的文件名。

-J -joliet-long -r 添加到您的命令中,您应该没有问题。

根据 nakedhitman 的评论更新的最终命令:

genisoimage -f -J -joliet-long -r -allow-lowercase -allow-multidot -o update.iso /data/iso

我只能通过启用未翻译的文件名和 Rock Ridge 属性的“-U -R”来解决问题(我相信深度超过 8 个文件夹):

来源:http://realtechtalk.com/genisoimage_errors_with_long_filenames_and_deep_directory_structures-2092-articles