プロが教えるわが家の防犯対策術!

Debian etch(PPC版)でnfsサーバを以下の設定で立て、自宅LAN内で
ファイル共有をする事が出来ました。

root@nfsserv# cat /etc/exports
/home/share 192.168.0.0/255.255.255.0(rw,sync,subtree_check)
root@nfsserv# /etc/init.d/nfs-kernel-server start
Exporting directories for NFS kernel daemon....
Starting NFS kernel daemon: nfsd mountd.

root@client# mount -t nfs -o rw nfsserv:/home/share /mnt/share
root@client# touch /mnt/share/hoge
root@client# ls
hoge

ここまでは正常に動作しているのですが、この環境でnfsservにUSB外付けハードディスクドライブ(/dev/sdb,プライマリパーティションでext3なsdb1がひとつだけある)を接続しました。

root@nfsserv# mkdir /home/share/sdb1
root@nfsserv# mount -o rw /dev/sdb1 /home/share/sdb1
root@nfsserv# chown nobody /home/share/sdb1
root@nfsserv# chgrp nogroup /home/share/sdb1
root@nfsserv# ls -l /home/share/
drwxrwxrwx 5 nobody nogroup 4096 2010-02-14 23:35 sdb1/
root@nfsserv# ls /home/share/sdb1
bar/ foo/ lost+found/
root@nfsserv# exit
user@nfsserv$ touch /home/share/sdb1/hello
user@nfsserv$ ls -l /home/share/sdb1/hello
-rw-r--r-- 1 user user 0 2010-02-15 00:23 /home/share/sdb1/hello

と、ローカルからは読み書き出来ているのですが、
exportfs -ra、nfs-kernel-serverの再起動、クライアントからの
NFSディレクトリ再マウント後

root@client# ls /mnt/share/sdb1
何も表示されない
root@client# touch /mnt/share/sdb1/hoge
touch: `/mnt/alice/sdb1/hoge'にtouchできませんでした: Permission denied

となってしまいます。
デバイスのマウントの仕方が悪いのか、/etc/exportsの書き方が悪いのか、分かりませんでした。

NFSでの公開ディレクトリ以下に、USBハードディスクをマウントして、クライアントから読み書きしたいのですが、どのようにすればいいでしょうか。

A 回答 (2件)

この場合、USBハードディスクはNFSクライアント側からは見えません。

NFSクライアントから見えている「………/sdb1」は、サーバ側にてUSB-HDDがマウントされる前のディレクトリです。

一般に、「子ファイルシステム」(USB-HDDのことです)をマウントしている「親ファイルシステム」(/usr/shareのことです) をNFSで export しても、NFSクライアントから見えるのは「親」のみで「子」は見えません。USB-HDDだけでなく、普通のATA/SCSIなHDDでも同じ結果になります。これは現在のLinux(ほとんどのUnixでも同じ)におけるNFSサーバの仕様です。

(ユーザモードNFSしかなかった時代の古いLinuxでは、実はこの場合でもUSB-HDDが見えたのですが、最近主流のカーネルモードNFSでは見えません)


クライアントからUSB-HDDを見えるようにするには、いくつか方法があります。

1. USB-HDDをマウントした部分も明示的にexportする

これが正攻法です。

- nfsserv上の /etc/exportfs に以下を追記
 /home/share/sdb1 192.168.0.0/255.255.255.0(rw,sync,subtree_check)
- clientでマウント
 mount -t nfs -o rw nfsserv:/home/share/sdb1 /mnt/share/sdb1
(クライアント側には /mnt/share/sdb1 を mkdir しておいてください)

2. exportのオプションに nohide オプションをつける

nohideオプションにはいろいろな制限があります。詳細はexports(5)。

3. サーバ側で、カーネルモードNFSではなくユーザモードNFSを使用する。

 ユーザモードNFS(nfs-user-server)を使うと「親のファイルシステム」をexportするだけで「子のファイルシステム」が見えるようになります。ただし、速度はかなり低下します。
    • good
    • 0
この回答へのお礼

早速のご回答ありがとうございました。

> USB-HDDだけでなく、普通のATA/SCSIなHDDでも同じ結果になります。これは現在のLinux(ほとんどのUnixでも同じ)におけるNFSサーバの仕様です。

なるほど!クライアントが親に対する権限を持っていても、子のファイルシステムが全く別個のものだと、それ相応扱いが変わってくるのですね。subtree_checkオプションを曖昧な意味で認識していました。

> (ユーザモードNFSしかなかった時代の古いLinuxでは、実はこの場合でもUSB-HDDが見えたのですが、最近主流のカーネルモードNFSでは見えません)

ユーザモードとカーネルモード、どのように振舞いの差があるのか勉強してみたいと思います。

ご提示頂きました方法では、1番でやってみたいと思います。(しっかりと動作してくれました)

口下手な質問にも関わらず、的確な原因提示に加え、それに対する対処法をいくつも頂き、非常に助かりました。本当にありがとうございます。

お礼日時:2010/02/17 09:42

さっぱりわかんないんだけど…



HDDに割り当てられたデバイスファイル名の変化
(USBストレージではよくあることです)
FAT系ファイルシステムをマウントすることで
権限設定が意図どおりに行なわれていない

この二つが怪しい気はします。

たとえばデバイスファイルではなく
UUIDでパーティションを指定してサーバーにマウントし
USB-HDDをext3などでフォーマットしても
同様のトラブルがおきるとしたら、問題は違うところにあると思います。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!