
Ubuntu日本語フォーラム

ログインしていません。
nfsの設定がうまく行かないので問題点を教えて頂きたいと思います。経過と質問を下記に示します。よろしくお願いします。
【経過】
サーバ側 ubuntu 9.10
#nfs関係の設定は何もされていないので、ファイルの取り寄せとインストールから。
1.sudo apt-get install nfs-kernel-server
#設定ファイルの編集
2. /etc/exportsの編集
/home/hogehoge xxx.yyy.0.0/255.255.255.0(rw,sync,no_root_squash)
→/home/hogehogeがないのでmkdirで作成する。
#カーネル(デーモン?)の起動
3. nfs-server-kernelの再起動
a),b)のどちらかを実行する
a) /etc/init.d/nfs-kernel-server restart
b) exportfs- r
exportfs: /etc/exports [2]: Neither 'subtree_check' or 'no_subtree_check' specified for export "xxx.yyy.0.0/255.255.255.0:/home/hogehoge".
Assuming default behaviour ('no_subtree_check').
NOTE: this default has changed since nfs-utils version 1.0.x
クライアント側:redhat
mkdirで/mnt/hogehogeを作成する。
[xxxx@xxxxx xxxx]# mount xxx.yy.70.84:/home/hogehoge /mnt/hogehoge
mount: xxx.yy.70.84:/home/hogehoge failed, reason given by server: Permission denied
結果、失敗となる。
【質問】
0.この失敗はサーバ側のPermission deniedとなっているようです。どのようなレベルでの許可問題なのでしょうか。
1. このレスポンスは正常なのでしょうか。こちらが指定した設定とは異なりデフォルトで動作するという風に読めます。
2.確認ですが、サーバ側は当然ルート権限で実行すると思います。クライアント側もルート(su or sudo)でやるのでしょうか。
3.サーバ側の/home/hogehogeのフォルダ設定とか所有者はどうすればよいでしょうか。フォルダ設定にnfsの可否が指定されるのでしょうか。
4.クライアント側の/mnt/hogehogeフォルダの設定と所有者はどうするのでしょうか。
それ以外に問題があるでしょうか。
よろしくお願いします。
オフライン
質問者です。
質問に示した箇条書きのnfsのやり方は、ネットで検索したものですが、今考えると、不足している情報がありそうです。
○TCP wrapperの問題 /etc/hosts.allow, /etc/hosts/denyの記述
以前から、疑問に思っていたことがあります。hosts.allow, hosts.denyにそれぞれマシン情報を記述するわけですが、どっちが優先されるのでしょうか。ある操作について同一マシンに許可と不許可が設定されているということですが。
○/etc/fstab ←これは自動でマウントするということだったように思いますが。
よろしくお願いします。
オフライン
> /etc/exports
> /home/hogehoge xxx.yyy.0.0/255.255.255.0(rw,sync,no_root_squash)
> # mount xxx.yy.70.84:/home/hogehoge /mnt/hogehoge
転記ミスで無いとするとネットワークアドレスかマスクのどちらかが違うと思います (/24 か /16 かという意味で)
オフライン
確認のためにお尋ねします。
/etc/exportsの中の以下の文です。
/home/hogehoge xxx.yyy.0.0/255.255.255.0(rw,sync,no_root_squash)
これはxxx.yyy.0.0 ~ 255.255.255.0 の範囲のマシンからのftpを受付け、書き込み自由とする。ということでしょうか。
xxx.yyy.70.80のマシンからの依頼はOKですか。ちなみにxxx.yyyというのが職場全体のIPアドレスです。
クライアント側のコマンド
mount xxx.yy.70.84:/home/hogehoge /mnt/hogehoge
は、サーバがxxx.yy.70.84でありその/home/hogehogeをクライアント側の/mnt/hogehogeとして受け取るということでしょうか。
(/24 か /16 かという意味で) ←この部分の意味がわからなかったのですが。どういうことでしょうか。
また、
オフライン
まず
> 確認のためにお尋ねします。
> /etc/exportsの中の以下の文です。
> /home/hogehoge xxx.yyy.0.0/255.255.255.0(rw,sync,no_root_squash)
> これはxxx.yyy.0.0 ~ 255.255.255.0 の範囲のマシンからのftpを受付け、書き込み自由とする。ということでしょうか。
ここで許可している範囲は xxx.yyy.0.0~xxx.yyy.0.255
ftp ではなくて NFS です
> xxx.yyy.70.80のマシンからの依頼はOKですか。
上記の通りなら範囲外です(これが Permission Denied ということ)
> ちなみにxxx.yyyというのが職場全体のIPアドレスです。
以降 職場のネットワークは xxx.yyy.0.0/16 (xxx.yyy.0.0~xxx.yyy.255.255) と仮定します
xxx.yyy.70.80 を許可するには /etc/exports の xxx.yyy.0.0/255.255.255.0 を
1. その IP アドレスだけを許可するなら xxx.yyy.70.80/32 にする (許可する数 1)
2. 許可する範囲を職場全体まで広げるなら xxx.yyy.0.0/16 にする (許可する数 255×255)
のどちらかでどうでしょう
> (/24 か /16 かという意味で) ←この部分の意味がわからなかったのですが。どういうことでしょうか。
この記述で話が通じるか確認させていただきました
職場のネットワークを管理されている方にも相談されることをお勧めします
# 参考 https://help.ubuntu.com/community/NFSv4Howto
オフライン
255.255.255.0を255.255.0.0として解決しました。ありがとうございます。
これが解決すると、その次はこれをブート時に自動でマウントするという設定が必要になります。
サーバの方は、sudo exportfs -r などのコマンドがブート時に自動で動き、クライアントの方は、mountコマンドが自動で動くような形になっていればいいのかなと思いますが、/etc/fstabを編集して処理していたと思います。どのように設定するのでしょうか。
長らくやらなかったので忘備録を探し回ったのですが、出てきませんでした。すみません。大まかな方向性だけでもよろしくお願いします。
オフライン
> 長らくやらなかったので忘備録を探し回ったのですが、出てきませんでした
> 大まかな方向性だけでもよろしくお願いします。
・・・
# /etc/fstab ~~追加~~ xxx.yyy.70.84:/hogehoge /mnt/hogehoge nfs4 _netdev,auto 0 0
クライアントは Redhat ということなのでこちらのページが詳しいです
RHEL4 リファレンスガイド: NFSクライアント設定
オフライン
favicon.ico さんご紹介のリンク先にも記述が有りますが,autofs を使う手も有ります.
autofs はパス /net/nfsserver/home/foo へのアクセスを nfsserver が exort する /home へのアクセスへとマップし,
mkdir -p /net/nfssercer/home && mount -t nfs nfsserver:/home /net/nfsserver/home
に相当する作業を自動でやってくれます.
マップしたパスへのアクセスが有って始めてサーバーに接続するので,
また,一定時間アクセスが無いと自動的にアンマウントするので負荷の軽減にもなります.
autofs が走っているクライアントではこんな風になります.
nfsserver[1-3] がネットワーク内にあるとします.
nfsserver[12] には最近アクセスして,nfsserver3 は /home を export しているとしましょう.
$ ls -F /net nfsserver1/ nfsserver2/
--- 一度アクセスした nfs サーバのホスト名が /net 内のディレクトリにマップされている.
/net/nfsserver3 はまだ作成されていない.
通常ならこの状態での /net/nfsserver3 へのアクセスは no such file or directory のエラーになるが,
$ ls -F /net/nfsserver3 home/
--- ls による /net/nfsserver3 へのアクセスに応じて autofs が /net 内にディレクトリを作成,
export された /home がマウントされ,クライアントから見えるようになる.
設定はクライアント側(Ubuntu や Fedoraの場合)で
autofs パッケージをインストールした後, /etc/auto.master の
#/net -hosts
のコメントを取り除いて autofs を再起動すれば OK のはずです.
サーバの名前解決が正しくできるならば,(またはホスト名のかわりに ipアドレスでも OK,/net/192.168.0.1 等)
新しく nfs サーバをネットワークに立てても,クライアント側で設定を追加する必要がありません.
/etc/fstab への記載では nfsサーバ毎にエントリを追加しなければならないので,autofs の方が管理は楽です.
オフライン
当方では,ノートPCが NFS クライアントマシンであり,
NFSサーバの立っていないネットワークに繋ぐことがあるので,
オンデマンドで NFS マウントする autofs を導入しています.
NFS + autofs でファイル共有を初めて約5年,
/etc/fstab は使ったことはなかったので,興味があって実験しました.
Fedora を入れたノートPCで,/etc/fstab に
nfsserver:/home /mnt nfs auto,_netdev 0 0
と記述してNFSサーバの立っていないネットワークに繋いで起動したら,
Mounting NFS filesystems: mount.nfs: Connection timed out
[FAILED]と,タイムアウトになるまで起動シークエンスが3分間止まりました.
RHEL ではどの程度止まるのかは実験出来ません.
/etc/fstab に書くマウントオプション(noauto,_nodev の部分)を
うまく指定する(timeo=オプションかな?)ことで,
タイムアウトになるまでの時間は調節できるはずです.
老婆心ながら,NFSサーバに常時接続できる環境でも,ネットワークに障害が起きたり,
NFSサーバがメンテナンスで止まっていたり,/etc/fstab の記述を間違えたりすると,
クライアントマシンの起動に数分間待たされる可能性があることには留意しておいたほうが良いでしょう.
オフライン
回答ありがとうございます。整理して確認したいと思います。
○autofsが便利であり、これはクライアント側で設定する。
1.sudo apt-get install autofs ←みたいな感じでしょうか。
2./etc/autofs.masterの編集
それから先は自動なのでしょうか。NFSは、サーバAのフォルダBを自分マシンのフォルダcとみなす、ということなので、A,B,Cという3つの情報を指定する必要があると思います。これを静的に決め打ちするのが/etc/fstabですね。autofsではどこで設定するのでしょうか。何も指定しなくてもすべてやってくれるということなのでしょうか。
○サーバ側のNFSのサービスが自動で起動するにはどうしたらいいのでしょうか。
sudo exportfs -rによってサービスが起動していくわけですが、それを入力しなくても起動する設定です。
デーモンの自動起動?とか、サービスの自動的な起動方法を教えて頂きたいのですが。
すみません。よろしくお願いします。
オフライン
hoso1093 さん による投稿:
1.sudo apt-get install autofs ←みたいな感じでしょうか。
Fedora では yum を使うので,RHEL も yum ではないでしょうか?
2./etc/autofs.masterの編集
それから先は自動なのでしょうか。
少なくとも当方ではそうでした.
hoso1093 さんのクライアントは Ubuntu ではなく,RHEL だそうですので,具体的な設定はオフトピックになりますが,
NFSクライアント(Ubuntu 及び Fedora)側の /etc/autofs.master の
/net -hosts
の行の先頭に # がついていたら取り除き,クライアントマシンの再起動か autofs の再起動で,
「/net から始まる UNIX 標準のパス」を,autofs が「NFSサーバと export したパスの組」へと翻訳してくれるのです.
クライアントマシンでの
/net/サーバ名/export したディレクトリのパス
が NFS サーバがエクスポートしたディレクトリとみなされます.
NFSは、サーバAのフォルダBを自分マシンのフォルダcとみなす、ということなので、A,B,Cという3つの情報を指定する必要があると思います。
サーバA : サーバ名=foo または IP=192.168.0.1
(export した)フォルダB:/etc/exports に記述したディレクトリ /bar としたとき,
クライアント側でのフォルダ c は /net/foo/bar または /net/192.168.0.1/bar になります.
当方では NFS サーバは所謂ディストリビューションを使わず,
カーネル,ライブラリ,ユーティリティの殆どを
自前でコンパイル&インストールしたマシン(玄箱)で立てています.
Ubuntu/Fedora は ssh サーバを起動した以外は専らクライアントとしか使っていませんので,
○サーバ側のNFSのサービスが自動で起動するにはどうしたらいいのでしょうか。
は,他の詳しい方に委ねます.
オフライン