NFS 루트 대신 tmpfs 루트를 사용하여 디스크 없는 노드를 부팅할 수 있도록 사용자 정의 initrd를 구축 중입니다(initrd의 스크립트는 루트 장치의 내용을 tmpfs 파일 시스템에 복사한 다음 값을 변경합니다 NEWROOT
). 내 테스트 환경에서는 모든 것이 괜찮아 보입니다. 사용자 정의 initrd를 생성하고 시작했습니다. /never는 tmpfs로 마운트되지 않았지만 NFS 루트에서 제공하는 모든 파일이 있습니다. 훌륭한 기능입니다.
그런 다음 실제 환경으로 이동하기 시작했고 initrd가 시작되었을 때 NFS 루트(이 시점에서는 여전히 일반적인 NFS 부팅이었습니다)를 마운트하려고 시도하는 동안 질식하고 불평했습니다 mount.nfs4: No such device
.
다음 명령을 사용하여 initrd를 생성합니다.
dracut -v -m "nfs network base" --include rd.live.overlay/ / initrd-tmpfs.img
로드 중임을 확인했습니다 initrd-tmpfs.img
(로드된 initrd를 나열하는 PXE 부팅의 초기 부분을 기반으로 함).
initrd가 실패하면 비상 쉘로 들어가 몇 가지 흥미로운 작업을 수행합니다.
ip addr show
DHCP의 IP가 나열되고 NFS 서버에 ping을 보낼 수 있습니다.
echo $netroot
NFS 시작 매개변수 나열nfs4:[Server IP]:[root location]:[nfs options]
mount -t nfs4 [Server IP]:[root location] /sysroot
결과: ( mount.nfs4: No such device
매우 친숙함)
modprobe nfs
결과: modprobe:FATAL: Module nfs not found
분명히 문제가 있습니다
grep nfs /usr/lib/dracut/modules.txt
일치합니다
grep nfs /usr/lib/modules/[kernel version]/modules.order
여러 번 일치한다고 언급되었지만 kernel/fs/nfs.ko | kernel/fs/nfsv3.ko | kernel/fs/nfsv4.ko
이들 중 어느 것도 존재하지 않습니다.
환경: RHEL 7
내 질문에 대한 답변이 이미 작성을 마친 후에 답변이 있는 것 같습니다. 답변을 게시하겠습니다.
답변1
마지막 디버깅 단계에서 힌트를 얻었으므로 다른 사람들을 위해 답변을 게시해야겠다고 생각했습니다. grep nfs /usr/lib/modules/[kernel version]/modules.order
일치 kernel/fs/nfs.ko | kernel/fs/nfsv3.ko | kernel/fs/nfsv4.ko
하지만 존재하지 않습니다.
커널 드라이버를 잘 *.ko
나타내며 initrd
옵션이 있습니다 --add-drivers
.
dracut -v -m "nfs network base" --include rd.live.overlay/ / initrd-tmpfs.img
이 되다:
dracut -v -m "nfs network base" --add-drivers "nfs nfsv4" \
--include rd.live.overlay/ / initrd-tmpfs.img
그런 다음 lsinitrd | grep nfs
list nfs.ko
, 루트 장치가 자체적으로 설치되고, 복사되고, 행복한 날이 되십시오. HA 디스크 없는 클러스터에 적합한 nfsv4.ko
tmpfs 디렉토리와 함께 NFS를 통해 부팅되는 디스크 없는 서버를 갖습니다 ./
내 테스트 환경과 대상 간의 드라이버 차이점은 포함할 드라이버를 지정할 수 있는 /etc/dracut.conf
결과일 수 있지만 /etc/dracut.conf.d/
너무 많이 조사하지는 않았습니다(명령을 실행할 때 드라이버를 지정하는 것이 좋습니다. 내 정신).