問題状況
- server1 disk1
- server2 disk2
こんな感じで2つ端末があってそれぞれにディスクが繋がってる状況。
それぞれでautofs
を使って他方のディスクを見えるようにしています。
ここで、server2側からはdisk1は見えてるものの、 server1側からはdisk2が見えない、という状況になりました。
serverからssh server2
みたいにしてログインすることは出来ました。
なのでネットワークとしてはserver2は見えてる模様。
問題を探ってみる
取り敢えずネットワークとしてはきちんと働いてる様子。
server1の方にログが残ってるかな、と思って /var/log/message等を見てみましたが何も出ていません。 (これは設定でエラーも出さないようになってただけ。)
差し当たり両サーバー再起動してみたものの上手く行かず。
エラーログも出る様になってないので、 一度ログを出すようにして見ることに。
これを参考にautofs
内で実際に実行されてるautomount
コマンドを直接使って
アウトプットを見てみます。
$ sudo /sbin/service autofs stop
$ sudo /usr/sbin/automouont -f -v
autofs
を一旦止めてautomouont
を直接走らせます。
(-f
はフォアグラウンドで走らせるため、-v
はverboseモード。)
最初automount
コマンドが見つからなくて困りましたが、
/etc/init.d/autofsを見て発見しました。
(/sbin/
や/usr/sbin/
にパスをrootでも通してないので。。。)
実際に実行してみると、
failed, reason given by server: Permission denied
みたいなエラーが出ました。
に従って見てみます。
/etc/exports ファイルを調べて、 そのボリュームがエクスポートされているか、 クライアントが正しいアクセス権限を持っているかを確認しましょう。 例えば、読み取りのアクセスしかないクライアントが、 そのボリュームを ro オプションではなく rw オプションで マウントしようとしていないでしょうか。
まずserver2の/etc/exportsをチェック。
/mnt/disk2 server1(rw,sync)
な感じでdisk2領域をserver1からread/write権限で見ることを許可しています。
次に/etc/hostsを確認。ここではローカルネットワーク内での 名前解決の一部が書いてありますが、 基本、DNSサーバーを使って解決するので特にserver1については記述なし。 (server1の方にも特に記述なし)
nfsd の起動以降に /etc/exports を変更した場合は、exportfs コマンドでそれを NFS に伝えたでしょうか。 exports を確実に再読み込みさせるには、 exportfs -ra コマンドを入力しましょう。
この辺りも再起動したりして確認してみましたがexportsの設定自体は問題ない感じ。
/proc/fs/nfs/exports ファイルを調べ、 ボリュームとクライアントが正しくリストされているか確認しましょう。 (/var/lib/nfs/xtab を見れば、 アクティブなエクスポートすべてに対する 完全なオプションのリストも得られます。) リストにない場合は、正しく再エクスポートされていません。 リストにあった場合は、 サーバがクライアントをあなたの意図通りに 認識しているかを確認しましょう。 例えばそのクライアントの古いリストが /etc/hosts にあって、 サーバはこっちを見ているのかもしれません。 あるいはクライアントの完全なアドレスを書いていないせいで、 名前解決の結果がドメインの別のマシンになっているかもしれません。 例えばクライアントからサーバに ssh や telnet でログインしてみましょう。 ここで who と入力すると、 自分のログインセッションがリストに出るはずで、 あなたのクライアントマシンが サーバからどのような名前で見えているかがわかります。 このマシン名を /etc/exports のエントリに書きましょう。 最後に、サーバからクライアントを ping し、 クライアントからサーバを ping してみましょう。 これでもだめだったり、あるいはパケットロスがあった場合には、 より下層のネットワークの問題でしょう。
そこで、server1からserver2にsshしてw
(またはwho
)してみると、
[server2] $ w
XX:XX:XX up X:XX, 1 user, load average: X.XX, X.XX, X.XX
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
user pts/0 192.168.1.2 XX:XX X.XXs X.XXs X.XXs w
みたいな感じでFROM
の所がIPアドレスになっています。
逆にserver2からserver1にsshでログインして見ると
[server1] $ w
XX:XX:XX up X:XX, 1 user, load average: X.XX, X.XX, X.XX
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
user pts/0 server2.example. XX:XX X.XXs X.XXs X.XXs w
とホスト名が表示されます。
何故かserver2の方では名前が解決できていない様。
ただ、ping server1
みたいにしてserver1を見ることはできています。
ここで色々見ていたら /etc/resolv.confでの設定が全てコメントアウトされてました。 server1の方はきちんとコメントアウトなしで書かれています。
resolv.confではnameserver
でDNSサーバーの設定をしたり、
search
でドメインを指定してドメインを除いたホスト名だけで
見える様にしたりする設定があるので、
これのせいでダメになってたみたいです。
(ping
とかで見えてたのが良くわからない。ちょっと見逃してる設定がある…?)
解決
ということで、問題はここ。 きちんと覚えてないでいけないですが、色々テストしてるうちに コメントアウトしたまま忘れてしまったんでしょう、多分。。。
/etc/resolv.confの設定をコメントなしできちんと設定して、
暫く様子を見ていたらきちんとserver1側から
disk2が見えるようになり、
server2へログインした際もw
とかでホスト名が見える様になりました。