배경: 마스터 노드와 여러 컴퓨팅 노드로 구성된 Slurm 클러스터를 구축하고 있으며 모두 PXE를 통해 부팅됩니다. 처음에는 호스트 이름이 없으며 다른 하드웨어에서 실행될 수 있으므로 NIC의 이름을 예측할 수 없으므로 구성되지 않습니다 /etc/network/interfaces
.
시작하는 동안 호스트 이름을 다음과 같이 설정했습니다.
root@zorn:/lib/systemd/system# cat /lib/systemd/system/sethostname.service
[Unit]
Wants=network-pre.target
Before=network-pre.target
After=local-fs.target
DefaultDependencies=false
[Service]
Type=oneshot
ExecStart=/usr/bin/sethostname
RemainAfterExit=yes
[Install]
WantedBy=network.target
/usr/bin/sethostname을 사용하십시오:
root@zorn:/lib/systemd/system# cat /usr/bin/sethostname
#!/usr/bin/bash
hnm=node$(/usr/bin/cat /sys/class/net/*/address | /usr/bin/head -1 | /usr/bin/sed 's/://g')
echo $hnm > /proc/sys/kernel/hostname
echo $hnm > /etc/hostname
루트 파일 시스템은 /etc/hostname
로컬 디스크의 파일에 대한 심볼릭 링크와 마찬가지로 NFS를 통해 마운트된 R/O입니다.
지금까지는 디스크 없는 노드를 시작할 때 호스트 이름이 다음과 같이 설정되었습니다 node6c2408faee43
.
root@node080027aea419:~# hostnamectl
Static hostname: node080027aea419
Icon name: computer-vm
Chassis: vm
답변1
기본적으로 @AB는 이미 댓글에서 이 질문에 답변했지만 "해결됨"으로 표시할 수 있도록 답변으로 추가하겠습니다.
실제로 문제는 시스템이 부팅될 때 커널이 NFS를 통해 루트 디렉터리를 읽기 전용으로 마운트하고 커널이 아래 표시된 것처럼 DHCP 서버에서 IP 주소를 요청한다는 사실에서 비롯됩니다( grub.cfg
).
menuentry 'Debian 12' {
set background_color=black
linux /debian12/boot/vmlinuz-6.1.0-9-amd64 console=tty0 console=ttyS0 ip=dhcp root=/dev/nfs ro nfsroot=192.168.50.111:/image/debian12,vers=3,nolock panic=60 ipv6.disable=1 rootwait
initrd /debian12/boot/initrd.img-6.1.0-9-amd64
}
커널 명령줄 에서 ip=dhcp
네트워크가 부팅 전에 설정되었음을 의미하므로 systemd
호스트 이름 설정이 DHCP 및 DDNS에 등록되지 않습니다.
이제 시스템이 DDNS 서버에 호스트 이름을 등록하려면 그 주변 어딘가에 활성화된 인터페이스가 있어야 network.target
하지만 이는 디스크가 없는 서버이기 때문에 정확히 어떤 네트워크 카드가 있는지 알 수 있는 방법이 없으므로 인터페이스는 그렇지 않습니다. 아직 설정되지 않았습니다 /etc/network/interfaces
. 이 문제를 해결하는 한 가지 방법은 다음과 같습니다.
root@zorn:/etc/network# cat /etc/network/interfaces
auto /enp*=eth
iface eth inet dhcp
이는 NIC의 이름이 ATM 으로 시작한다고 가정합니다 enp
. 이는 ATM과 공통되는 것으로 보이며 간단한 테스트 시스템에서 작동합니다. 우리는 여러 장치가 있을 때 작동하고 물리적으로 연결된 장치만 구성하기를 원합니다.