NFS4はマシンのホスト名が重複しているとマウントできない

nogajun
nogajun

はい。タイトルそのままです。

マシンが複数台あって、そのマシンのホスト名が重複しているとNFS v4でマウントはできません。 その状態でマウントすると意味不明なトラブルが起こります。これが原因で5月は死ぬほど悩んでいました。

トラブル発生

先日、「LTSP導入に失敗した」とブログ記事を書きました。その記事で「マシンとネットワークが遅いのでローカルのSSDにOSをインストールして、ホームをNFSでマウントする」と書きましたが、そんなに時間を空けず作業をしていました。

作業自体は、Clonezilla server liteを使ってOSを全台展開。dnsmasqのDHCPからMacアドレスでIPを固定にしてマシン名を振ったら、Ansibleを使ってNFSでホームをマウントする設定を流し込んであっさり作業は終わりました。

すべて終わって、デスクトップ環境のチェックしていると様子がヘンです。デスクトップ環境のKDEのエラー表示が止まりません。そしてデスクトップがクラッシュします。具体的にはkactivitymanagerdがクラッシュしてデスクトップ自体が落ちるという現象です。しかも、たまにではなくクリックして何かやるたびに落ちるという、とんでもない状態で、とても使い物になる状態じゃありませんでした。

これは、ただごとではなく「家で試したときには、そんなことはなかったし、なぜ???」という気持ちでトラブルシュートをしていましたが結局、その日は原因がわからず、あきらめて帰宅。

トラブルシュート

それからクラッシュしていたkactivitymanagerをキーワードにWebで調べるとkactivitymangerdはデータ保存にSQLiteを使っていることが判明しました。さらに「NFS SQLite」で調べると「SQLiteをNFS上で使うな」という話が見つかりました。

「これが原因か?」と思い、NFSとSQLiteにKDE関連のキーワードを追加して調べると、この2つが見つかりましたが、すでに解決済みの問題で解決につながらず…。

それ以外では、それらしい情報もなく最初に見つけた「SQLiteをNFSで共有するな」という話も、NFSで同じSQLiteのファイルを共有している場合の話で、KDEデスクトップ環境の場合は個別のSQLiteファイルを使っているのでこのトラブルとは関係がない話です。

原因判明

うすうす、原因はこれではないと思っていたけれど手がかりがつかめず本当に手詰まり状態になってしまい頭を抱えていたところ、園田先生がふと「OSをクローンして何かが重複してるから問題が起こっているのでは?」と言いました。

それを聞いて自分は「そんなことはないんじゃないですか」と返事をしましたが、作業に戻って作業マシンのターミナルを見ると、ターミナルにはクローンした元のOSのホスト名が表示されています。

「まさかこれか?」と思って、今度は「NFS ホスト名」をキーワードに検索したところ、こんな記事が見つかりました

それからクライアントマシンをチェックすると、DHCPとしてはMacアドレスごとに違うホスト名を振ってあります。しかし、本体のホスト名/etc/hostnameはクローン元のホスト名そのままです。半信半疑でhostnamectlでホスト名を変更して念のため再起動したところ…

デスクトップはクラッシュしません。何をやっても落ちません。普通に使えます。いろんなことを試しても問題ありません。

「マジかー!」と本当に叫んで、今度は全クライアントのホスト名を本来のホスト名に変更して再起動すると、どのマシンでログインしても問題がありません。

ということで、ホームをNFSでマウントした環境でKDEデスクトップがクラッシュする原因は、複数台の同じホスト名のマシンがNFSでマウントしようとしていたことが原因でした。

NFSが排他制御で1台マウントしたら、ほかのマシンがマウントできないなら、おそらくすぐに気づいたと思います。 しかし、一見マウントできている(ように見える)ので、これは気づかないですよ。ホントに。ということで、他の人もハマらないように書いておきます。