FreeBSDでNTFS上の日本語名ファイルを扱うには。

FreeBSDでは、先日のMSDOSFSの件と同じくNTFS上の日本語ファイル名の扱いにも問題がある。
こちらもEUC-JPでマウントすれば一応は問題が解消されるが、俺はFreeBSDの環境をUTF-8にしているので、もともとUTF-8NTFSを、EUC-JPにして読み込むのは実に馬鹿馬鹿しい。

そこで、MSDOSFSの件で発見した、http://people.freebsd.org/~imura/kiconv/で公開されているパッチを使用する。

ただ、こういうのも何だが、文字コードを変換してマウントする場合、現時点では読み込みのみがサポートされ、書き込みは不可であることを考える*1と、一時的な用途であればLinuxを使った方がはるかに早い。例えば、死んでしまったWindowsのディスクからファイルを復旧したいといったケースには、LinuxのLiveCDを使うほうが手軽。
また、カーネルユーザランドへのパッチなので、ソースをアップデートする度にパッチを当てなおさなければならないのは、かなりのデメリット。継続的にNTFSをマウント(加えて読み取りのみ)する必要がある場合に限ったほうがいいと思う。


さておき。まず、上記のサイトから、1.,2.のパッチと、3.のNTFS向けパッチをダウンロードする。
/usr/src直下でpatchコマンドにこれらのパッチを食わせればよい。本番前に-Cオプションを付けて実行し、様子を見るのが吉。

◎実行例

# pwd
/usr/src
# patch -C < ~/ntfs.patch/01.k.patch 
(略)
# patch < ~/ntfs.patch/01.k.patch 
(略)

次に、kernelの再構築と、libkiconvのmake install。
上記のパッチは、kernelに対するものと、libkiconvに対するものの二つであるため。
kernelは、特別なことはなにもせず、再インストールすればいいだけ。(/usr/src配下でmake buildkernel, make installkernel)
libkiconvは/usr/src/lib/libkiconvでmake, make installする。

◎実行例

# pwd
/usr/src/lib/libkiconv
# make clean
rm -f kiconv.3.gz kiconv.3.cat.gz
(略)
# make 
cc -O2 -fno-strict-aliasing -pipe  -I/usr/src/lib/libkiconv/../../sys  -c /usr/src/lib/libkiconv/sysctl.c
(略)
# make install
install -C -o root -g wheel -m 444   libkiconv.a /usr/lib
(略)

あとは再起動して新しいkernelを読み込ませ、mout_ntfsに-CUTF-8オプションを与えるだけ。

◎実行例

# mount_ntfs -o ro -CUTF-8 /dev/da0s1 /mnt

FreeBSD初心者スレにもちょうど同じ話題があったのでコピーしておく。シンクロニシティ・・。

初心者もOK! FreeBSD質問スレッド その99

445 : 名無しさん@お腹いっぱい。 : sage : 2009/01/13(火) 08:13:53
.UTF-8ntfs のこと:

http://people.freebsd.org/~imura/kiconv/
の、1. 2. と3. の ntfs ぶん当てて kernel と libkiconv 作り直して、

% grep ntfs /etc/fstab
/dev/ad0s3 /diske ntfs ro,-CUTF-8 0 0

で、日本語 file name 読めた。
% uname -rp
7.1-RELEASE-p1 i386
へけけ

*1:mount_ntfs(8)の-Cの項参照。