ディスクレス設定を試しています。ノード/ワークステーション/システム、ユーザーガイドに記載されているガイドラインディスクレスシステム~のためアーキテクチャLinux(4.13.12-1-ARCH).
質問
クライアントがTFTPに正常に接続されました(FTPプロトコル)、すべてのファイルを転送し、GRUB選択メニューを表示します(関連する抜粋grub.cfg
):
load_video
set gfxpayload=keep
insmod gzip
insmod ext3
insmod net
insmod tftp
insmod efinet
set root=(tftp,192.168.0.101)
set prefix=(tftp,192.168.0.101)/netboot/grub
linux /netboot/vmlinuz-linux add_efi_memmap root=/dev/nfs rootfstype=nfs nfsroot=192.168.0.101:/srv/[CLIENT OS] nfsrootdebug rw ip=dhcp
initrd /netboot/initramfs-linux.img
前に試してみましたip
(https://www.kernel.org/doc/Documentation/filesystems/nfs/nfsroot.txt)
ip=:::::efinet0:dhcp
ip=:::::eno1s0:dhcp
ip=:::::eth0:dhcp
ip=[CLIENT IP]:[SERVER IP]:[GATEWAY IP]:[NETMASK]:[HOSTNAME]:[DEVICE]:dhcp
linux
とinitrd
両方が読み込まれた場合、続行すると、次の結果が発生します。
[FAILED] "Failed to start Switch Root."
See 'systemctl status initrd-switch-root.service' for details.
You are in emergency mode. After logging in, type "journalctl -xb" to view
system logs, "systemctl reboot" to reobot, "systemctl default or ^D to enter into default mode.
Press Enter for maintenance
(or press Control-D to continue):
トラブルシューティング
add_efi_mmapの削除
代わりにFailed to start Switch Root.
カーネルがパニック状態になります。
[ 1.114386] Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,255)
[ 1.114458] CPU: 3 PID: 1 Comm: swapper/0 Not tainted 4.13.12-1-ARCH #1
[ 1.114509] Hardware name: ASUSTeK COMPUTER INC. UX51V2A/UX51VZA, BIOS UX51VZA.204 12/03/2012
[ 1.114573] Call Trace:
[ 1.114604] dump_stack+0x63/0x8b
[ 1.114637] panic+0xe4/0x23d
[ 1.114667] mount_block_root+0x1f4/0x2ab
[ 1.114703] ? set_debug_rodata+0x17/0x17
[ 1.114737] mount_root+0x6a/0x6d
[ 1.114767] prepare_namespace+0x134/0x16c
[ 1.114802] kernel_init_freeable+0x1ec/0x205
[ 1.114840] ? rest_init+0xe0/0xe0
[ 1.114872] kernel_init+0xc/0xfc
[ 1.114904] ret_from_fork+0x25/0x30
[ 1.114957] Kernel Offset: 0x3000000 from 0xffffffff81000000 (relocation range: 0xffffffff80000000-0xffffffffbfffffff)
[ 1.115040] ---[ end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,255)
システムデバッグ
Journalctlにアクセスできません。キーボードが検出されない、押す、またはEnter
続行^D
できないため、システムは停止します。
カーネルCLIにsystemd.unit=emergency.target
またはを追加して緊急モードで直接起動しようとすると機能しないようです。emergency
+(UPDATE 2)このmkinitcpio
パラメータは開始をbreak=premount
変更しませんsystemd
。
ネットワーク
Wiresharkを使用すると、初期PXE起動後のネットワークアクティビティはありません。つまり、ロードlinux
およびinitrd
アンロード時にクライアントとサーバー間の通信はもはやありません。
SERVER IP: 192.168.2.101/24
CLIENT IP: 192.168.2.102/24
幼虫
GRUBネットワーク_*注文するそして環境変数すべてが正常に動作していることを示すようです。
net_ls_cards efinet0 [CLIENT NETWORK DEVICE MAC]
net_ls_addr efinet0 [CLIENT NETWORK DEVICE MAC] 192.168.2.102
net_ls_routes efinet0:local 192.168.2.0/24 efinet0
efinet0:default 0.0.0.0/0 gw 192.168.2.101
echo $net_default_ip 192.168.2.102
echo $net_default_mac [CLIENT NETWORK DEVICE MAC]
echo $net_default_server 192.168.2.101
echo $net_efinet0_ip 192.168.2.102
echo $net_efinet0_mac [CLIENT NETWORK DEVICE MAC]
echo $net_efinet0_hostname (empty)
echo $net_efinet0_domain (empty)
echo $net_efinet0_dhcp_server_name (empty
echo $net_efinet0_next_server 192.168.0.101
echo $net_efinet0_root_path 102.168.0.101:/srv/[CLIENT OS]
echo $net_efinet0_extensionpath (empty)
カーネルサポートnfsroot
とip
ネットワークアクティビティがなかったため、実行されたか実行されていないとip
推定されます。nfsroot
実際、私が経験している問題は質問で説明されています。NFSサポートでカーネルを構築しましたが、/dev/nfsを取得できませんでした。
この質問に対する答えは次のとおりです(Andreas Wiese、2014年7月1日14:58)。
...モジュール以外のカーネルバイナリにNFSサポートが組み込まれていることを確認してください(または
initramfs
それを処理できるものが必要です)。ネットワークドライバも同様です。カーネルイメージにイーサネットネットワークカード用のドライバが組み込まれているはずです。それ以外の場合は、次のように始める必要がありますinitramfs
。 1. 以下に従ってください。上記のリンクは、次のことを示しています:設定、正しいパラメータを提供し、パラメータを介してカーネルにネットワーク設定を知らせます(これが正しく機能していることを確認するための最善の方法です。つまり、誤って設定されたDHCPサーバーを除外するです)。 2. DHCPデーモンを有効にして設定し、クライアントに使用するIPアドレスとNFSルートを見つけることができる場所を示します。 3. 適切な構成および NFS インストールのために initramfs をビルドします。root=/dev/nfs
nfsroot
ip
CONFIG_IP_PNP
CONFIG_IP_PNP_DHCP
Archlinuxカーネル研究
zgrep CONFIG_NFS_FS= /proc/config.gz -> CONFIG_NFS_FS=m
zgrep DHCP /proc/config.gz -> (nothing)
zgrep _IP_PNP_ /proc/config.gz -> CONFIG_IP_PNP is not set
ip
Archlinuxがカーネルコンパイルをサポートしていないことを示します。
バグレポート(2006)のコメントでFS#5056 - デフォルトのカーネルはNFSルートマッピングを無効にします。
mkinitcpioは、すでにカーネルを変更せずにネットワークブートをサポートしています。
これは、上記の質問で許可されている回答のコメントと比較できます。
約10年間、カーネルはnfsを直接起動せず、代わりにカーネルコマンドラインを再解釈し、目的の場所から起動する初期のRAMディスクをインストールします。 – ピーター 2016-06-17 13:54
mkinitcpio
~からlsinitcpio -a
...
Created with mkinitcpio 24
Kernel: 4.13.12-1-ARCH
Size: 55,63 MiB
Compressed with: gzip
...
Included modules:
... nfs ... nfsv3 nfsv4 [explicit] ...
Included binaries:
... ipconfig ... mount.nsf4 ... nfsmount ...
Early hook run order:
udev
Hook run order:
udev net net_nsf4 nbd
Cleanup hook order:
udev
ネットワークデバイスのmkinitcpioサポート(アップデート#1)
ネットワークカード用のドライバをロードする必要がありますが、読んでから確認したかったです。[解決済み] Diskless - ipconfig: 構成するデバイスがありません。
ネットワークモジュールドライバを/etc/mkinitcpio.confに配置します。
MODULES=(atl1c nbd nfsv4)
initramfs.img
モジュールを明示的に宣言しても、クライアントからモジュール全体をビルドしても、何も変わりません。
画像を別のマシンで実行する必要がある場合は、自動検出を使用しないでください。自動検出は、現在実行中のシステムで起動するために必要とされていないすべてのドライバを削除します。
フックから取り外すと、以前に観察されたアンインストール時にカーネルパニックが発生するautodetect
興味深い結果が得られます。ロード中に削除しても効果はありません。 add_efi_mmap
add_efi_mmap
autodetect
initramfs
mkinitcpioのサポートnfs
Archlinux は nsf4 をサポートする場合もありません。
私が知る限り、これはマイナーな問題です。 nfsをマウントする前に、ネットワークが正しく機能している必要があります。
mkinitcpioのサポートip
ちょうど見つけた
- mkinitcpio-nfs-utils(0.3-5)「ipconfig」を含む
- 一つあるmkinitcpio-netconf 0.0.4-2。
追加情報
これは関係があるかもしれませんし、そうでないかもしれません。
「BIOS PXE boot」の代わりに「UEFI PXE boot」を使用する理由は、GRUB i386-pcがgrub.cfgをロードできないためです。 「GRUBへようこそ!」というメッセージが表示されると、コンピュータが再起動または停止し、画面がカラーピクセルで覆われ、結果がランダムに表示されることがあります。 Wireshark ログには、tftp
すべての grub モジュールがロードされる場合もあり、ロードされない場合もあることが表示されます。最後のログエントリは通常、サーバーネットワークデバイスへのクライアント要求です。ARP 60 Who has [SERVER IP]? Tell [CLIENT IP]?
答え1
Arch Linux Wikiの指示に従ってディスクレスシステム
クライアントインストールの場合
サーバーのサブディレクトリに完全なArch Linuxインストールを作成します。
それから
$root/etc/mkinitcpio.confを編集し、nfsv4をMODULESに、net_nfs4をHOOKSに、/usr/bin/mount.nfs4をBINARIESに追加します。
私が理解する限り、net_nfs4
ちょうどmkinitcpio.conf
。net
ついに会ったネットワークでのArchLinuxロード処理 Rosharsky 2015年3月22日 16:14。
この記事にはタイトルがあります。initramfsを準備するこれはArch Linux Wikiであなたになじみのあるものです。
# sed s/nfsmount/mount.nfs4/ "$root/usr/lib/initcpio/hooks/net" > "$root/etc/initcpio/hooks/net_nfs4"
# cp $root/usr/lib/initcpio/install/net $root/etc/initcpio/install/net_nfs4
しかし、いくつかの重要な点が異なります。
まず、Arch Linuxでnet_nfs4ファイルを編集します。
nano $root/usr/lib/initcpio/install/net_nfs4
build() {
add_checked_modules '/drivers/net/'
add_module nfsv4?
add_binary "/usr/lib/initcpio/ipconfig" "/bin/ipconfig"
# Not sure if it is an Arch Linux specific, but nfsmount is correct;
# mount.nsf4 causes mkinitcpio during build to throw an error like "file not found".
# add_binary "/usr/bin/mount.nfs4" "/bin/mount.nfs4"
add_binary "/usr/bin/nfsmount" "/bin/mount.nfs4"
add_runscript
}
第二に、
mkinitcpio.conf ファイルの行を変更して initramfs にプロセッサを追加します。
nano $root/etc/mkinitcpio.conf
HOOKS="base udev net_nfs4"
アップデート+(20171210)
解決しようとしています別の問題/usr/lib/initcpio/hooks/net_nfs4
定義された関数で次の行が見つかりましたnfs_mount_handler
。
mount.nfs4 ${nfs_option:+-o ${nfs_option}} "${nfs_server}:${nfs_path}" "$1"
によるとman mount.nfs4
:
SYNOPSIS
mount.nfs remotetarget dir [-rvVwfnsh ] [-o options]
DESCRIPTION
...
remotetarget is a server share usually in the form of servername:/path/to/share. dir is the directory on which the file system is to be mounted.
...
だから、行を次のように変更しました。
mount.nfs4 "${nfs_server}:${nfs_path}" "$1" ${nfs_option:+-o ${nfs_option}}