クライアントがディスクレスCentOS7.2イメージを起動できるように、CentOS7.2サーバーをセットアップしています。私はCentOS6.6でこれを実行しましたが、何年にもわたって複数のサーバーとクライアントで正常に動作します。同じ構成パラメーターを使用します。
/var/lib/tftpboot/pxelinux.cfg/defaultに含まれるもの:
default menu.c32 Prompt 0 timeout 100 TOTALTIMEOUT 300 ONTIMEOUT CentOS MENU TITLE Linux 7.2PXEブートメニュー LABEL CentOS MENU LABEL CentOS 7.2 x86_64 em1 KERNEL images/centos/x86_64/7.2/vmlinuz-3.10.0-327.el7.x86_64 APPEND initrd = images/centos/x86_64/7.2/diskless_initrd.img ip = dhcp nfs = 10.0.0.1:/diskless/centos/7.2/root rw quiet
スイッチルートを開始しています... ルートの切り替えに失敗しました:指定されたスイッチルートパス/ sysrootがOSツリーではないようです。 os-releaseファイルがありません。 initrd-switch-root.service:メインプロセスが終了しました、code = exited、status = 1/FAILURE
これは私を緊急シェルに落とします、そして私が/ sysrootを見るならば、それは空のディレクトリです!
Diskless_initrd.imgを使用して保存しました
dracut -f diskless_initrd.imgʻuname -r`
指定した場所にコピーします。また、「dracut -d nfs-dnetwork」を試してみました。
これが私のCentOS6.6サーバーで機能する理由がわかりませんが、ここ7.2では機能しません。
私は何ヶ月も後にこの問題に戻り、私が欠けていたもの、つまりアクティブなファイアウォールを見つけました。 PXE/TFTP BOOT関数は、ファイアウォールルールを実行しなくても、vmlinuzおよびinitrdイメージを正常に転送できるようですが、NFSでルートファイルシステムをクライアントに転送するときはできませんでした。
Red Hat 7.3では、最初に/ etc/sysconfig/iptablesファイルをCentOS6.6サーバー(クライアントが「ディスクレス」ファイルシステムを起動してマウントできる)からコピーしてから、次のように実行しました。
systemctl enable Firewalld
systemctl startfirewalld
これで、クライアントはリモートファイルシステムを正常にマウントし、Linuxログインプロンプトが表示されました。
ここで、このインスタンスで本当に必要なiptablesファイルの部分を特定します。
あなたはまだこれに取り組んでいますか? RHEL/Centos7.xでも同じ問題が発生していました。 5.xまたは6.xでこの問題が発生したことはありません。レガシーモードとUEFIモードの両方を試しましたが、同じ結果になりました。
プロセスで問題を見つけました。実際には2つのこと。
Rsyncしたファイルシステムの/ etc/sysconfig/network-scriptsをクリーンアップするのを怠りました。それでも、ソースファイルシステムからのスクリプトが含まれていました。
ディスクレスクライアントには複数のNICがあります。次のように、ネットワークブート構成に特定のブートパラメータがありませんでした。
APPEND initrd = images/centos/x86_64/7.2/diskless_initrd.img ip = bond1:dhcp root = nfs:10.0.0.1:/diskless/centos/7.2/root bond = bond1:eth4、eth5:mode = 1 biosdevname = 0 net.ifnames = 0rwquiet
ボンディングされたネットワークデバイスを使用していない場合でも、ディスクレスクライアントがファイルシステムを取得するNIC)のデバイス名を指定する必要がある場合があります。
APPEND initrd=images/centos/x86_64/7.2/diskless_initrd.img ip=eth3:dhcp root=nfs:10.0.0.1:/diskless/centos/7.2/root biosdevname=0 net.ifnames=0 rw quiet