![透過 pxelinux 網路啟動時 systemd-networkd 無法啟動](https://rvso.com/image/89134/%E9%80%8F%E9%81%8E%20pxelinux%20%E7%B6%B2%E8%B7%AF%E5%95%9F%E5%8B%95%E6%99%82%20systemd-networkd%20%E7%84%A1%E6%B3%95%E5%95%9F%E5%8B%95.png)
我建立了一個 systemd 連結檔案來為一堆網路引導的主機強制實施持久的網路介面命名。由於機器之間的 MAC 不同,我必須使用 PCI 路徑來匹配介面:
[Match]
Path=pci-0000:02:00.0-0
[Link]
Name=eth0
這適用於虛擬機器或實體機。但是,在網路啟動主機中,它失敗並顯示訊息:
Failed at step NAMESPACE spawning /usr/lib/systemd/system/systemd-networkd: Invalid Argument
我嘗試刪除連結檔案並重新啟動,但結果相同。所以它與我的連結檔案無關。
netboot主機是由Centos 7.2製作的。
之前,在 CentOS 6 中,我們在 中使用了持久性網路規則/etc/udev.rules
,但在 CentOS 7 下失敗了。
答案1
Systemd 有許多選項,您可以在服務的單元檔案中設置,以保護檔案系統中的特定目錄。這是使用檔案系統命名空間完成的。
PXE 引導的主機似乎不支援此功能,因此需要它的服務將無法啟動。
對於 systemd-networkd,可以透過停用所有需要命名空間的選項來解決此問題。
首先,建立服務文件的副本。中的檔案/etc/systemd
將覆蓋 中的預設值/usr/lib/systemd
:
cp /usr/lib/systemd/system/networkd-systemd.service /etc/systemd/systemd/
現在編輯/etc/systemd/system/systemd-networkd.service
,刪除命名空間保護:
ProtectSystem=no
ProtectHome=no
最後,重新啟動守護程式:
systemctl restart networkd-systemd
警告:這可能會暴露安全風險。