
AFAIU,當tftp
伺服器用於pxe
啟動時,客戶端會向伺服器傳送請求,伺服器傳回一些檔案(initrd,kernel,config,...)。伺服器可以根據客戶端的IP位址決定要傳送哪些檔案給客戶端。客戶端不知道這些文件的 URL。
我的問題是這樣的:
我想測試tftp
伺服器。我想運行一個命令或一個(簡單)腳本來聯繫伺服器tftp
,接收文件,並將這些文件保存在磁碟上。
換句話說,我想做的是:
在伺服器端,沒有區別:伺服器認為客戶端想要透過 PXE 啟動並將檔案傳送到客戶端
在客戶端:客戶端其實並不想要啟動。它只是想將文件複製(保存)到磁碟。
做到這一點最簡單的方法是什麼?
答案1
@Patrick 對您的問題所做的評論是完全正確的:客戶端電腦引導 PXE 所需的全部內容就是廣播 DHCP 請求。 DHCP 伺服器(通常在 PXE 啟動伺服器上)將查看用戶端裝置的 MAC 位址,並使用它來
- 給客戶端一個IP位址
- 告訴客戶端應該從 PXE 伺服器取得哪些文件
此時,客戶端知道伺服器的位址以及可以從中取得什麼。不幸的是,有很多繁瑣的地方,例如只能有一個 DHCP 伺服器,它具有 PXE 用戶端的特殊配置,需要運行 TFTP 伺服器等等。
有一個非常好的逐步指南:https://wiki.debian.org/PXEBootInstall。您沒有指定您的發行版,但大多數 PXE 系統至少會與該指南一致。
我知道您的問題是您不想知道 PXE 伺服器的位址。但只有一種方法(無需編寫自己的客戶端)可以完成,即使用 PXE 用戶端 DHCP 請求器/處理器。如果你想放棄這一部分,你就會放棄很多引導你所需的能力。
我知道您實際上並不想啟動機器,這會讓您為了測試目的而實施大量 PXE 協定。如果您沒有可用的臨時機器,我很好奇為什麼您需要測試 PXE。
答案2
答案3
我最熟悉的是如何皮匠設定 TFTP,所以我不確定這是否相關,但無論如何我都會提供此資訊。 Cobbler 使用pxelinux.0
as設定引導程式@Patrick 在評論中解釋也@msw。但它還設定了一個相應的pxelinux.cfg/
目錄,其中包含將連接到伺服器的每個系統的 MAC 位址。
這些文件包含pxelinux.cfg
以下文件資訊:
$ more 01-54-52-00-ff-ff-ff
default linux
prompt 0
timeout 1
label linux
kernel /images/Centos56-x86_64/vmlinuz
ipappend 2
append initrd=/images/Centos56-x86_64/initrd.img ksdevice=bootif lang= console=ttyS0,115200 text serial kssendmac ks=http://192.168.1.207/cblr/svc/op/ks/system/kvmcobblertest
該虛擬機器將啟動的實際 Linux 核心包含在該 TFTP 可存取目錄 中/images/Centos56-x86_64/vmlinuz
。從伺服器背面看整個TFTP目錄結構是這樣的:
$ ls -l /tftpboot/
total 348
drwxr-xr-x 2 root root 4096 Jun 22 2011 etc
drwxr-xr-x 2 root root 4096 Jul 9 2012 grub
drwxr-xr-x 6 root root 4096 Jul 9 2012 images
drwxr-xr-x 2 root root 4096 Jun 30 2011 images2
-rw-r--r-- 1 root root 20020 Jul 9 2012 memdisk
-rw-r--r-- 1 root root 39188 Jul 9 2012 menu.c32
drwxr-xr-x 2 root root 4096 Jun 22 2011 ppc
-rw-r--r-- 1 root root 14716 Jul 9 2012 pxelinux.0
drwxr-xr-x 2 root root 4096 Jul 9 2012 pxelinux.cfg
drwxr-xr-x 2 root root 4096 Jul 9 2012 s390x
-rw-r--r-- 1 root root 198192 Jul 9 2012 yaboot
正如其他人所描述的那樣,針對此 TFTP 伺服器啟動的伺服器最初可以存取的唯一內容是pxelinux.0
與特定伺服器的 MAC 位址相對應的設定檔。
圖片目錄
如果你好奇的話,它看起來像這樣:
$ tree /tftpboot/images
/tftpboot/images
|-- Centos56-x86_64
| |-- initrd.img
| `-- vmlinuz
|-- Centos56-xen-x86_64
| |-- initrd.img
| `-- vmlinuz
`-- Centos60-x86_64
|-- initrd.img
`-- vmlinuz
3 directories, 6 files