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 个文件夹):
我正在尝试为脱机 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 个文件夹):