MacOS中制作光盘备忘
缘起
某些同学提供了大量的素材,需要固化提交某部门,不接受可读写介质,需要使用光盘提供,因此才有了下面的探索。
使用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中挂载,中文都显示正常,因此问题暂时得到解决。