am-utilsを使ったUDF形式のDVDのマウント
今日はFreeBSDでUDF形式のDVDをマウントする際,どのような設定をするのが便利かと言うことについて考えてみます.ここでの論点は以下です.
- root権限を用いないマウント操作は可能か
- DVDをマウントする際に
udf
,cd9660
のいずれを用いるか - 日本語ファイル名を文字化けさせずにマウントするにはどのようにするか
このようなことを考えるのは,先頃,日本語のファイル名を含むディスクからのコピーで幾らかの問題に遭遇したためです.二三の方法を試した限りでの結論を述べれば,以下の方法が良さそうです.
まず,root権限の必要性ですが,FreeBSDにはam-utilsがamd
,Auto Mount Daemonとして添付されていますので,これを使えば良さそうです.二番目のデバイスの選択ですが,UDF Bridgeによる互換性機能を使えば9660
デバイスでもマウントは可能ですが,三番目の日本語ファイル名との兼ね合いからするとudf
デバイスが良さそうです.要するに最も面倒なのは日本語ファイル名を文字化けさせない,という要請につきるようです.
なお,本記事の内容はFreeBSD 9.1-RC1 (amd64)で行い,端末のロケールはUTF-8の設定になっています.
まず,日本語のファイル名を含むUDF形式のDVDを用意し,マウント時に用いるデバイスとKernel iconv使用の違いで文字化けの有無を調べます.
kldload udf kldload libiconv kldload udf_iconv kldload cd9660_iconv mount -t udf /dev/cd0 /cdrom/ && ls -lat /cdrom && umount /cdrom mount -t cd9660 /dev/cd0 /cdrom/ && ls -lat /cdrom && umount /cdrom mount -t udf -o -C=UTF-8 /dev/cd0 /cdrom/ && ls -lat /cdrom && umount /cdrom mount -t cd9660 -o -C=UTF-8 /dev/cd0 /cdrom/ && ls -lat /cdrom && umount /cdrom
結果は以下です.
device | kiconv | 日本語ファイル名の表示 |
---|---|---|
udf |
- | × |
cd9660 |
- | × |
udf |
○ | ○ |
cd9660 |
○ | × |
UDF形式のファイル名の文字コードはそもそもUTFなのですから,Kernel iconvの設定は不要になるように思うのですが,最上段を見る限りそうでもないようです.したがって,udf
とKernel iconvの設定でam-utilsを使うのが良さそうです.
さて,実際の設定方法です.まず,起動時にUDFやKernel iconvのモジュールを読み込むために/boot/loader.conf
に以下を追記します.
udf_load="YES" libiconv_load="YES" udf_iconv_load="YES"
次に以下の内容を/etc/amd.map
に追記します.
udf type:=program;\ fs:=/cdrom;\ mount:="/sbin/mount mount -t udf -o -C=UTF-8 /dev/cd0 ${fs}";\ unmount:="/sbin/umount umount ${fs}";
ただし,空白は適切な数のtab
とspace
に置き換えます.最後に/etc/rc.conf
に以下を追記します.
amd_enable="YES" amd_flags="-a /.amd_mnt -l syslog /am-utils /etc/amd.map"
以下のようにしてamd
を起動します.
/etc/rc.d amd restart
ユーザー権限でマウントを行うには以下のようにします.
cd /am-utils/udf # 自動的にマウントが行われる
マウントを解除するには以下のようにします.
cd # 別のディレクトリに移動する amq -u /am-utils/udf # アンマウント操作 df # 確認する
以上がam-utilsを使って日本語ファイル名を含むUDF形式のディスクを文字化けさせずにマウントするための手順です.
最後になりますが,-C=UTF-8
の部分を-C=EUCJP
にしたところ,ls
の出力をlv
に渡すことで正常な表示が行われました.したがって,端末のロケールがEUC-JPならばKernel iconvを使いさえすればudf
,cd9660
いずれのデバイスを使っても日本語の表示は問題ないと思われます.