디스크 없는 설정을 시도 중입니다.노드/워크스테이션/체계, 사용자 가이드에 제공된 지침디스크 없는 시스템~을 위한아키텍처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를 직접 부팅하지 않고 대신 커널 명령줄을 재해석하고 원하는 위치에서 부팅하는 초기 램디스크를 설치합니다. – 피터 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 위키의 지침에 따르면디스크 없는 시스템
클라이언트 설치의 경우
서버의 하위 디렉터리에 완전한 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 위키에서 여러분에게 친숙한 내용입니다.
# 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}}