NTFSをマウントして日本語も表示する

# mount_ntfs -C eucJP /dev/ad0s1 /mnt

丸ごと引用ですみません。引用の範囲を超えているのですが、メモに残したくて。

http://iris.homeunix.net/yayoi/freebsd/japanese/jamount.asp

Windows領域の日本語ファイル名をFreeBSDで扱う

FreeBSD 5.2-RELEASEにて、CD9660、MSDOSFS、NTFS、UDFファイルシステムがマルチバイト文字変換に対応しました。
これによって文字コードの異なる日本語ファイルシステムをFreeBSD上でEUC-JPとして扱うことが可能になります。
平たく言ってしまえばWindows領域に日本語のファイル名が存在した場合に、以前だと文字化けして扱えなかったものが日本語で扱えるようになるということです。
同様のことが4.xの頃にja-msdosfsによって実現していましたが、ja-msfsdosはFAT、FAT32のみでしたが今回はNTFSやCDにも対応しています。
また日本語だけでなく、ロシア語や韓国語などiconvに対応した言語ならどれでも相互変換が可能となっています。

ちなみにCD9660はISO9660規格のCD(通常のCDはこれです)、MSDOSFSはFATやFAT32、UDFはパケットライトCDのファイルシステムです。
NTFSはそのままなので説明する必要は無いでしょう。

ファイルシステムのマルチバイト変換を実現するには、kernelのコンフィグファイルに、


options LIBICONV

と、対応させたいファイルシステムのオプションが必要です。
それぞれのファイルシステムごとにマルチバイト変換をサポートするためのオプションが以下のように存在します。


options CD9660_ICONV
options MSDOSFS_ICONV
options NTFS_ICONV
options UDF_ICONV

ただし、これはマルチバイト変換をサポートするためのみのオプションですので、ファイルシステム自体に対応するオプションも必要です。

例えばCD9660_ICONVを使いたい場合は、


options LIBICONV
options CD9660
options CD9660_ICONV

の3つが必要ということです。
全てのファイルシステムのマルチバイト変換を有効にしたい場合は、


options LIBICONV
options CD9660
options CD9660_ICONV
options MSDOSFS
options MSDOSFS_ICONV
options NTFS
options NTFS_ICONV
options UDF
options UDF_ICONV

がコンフィグファイルにある必要があります。


必要なものをコンフィグファイルに追加できたら、kernelの再構築を行ってください。

なお、kernelの再構築をする代わりにkernelモジュールを起動時にロードしても使えます。
例えば以下のように、


# vi /boot/loader.conf

libiconv_load=”YES”
msdosfs_iconv_load=”YES”

を記述すれば、MSDOSFSのマルチバイト変換が利用可能になります。

FAT領域をマルチバイト変換してマウントする

マルチバイト変換をサポートしたkernelでFreeBSDを起動できたら、早速マウントしてみましょう。
FAT(MSDOS)領域をマルチバイト変換してマウントするには、mount_msdosfsコマンドに-Lと-Dオプションを付けて実行します。
-Lオプションが変換先の文字コード(日本語であればja_JP.eucJP)、-Dオプションが変換元の文字コード(日本語であればCP932(ShiftJIS))です。


# mount_msdosfs -L ja_JP.eucJP -D CP932 /dev/ad0s2 /mnt

のように実行します。
正常にマウントできていれば、FAT領域(ShiftJIS)の日本語名ファイルがFreeBSD上(EUC-JP)で扱えるようになります。
これを/etc/fstabに記述し起動時にマウントさせるには、


/dev/ad0s2  /mnt  msdosfs  -L=ja_JP.eucJP,-D=CP932,rw  0  0

NTFS領域をマルチバイト変換してマウントする

NTFSはMSDOS領域と違い、文字コードはどの言語であってもUnicode(UTF-8)です。
そのためNTFS領域をマルチバイト変換してマウントするには、変換先の文字コード(日本語であればeucJP)のみを指定してマウントすれば良いです。
NTFS領域をマルチバイト変換してマウントするには、mount_ntfsコマンドに-Cオプションを付けて実行します。
-Cオプションが変換先の文字コード(日本語であればeucJP)です。


# mount_ntfs -C eucJP /dev/ad0s1 /mnt

のように実行します。
正常にマウントできていれば、NTFS領域の日本語名ファイルがFreeBSD上(EUC-JP)で扱えるようになります。
これを/etc/fstabに記述し起動時にマウントさせるには、


/dev/ad0s1  /mnt  ntfs  -C=eucJP,rw  0  0

のようにします。
なお-Cを付けてNTFS領域をマウントすると自動的に読み取り専用でマウントされます。

ISO9660領域をマルチバイト変換してマウントする

同様にCD(ISO9660)の領域をマルチバイト変換してマウントするには、mount_cd9660コマンドに-Cオプションを付けて実行します。
-Cオプションが変換先の文字コード(日本語であればeucJP)です。


# mount_cd9660 -C eucJP /dev/acd0 /cdrom

のように実行します。
正常にマウントできていれば、CDの日本語名ファイルがFreeBSD上(EUC-JP)で扱えるようになります。
これを/etc/fstabに記述するには、


/dev/acd0  /cdrom  cd9660  -C=eucJP,ro,noauto  0  0

のようにします。
これで


# mount /cdrom

を実行すれば日本語ファイル名を表示可能な状態でマウントされます。

UDFなCD領域をマルチバイト変換してマウントする

同様にUDFなCD領域をマルチバイト変換してマウントするには、mount_udfコマンドに-Cオプションを付けて実行します。
-Cオプションが変換先の文字コード(日本語であればeucJP)です。


# mount_udf -C eucJP /dev/acd0 /udf_cdrom

のように実行します。
正常にマウントできていれば、UDFなCDの日本語名ファイルがFreeBSD上(EUC-JP)で扱えるようになります。
これを/etc/fstabに記述するには、


/dev/acd0  /udf_cdrom  udf  -C=eucJP,ro,noauto  0  0

のようにします。
これで


# mount /udf_cdrom

を実行すれば日本語ファイル名を表示可能な状態でマウントされます。

参考になった方、誤りを見つけた等、コメントを残してくれるとうれしいです。

Loading Facebook Comments ...

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です