17.13. mkisofs - 建立光碟影像檔

在 FreeBSD 底下燒錄光碟有兩個步驟:

1. 將所需的資料 ( 檔案,音樂或全部 ) 包裝成一些特別格式的檔案。

2. 用 burncd 將這些檔案寫入光碟中。

mkisofs 就是 1. 的工具,也就是建立光碟影像檔。 而在 sysutils/cdrtools-cjk 可以建立 Chinese Big5 檔名,請使用 -J 的選項來使用它。

也可以參考這個網頁, mkisofs-NLS-CJK

# mkisofs -a -f -l -r -J -o ~/test.iso ~/test/
# vnconfig vn0 test.iso
# mount -t cd9660 /dev/vn0 /mnt/iso
# ls /mnt/iso
# umount /mnt/iso
# vnconfig -u vn0
# burncd -e -v -s 6 -f /dev/acd1c data test.iso fixate

以上的範例是把 ~/test/ 目錄下的所有檔案, 建立成一個 test.iso,可以先用 du -s -h ~/test/ 檢察是否會超過您的光碟容量, 然後用 vnconfig 來測試,在測試前, 記得要先安裝 big5fs, 並按照 big5fs 的要求做好準備工作, 在搭配可以看到中文的 ls, 這樣子就可以在 FreeBSD 底下燒錄中文檔案了。

目前 ports 中的 mkisofs 雖然支援 nls,但是只有支援 one byte 的, 所以並不能作中文的轉換。

作者不採納 multu-byte NLS 的原因如下:

Both solutions requiere the complete set of tables to be compiled into mkisofs. There was no concept of reading files instead. I believe that it is better to try to use libiconv instead.

以下是筆者的日誌,大部分的人應該都不會感興趣的。

這篇文章是在看完 chinese/mkisofs 的 patch 寫下的日誌, mkisofs 目前是 cdrecord project 的一部份,cdrecord 目前在 sysutils/cdrtools 底下, 而 mkisofs 則是在 sysutils/mkisofs ,該 port 最主要的部份就是修正 mkisofs 的 joliet 對中文的支援問題, patch 分成兩個部份,convert_to_unicode 和 joliet_strlenm。

在 convert_to_unicode 部分,他會將所有的字作轉換,轉換成 2bytes的Unicode編碼,以常見的英文來說:

    ABC -> 0A0B0C
    3bytes -> 6bytes

而中文的部份:

    0xA4E5(文) -> big5_to_unicode -> 0x6587
    2bytes                           2bytes

其實可以直接用 iconv 作掉整個轉換的部份。

而 joliet_strlen 的部分, 這邊是指定 joliet 所給予的 buffer size,預設全都是英文, 所以原本 3bytes 的 ABC 會變成 6bytes 的 0A0B0C, 但是中文的部份要修正成 2bytes 的中文出來還是 2bytes。

WWW: cdrecord project