Monthly Archives: 1月 2009

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

Pocket

FreeBSDでは、先日のMSDOSFSの件と同じく、NTFS上の日本語ファイル名の扱いにも問題がある。

こちらもEUC-JPでマウントすれば一応は問題が解消されるが、俺はFreeBSDの環境をUTF-8にしているので、もともとUTF-8のNTFSを、EUC-JPにして読み込むのは実に馬鹿馬鹿しい。

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

ただ、こういうのも何だが、文字コードを変換してマウントする場合、現時点では読み込みのみがサポートされ、書き込みは不可であることを考える*1と、一時的な用途であればLinuxを使った方がはるかに早い。例えば、死んでしまったWindowsのディスクからファイルを復旧したいといったケースには、LinuxのLiveCDを使うほうが手軽。

また、カーネルとユーザランドへのパッチなので、ソースをアップデートする度にパッチを当てなおさなければならないのは、かなりのデメリット。継続的にNTFSをマウント(加えて読み取りのみ)する必要がある場合に限ったほうがいいと思う。

さておき。まず、上記のサイトから、1.,2.のパッチと、3.のNTFS向けパッチをダウンロードする。

/usr/src直下でpatchコマンドにこれらのパッチを食わせればよい。本番前に-Cオプションを付けて実行し、様子を見るのが吉。

◎実行例

次に、kernelの再構築と、libkiconvのmake install。

上記のパッチは、kernelに対するものと、libkiconvに対するものの二つであるため。

kernelは、特別なことはなにもせず、再インストールすればいいだけ。(/usr/src配下でmake buildkernel, make installkernel)

libkiconvは/usr/src/lib/libkiconvでmake, make installする。

◎実行例

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

◎実行例

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

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

445 : 名無しさん@お腹いっぱい。 : sage : 2009/01/13(火) 08:13:53

.UTF-8 で ntfs のこと:

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の項参照。

No tags for this post.

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

Pocket

MSDOSFSの日本語ファイル名に使われる文字コードはCP932(Shit_JIS)だが、これをFreeBSDでマウントするには少々の手間がかかる。

結論からいえば、現時点(2009/01/12)でUTF-8に変換すると問題があるため、EUC-JPに変換する。

具体的には、mount_msdosfsに-L, -Dオプションを与えて使う。

◎実行例

これでファイル名はEUC-JPで表示されるので、LANG=ja_JP.eucJP;export LANGとしたうえで、ターミナルの設定を変えてやればOK。

UTF-8のターミナルでファイル名を確認したい場合には、nkf( /usr/ports/japanese/nkf)やiconv(/usr/ports/converters/libiconv)で変換する。

◎実行例

nkfの場合にはiconvの代わりにnkf -Ewとする。

ファイル名の文字コード自体を変換したい場合には、convmv(ファイル名の文字コード変換)を使う。

なお、mount_msdosfsでUTF-8への変換時に発生する問題については下記のリンクを参照のこと。

”(FreeBSD-users-jp 91921) Re: Trouble in msdosfs UTF-8 conversion of japanese filename”

一部引用。

Q

cd9600 msdosfs ntfs などの CP932 なファイルシステムで

日本語を含むファイルがある場合、UTF-8 に変換して mount する

(たとえば # mount_msdosfs -L ja_JP.UTF-8 ) と、日本語を

含むファイルへのアクセスがおかしいようです。

A

カーネル内部のコード変換が、バイト数が変化する変換に完全にはまだ

対応できていないためです( UTF-8 では漢字は 3 バイト)。EUC への

変換で回避するか、imuraさんによる kiconv enhancement パッチ

http://people.freebsd.org/~imura/kiconv/

を自分で当てて、対応したカーネルを作成する必要があります。

No tags for this post.