[GFARM LOGO] 文書集 > ユーザーズマニュアル > samba

Windowsでマウント

English | 日本語

1. 概要

gfarm2fs を使って Gfarm ファイルシステムをマウントし,そのマウントポイントを Samba で公開することで,Windows から Gfarm のファイルにアクセスできます.

必要な環境や設定

関連ソフトウエア一覧

2. 日本語ファイル名を扱う場合

Samba で UTF-8 のファイル名を扱えるようにします. smb.conf にファイル名に関する設定をします. Linux 側ではファイル名の文字コードとして UTF-8 を使うようにし,それを Windows から見えるように設定します.

[global] の部分に記述します. Samba の設定は SWAT を使うと簡単にできます.

Samba 2系の場合
client code page =  932
coding system = utf8

Samba 3系の場合
dos charset = CP932
unix charset = UTF-8
display charset = UTF-8

3. Samba の設定

まず,公開するディレクトリを設定をします. そのために,[homes] や [セクション名] を smb.conf に設定します. gfarm2fs を使ってマウントする予定のパス,またはそれより上のディレクトリのパスを指定します. これらは SWAT を使うと簡単に設定できます.
そして gfarm2fs にアクセスするセクションには,ファイルを書き込めるようにし,ファイル新規作成時に,実行ビットが付かないようにします.

[Gfarm]
path = /tmp/gfarm/%u
create mask = 0644
read only = no
これで, /tmp/gfarm の下に各ユーザがユーザ名のディレクトリを作って gfarm2fs でマウントしておけば,Gfarm という共有名でアクセスできます.

次に,Gfarm を実行する UNIX ユーザ名と対応する Samba でのユーザを作成します.
たとえば,SWAT で行う場合は,「PASSWORD→ローカルマシンのパスワード管理→新規ユーザ追加」でユーザを追加できます.

その他 Samba の設定に関する詳細は,Samba のドキュメントをご覧ください.

4. FUSE の設定

Samba を経由して FUSE を使ったマウントポイントにアクセスするには, FUSE のセキュリティに関する設定が必要になります.
FUSE 2.2.1 以前では,以下の /etc/fuse.conf の設定は必要ありません.(補足もご覧ください.)

/etc/fuse.conf を作成し,以下のように編集します. FUSE のインストール直後は,このファイルがありません.

/etc/fuse.conf
user_allow_other

この設定に関しては,FUSE パッケージの README をご覧ください.
これで,マウント時に -o allow_root オプションが使えるようになります.

注意

FUSE をインストールしてある環境では, 各一般ユーザは自由に FUSE を使ってファイルシステムを作成,マウントができます.
さらに user_allow_other の設定がされている場合,各一般ユーザはマウント時に, そのマウントポイントに他人もアクセスできるようにするオプション(-o allow_root と -o allow_other) を付けてマウントすることができるようになります.

補足

FUSE 2.2.1 以前と FUSE 2.3.0 とでは,ファイルシステムにアクセスしてきたプロセスの権限 (uid, gid 関係) と,マウントしたときのユーザとの比較方法が異なっています. そのため,FUSE のバージョンと,Samba や ftpd などの各種サーバ類との組み合わせによって, user_allow_other の設定が必要であったり,必要でなかったりします. たとえば,vsftpd は user_allow_other の設定が必要ありません. smbd も完全に一般ユーザの権限(uid, gid) になって動く方法があれば user_allow_other の設定は要らないはずです.(ご存知の方いらっしゃいませんか?)

参考

上記の設定をせずに FUSE を使ったファイルシステムを -o allow_root をつけてマウントすると,以下のエラーメッセージが出ます。

fusermount: option allow_other only allowed if 'user_allow_other' is set in /etc/fuse.conf

5. gfarm2fs で Gfarm をマウント

gfarm2fs コマンドを実行して,Gfarm ファイルシステムをマウントします. 上記で設定した Samba を動かしている Linux マシン上で, かつ Gfarm の環境を使う準備ができている一般ユーザ権限で実行します.

