一部の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=/dummy
DHCP応答が上書きされます。
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
正しい方法を知っている人がいる場合は、回答を投稿してください。しかし、この回避策は一時的にも効果があるようです。