MacOS中制作光盘备忘

• 本文约 94 字,阅读大致需要 1 分钟 • Sysadmin

缘起

某些同学提供了大量的素材,需要固化提交某部门,不接受可读写介质,需要使用光盘提供,因此才有了下面的探索。

使用xorriso

在macos中,安装xorriso很容易,直接:

brew install xorriso

即可,但是愿望是美好的,现实是打脸的。

通过:

xorriso -as mkisofs -volid "MyVol" -J -udf \
  -o /tmp/output.iso /path/to/your-files

或

xorriso -outdev /tmp/output.iso -volid "MyVol" \
  -joliet on -udf on -map /path/to/your-files / -commit

之后,提示命令错误,缺失-udf等选项,仔细查阅后,brew安装的xorriso是通过libiso等库支持的,进一步查询确认,该版本完全不支持udf,遂更换方法。

使用cdrtools

在macos中,安装cdrtools也很容易,直接:

brew install cdrtools

即可。但愿望是美好的,现实更把脸打肿了。通过:

mkisofs -J -r -UDF -iso-level 3 -input-charset utf-8 \
  -output-charset utf-8 -o out.iso /path/to/your-files

或

mkisofs -J -r -UDF -U -iso-level 3 -input-charset utf-8 \
  -output-charset utf-8 -o out.iso /path/to/your-files

为何需要指定charset,和使用-U选项,是因为同学提供的素材中包含大量的中文命名文件和文件夹,部分命名巨长,导致虽然能完成iso的制作,但复读iso时文件名出现截断乱码。通过:

isoinfo -R -l -i out.iso
isoinfo -J -l -i out.iso
isoinfo -f -l -i out.iso

查看各个层面的编码信息,发现rockride层中文是正常的但udf层和joliet层的中文都变为_。由于系统locale明确是utf-8,因此该问题基本确认是由于brew安装的cdrtools中的mkisofs未包含完整的iconv支持,使utf-8编码在转换为ucs时出错,直接将非ASCII编码替换为_,导致出现该问题。

使用原生hdiutil完成工作

hdiutil makehybrid -default-volume-name=“your_disk_tag" \
  -iso -joliet -udf -o out.iso /path/to/your-files

经isoinfo查看,虽然在rockridge、udf、joliet层中文都显示为单个的"_",但将iso文件在mac、linux、windows中挂载,中文都显示正常,因此问题暂时得到解决。