debian Lenny(5.0)から、古いLandiskにアクセスしたとき文字が化ける問題を解決


Lennyはカーネル2.6が使われており、cifsのクライアントサポートもカーネルレベルで対応しています。
ですのでとくに何もapt-getせずとも、以下のコマンドで簡単にNASにマウントでき、ファイルのやりとりが可能です。

$ sudo mount -t cifs -o username=ikemen,password=himote,umask=000,iocharset=utf8 //nas/dir /mnt/mountpoint

これでディレクトリが見れて、ファイルのコピーなどは問題なくできるのですが、残念ながら日本語が表示されません。文字化けするのです。
これはHDL-Uシリーズで使われているsambaのバージョンが古いことが原因です。


最近のcifs対応のmountコマンドでは、クライアントからcifsへ接続するときにサーバ側から文字コード情報を受け取って、iocharsetで指定したクライアント側文字コードに変換するようです。
しかし、その機能は、サーバ側のsambaデーモンがsamba3でなければダメらしい。
HDL-Uシリーズはsamba2。ダメ。うちのはHDL-300U。残念!!


# cifsはsmbfsの後継で、MSが仕様を標準化し、IETFとかに提出して世界標準のNASプロトコルを狙った奴みたいです。
## linuxカーネルの中の人たちのイチオシみたいです。英語なので雰囲気しかわからんけど。


それでも、数年前のsmbmountを使っていた時代は、codepageオプションと言うものがあったそうです。
これでサーバ側の文字コードも指定し、iocharsetでクライアントのを指定すれば、問題なく日本語が使えたようです。


# 自分はLinuxVinedebian/etchBSDはPC98用6.1だったかを試して接続してみましたが、いずれでも漢字が問題なく表示できたという記憶がありませぬ....。
## 昔はPC98のDOSも使ってたから8.3でファイル名つける癖があったし、CD焼くときも手動で8.3にしてたしで、ほとんど問題にならなかったから気にしなかったのが正解か。
### どうしても漢字が見たいときは、nkfで逃げてたような気がする。


しかし、現在mountもsmbmountもcodepageオプションは受け付けません。"$ man smbmount"してみてもcodepageの記述がない。
ダメじゃん...と思っていましたが、諦めずに検索していたら解決方法がありました!!


smbfsがcodepage=cp932を受け付けなかったらconvmvfsを使えば良い - 射撃しつつ前転 改


ここにかかれているとおりにやってみました。

まずはconvmvfsをインストール

$sudo apt-get install fuse-convmvfs

その次にLandiskをマウントします。

$ sudo mount -t cifs -o username=ikemen,password=himote,umask=000,iocharset=utf8 //Landisk/Works /mnt/HDLU

マウントしたらば、convmvfsに接続しているデバイスを教えないと駄目な感じなので以下の文を実行します。

$ sudo modprobe fuse

で、最後にconvmvfsでマウント(なのか?)

$ sudo convmvfs /mnt/landisk -o allow_other,umask=000,icharset=cp932,srcdir=/mnt/HDLU

これで"$ ls -l /mnt/landisk"とやれば、NASの"/Works"以下のファイルはきちんと日本語で表示されます。今までは、"$ ls -l /mnt/HDLU | nkf -S"ってやれば、日本語ファイル名は見ることだけはできてたのですが、これで書き込むこともできるようになります。


アンマウントのときは逆の順になります。

$ sudo umount /mnt/landisk
$ sudo umount /mnt/HDLU


間違えやすいので、マウント/アンマウントごとにスクリプト書いておけばいいでしょう。



特にリンク先のページより気がついたことや真新しいことはなにひとつないんだけど、"Landisk 文字化け"で検索してヒットするところにないんで、たどり着くまで大変だと思うので書いときました。
何より自分でたびたび読み返すだろうし。