ネットワーク起動時にDHCPを介してnfsrootパスを提供する方法

ネットワーク起動時にDHCPを介してnfsrootパスを提供する方法

一部のLinuxシステムをネットワーク起動して、NFSを介してルートファイルシステムをマウントしようとしています。すべてのシステムが同じTFTP設定を共有できますが、DHCP応答の値に応じて異なるNFSフォルダをマウントできるように、DHCPを介してNFSマウントへのパスを提供したいと思います。

nfsrootカーネルパラメータ(たとえば)を指定すると、nfsroot=1.2.3.4:/srv/clientそのNFSサーバーとパスからルートファイルシステムをマウントして正常に起動するため、カーネルパラメータにパスを提供する限り、設定は正常に機能します。

ただし、カーネルコマンドラインでこのパラメータをハードコードしたくないので、DHCPレスポンスからロードしたいのですが、動作させることはできません。

DHCPサーバー設定でDHCPオプション17を設定すると、option root-path "1.2.3.4:/srv/client"カーネルブートログにカーネル自動設定がこのDHCPオプションを正しく選択したことIP-Config: Completeが表示されます。rootserver=1.2.3.4, rootpath=/srv/client

ただし、nfsrootカーネルコマンドラインからそのパラメータを削除すると、一部のNFSステップがスキップされるようです。

:: mounting '' on real root
nfs: Bad value for 'source'

したがって、再追加して空白のままにnfsroot=すると、欠落しているNFSメッセージが再表示されますが、パスがないため失敗します。 DHCPが提供するパスを選択しません。

NFS-Mount: y:y
Waiting 10 seconds for device /dev/nfs ...
nfsmount: need a path
ERROR: Failed to mount the real root device.

見ているカーネルコード/パス,がまたは数字で始まる場合は解析され、そうでなければ/tftproot/%sパスはデフォルトの文字列で埋められているように見えます。そのため、パス,(空のサーバー、空のパス、オプションの区切り文字、オプションなし)を提供しようとしましたが、ある程度進歩がありました。これで、DHCP 提供パスが表示されます。

NFS-Mount: ,:/srv/client
Waiting 10 seconds for device /dev/nfs ...
nfsmount: can't parse IP address ','
ERROR: Failed to mount the real root device.

しかし、今はカンマをサーバーIPとして扱います。実際のパスを提供すると、何が起こるのかを確認するために理論をテストすると、nfsroot=/dummyDHCP応答が上書きされます。

NFS-Mount: /dummy:/dummy
Waiting 10 seconds for device /dev/nfs ...
nfsmount: can't parse IP address '/dummy'
ERROR: Failed to mount the real root device.

今は少し詰まっています。このパラメータを省略すると、NFSマウントを実行しようとは思われませんが、nfsrootこれを指定するとDHCPサーバーから返された値が上書きされます。

nfsrootインストールを実行し、DHCP応答の値を使用するようにカーネルに指示する方法についてのアイデアはありますか?

答え1

まあ、これが解決策なのかはよくわかりませんが、いつものように質問をしたらすぐに答えが出ます。

提供していただくと、nfsroot=:DHCPオプションからサーバーIPとNFSパスを抽出できます。

DHCP値に提供されるNFSオプション(DHCPからサーバーやパスを取得する1.2.3.4:/srv/client,v3,hardなど)nfsroot=:,v3,hard

正しい方法を知っている人がいる場合は、回答を投稿してください。しかし、この回避策は一時的にも効果があるようです。

関連情報