CLI・CUIなワークステーションを作る へ

FreeBSDからwindows領域の読み書き……fuse

別のところでも書いているとおり,
私が文章を書く際,今のところかな漢字変換にVJEを使うのが一番効率がいいため,
VJEが動くものとしてwindows(及びエディタ)が必須となっています。
そのため同じ機械内にwindowsとFreeBSDの両方を同居させるのが便利ということになるのですが,
この際,お互いのOSからもう片方の領域の読み書きができれば便利ですよね。
というので,FreeBSD側からwindowsの領域を読み書きできるよう仕掛けます。

FreeBSD共通

1 windowsが入っている領域を確認しておく
 「ls /dev」でそれっぽいのを探しておきます。
 HDDを1台で運用する場合,たいていはHDDの先頭に入っていると思います。
 「df」でファイルシステムの状況が表示されますが,
/とかswapとかの領域がどこに入っているかで「/dev」以下のデバイス名が表示されているはずです。
 例えば「/dev/ada1s1」の要領で。
 この場合は「/dev/ada0」が先頭領域なんで,その1番目のスライスとして
「/dev/ada0s1」をメモしておきます。
※ちなみにwindowsにはHDDの領域の内部の「スライス」って概念はありません。
 FreeBSD的に書けば,スライスを1つだけ作って,その全体を使っているのです。
2 fusefs-ntfsをインストールする。
以下,FreeBSD9以前とFreeBSD10以降では扱いが若干変わっています。

FreeBSD9以前

方針としては,OS標準の /sbin/mount_ntfs が読みしかできないため,
読み書きの両方ができるntfs-3gを入れて/sbin/mount_ntfsの代わりをさせようというものです。
3 fusefsの起動
 /etc/rc.confに
「fusefs_enable="YES"」を書き加えておきます。
その後
「/usr/local/etc/rc.d/fusefs start」

/etc/rc.conf ではなく /boot/loader.conf に「fusefs_load="YES"」を書いても動きました。
4 /sbin/mount_ntfsの退避
 本当に使わなければこの処理は不要なのですが,OSインストール時にデフォルトで入るコマンドを削るのもどうかと思うので,別の名前で保存しておきます。
「mv /sbin/mount_ntfs /sbin/mount_ntfs.org」
5 /usr/local/bin/ntfs-3g を /sbin/mount_ntfs にリンクしておく
「ln -s /usr/local/bin/ntfs-3g /sbin/mount_ntfs」
6 マウント先のディレクトリを確保
 私の場合は /media の下に windows というディレクトリを作って,そこにマウントすることにしたので,
「mkdir /media/windows」とします。
7 動作確認
1でとったメモを見ながら「ntfs-3g windowsのあるデバイス名 マウント先」とします。
私の上の例の場合「ntfs-3g /dev/ada0s1 /media/windows」
そのあと「cd /media/windows」としていろんな操作をして,操作できるようだと,問題ありません。
ここで問題がある場合,先に進まずにいろいろ試したり。やり直すなりして,動作できるようにしておきましょう。
/etc/fstabの書換
 /etc/fstabを書き換えます。
 書換に失敗すると面倒なことになりますので慎重に。
 私の上の例の場合だと
「/dev/ada0s1 /media/windows ntfs rw,late 0 0」とします。
あとは再起動すれば,/media/windowsの下にwindows領域の最上位フォルダが存在しているはずです。
私は,windows領域の適宜のフォルダに対し,「place」という名で自分のホームディレクトリにリンクをはっています。
(ホームディレクトリでなければ「cd」した上で)
「ln -s /media/windows/neko place」

これでwindows領域とデータを共有できて便利です。
ちなみにntfsの部分をmsdosfsにするとFAT32フォーマット(当然32GB以下に限定されるが,USBメモリー等にも対応できる)に対応できます。

FreeBSD10以降

9以前でできた,「起動時に既にマウント済み」という状況が実現できないでいます。
今のところその最大の要因は,mount_ntfs自体なくなったことではないかと。10以降でも「ln -s /usr/local/bin/ntfs-3g /sbin/mount_ntfs」が使えるって指摘があるんですが,なぜか私のところではこれができません。
そこで /usr/local/etc/rc.d/ 以下に,NTFSファイルシステムをマウントするシェルスクリプトを書いて,立ち上げ時に自動実行させています。

ファイル名:000ntfs-3g.sh
-----
#!/bin/sh

if [ -x /usr/local/bin/ntfs-3g ];
	then /usr/local/bin/ntfs-3g /dev/ada1p4 /ntfs
fi
※ファイル名冒頭の000は実行の優先順位で少ないほど優先されます。

(2012.7.3.初版)
(2024.3.17.最終改訂)

CUIなワークステーションを作る へ