gfhost -l などで,ファイルシステムノードにアクセスできる状態であることを確認してから, 以下のコマンドを実行してマウントします.
詳しくは Gfarm と gfarm2fs のドキュメントをご覧ください.

  $ gfarm2fs [gfarm2fs のオプション] マウントポイント -o allow_root [FUSE のオプション]

マウントポイントは Samba で公開しているディレクトリ自体,またはそれ以下のディレクトリにします.

注意

-o allow_other オプションを指定しないでください. -o allow_other オプションをつけると,他の一般ユーザがアクセスできてしまいます. しかも,マウントしたユーザの権限で Gfarm の環境にアクセスすることになります.

6. Windows から Samba にアクセスする

ワークグループのコンピュータを表示して探したり,アドレスバーに IP アドレスやマシン名を入力して, 上記で設定した Samba マシンに接続します. 次に,gfarm2fs でマウントしたディレクトリが含まれる共有フォルダを開きます. ここで,ネットワークドライブに割り当てることもできます. そして,gfarm2fs コマンドでマウントしたディレクトリを開き,各ファイルをアクセスできます.

7. Samba の設定例,応用

Gfarm という共有名にアクセスするだけで,自動で gfarm2fs でマウントしてアクセスできるようになる例を考えてみました.
参考にして,応用してみてください.

[Gfarm]
  path = %H/samba-fuse
  create mask = 0644
  exec = /usr/local/bin/gfarmfsmount.sh %P
  preexec close = Yes
  postexec = /usr/local/bin/gfarmfsumount.sh %P
  read only = no

%H は各ユーザのホームディレクトリになります.
%P は path の内容になります.
exec は接続時に実行するコマンドです.
preexec close は exec に失敗した場合に接続できないようにします.
postexec は切断時に実行するコマンドです.
詳しくは smb.conf のマニュアルをご覧ください.

以下は,自動でマウント/アンマウントするためのスクリプトの例です. 状況により修正してお使いください.

gfarmfsmount.sh
#! /bin/sh

GFARMFS=/usr/local/bin/gfarm2fs
USERNAME=`/usr/bin/whoami`
LOGFILE=/tmp/gfarm2fs-$USERNAME.log

#ARCH="-a i686-FC3-linux"
ALLOWROOT="-o allow_root"

GREP=/bin/grep
DF=/bin/df
TAIL=/usr/bin/tail
DATE=/bin/date

# for fusermount
export PATH=$PATH:/usr/local/bin

#####
if [ $# -ne 1 ]; then
    echo "usage: `basename $0` MOUNTPOINT"
    exit 1
fi

if [ ! -f $LOGFILE ]; then
    touch $LOGFILE
    chmod 600 $LOGFILE
fi

DATE=`$DATE '+%Y%m%d-%H%M%S'`
MOUNTP=$1

($DF -t fuse $MOUNTP | $TAIL +2 | $GREP gfarm2fs > /dev/null && \
    (echo $DATE MOUNT:ALREADY $MOUNTP) || \
    ($GFARMFS $ARCH $MOUNTP $ALLOWROOT && \
    echo $DATE MOUNT:SUCCESS $MOUNTP || ! echo $DATE MOUNT:FAIL $MOUNTP)
) >> $LOGFILE 2>&1

exit $?

gfarmfsumount.sh
#! /bin/sh

FUSERMOUNT=/usr/local/bin/fusermount

USERNAME=`/usr/bin/whoami`
LOGFILE=/tmp/gfarm2fs-$USERNAME.log

DATE=/bin/date
SLEEP=/bin/sleep

#####
if [ $# -ne 1 ]; then
    echo "usage: `basename $0` MOUNTPOINT"
    exit 1
fi

if [ ! -f $LOGFILE ]; then
    touch $LOGFILE
    chmod 600 $LOGFILE
fi

DATE=`date '+%Y%m%d-%H%M%S'`
MOUNTP=$1

(cd /; $SLEEP 1;
    $FUSERMOUNT -u $MOUNTP && \
        echo $DATE UMOUNT:SUCCESS $MOUNTP || \
        echo $DATE UMOUNT:FAIL $MOUNTP
) >> $LOGFILE 2>&1 &

8. コメント

質問やコメントがありましたら, gfarmfs at gmail.com まで自由にメールを送付してください.


Grid Datafarm