일부 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
올바른 방법을 아는 사람이 있으면 답변을 게시해 주세요. 하지만 이 해결 방법은 일시적으로라도 효과가 있는 것 같습니다.