無盤啟動大家應該聽說過吧,現在許多網吧和企業都運用了這項技術,但那些無盤系統大都是windows的,今天我就來向大家介紹下Linux無盤啟動的方法。
無盤啟動意味著一台客戶端電腦在啟動操作系統時沒有任何的磁盤存儲介質。在這種情形之下,電腦能夠通過網絡從遠程NFS服務器上加載內核和根文件系統。在這過程中可能會用到多種不同的方法來從NFS服務器上加載內核和根文件系統:RARP,BOOTP或是DHCP協議。在這個指導教程中,我會使用BOOTP/DHCP協議,因為它們能夠被大多數的網卡所支持。
無盤計算機的優勢
想象一下你的辦公室內有30台電腦,每一台都需要使用相同的應用程序。如果你作為管理這些電腦的管理員,你會怎麼做?如果你在每一台電腦上安裝應用程序,那只是在浪費你的時間。另一方面來說,一套無盤系統就能解決你的問題。有了一套無盤系統,你只需在中央NFS服務器上安裝需要的程序,然後通過網絡啟動這30台客戶機即可。
需要什麼
兩台或更多的裝備有支持DHCP協議的網卡的Linux電腦。這些將扮演NFS服務器角色的電腦應當配有硬盤,其它客戶機不需要任何的硬盤。服務器和客戶機需要連接到同一個本地網絡之內。
設置一個無盤系統共需要五步。
安裝所需的包
配置TFTP服務器
配置DHCP服務器
配置NFS服務器
啟動無盤客戶機
在這個指導教程中,我假設作為啟動服務器的電腦運行的是 Ubuntu。如何你正在使用其它的Linux發行版,原理是一樣的。
第一步:安裝所需的包
像下面這樣使用 apt-get 命令來安裝所有需要的包。
$ sudo apt-get install dhcp3-server tftpd-hpa syslinux nfs-kernel-server initramfs-tools
第二步:配置TFTP服務器
TFTP服務器是一個小型FTP服務器,需要用它來在本地網絡中的客戶機和服務器之間自動傳輸啟動文件。
向/etc/default/tftpd-hpa中添加以下行:
RUN_DAEMON=”yes”
OPTIONS=”-l -s /var/lib/tftpboot/”
接著,創建一個啟動文件夾。
$ sudo mkdir -p /var/lib/tftpboot/pxelinux.cfg
復制引導程序鏡像。
$ sudo cp /usr/lib/syslinux/pxelinux.0 /var/lib/tftpboot
像下面這樣創建一個默認啟動配置文件。
$ sudo vi /tftpboot/pxelinux.cfg/default
LABEL Ubuntu
KERNEL vmlinuz
APPEND root=/dev/nfs initrd=initrd.img nfsroot=10.10.101.1:/nfsroot ip=dhcp rw
注意:
“root=/dev/nfs”表示服務器上的網絡文件系統(不需要修改)。
“initrd=initrd.img”是一個用於系統啟動的啟動腳本。
“nfsroot=10.10.101.1/nfsroot”指明了服務器的IP地址以及NFS共享文件夾的名稱。用你的服務器地址來替換掉IP地址。
“ip=dhcp”表示客戶端電腦使用DHCP尋址方案。
“rw”表示NFS共享是可讀/可寫的。
最後,重啟TFTPD服務。
sudo /etc/init.d/tftpd-hpa restart
第三步:配置DHCP服務
你還需要在NFS服務器上配置DHCP服務來允許使用/var/lib/tftpboot/pxelinux.0啟動。假設你在使用10.10.101.0作為子網,你的配置可能看起來像下面這樣子。
$ sudo vi /etc/dhcp3/dhcpd.conf
allow booting;
allow bootp;
subnet 10.10.101.0 netmask 255.255.255.0 {
range 10.10.101.2 10.10.101.254;
option broadcast-address 10.10.101.255;
option routers 10.10.101.1;
filename “/pxelinux.0″;
}
然後重啟DHCP服務。
$ sudo service isc-dhcp-server restart
第四步:配置NFS服務器
創建一個保存客戶機根文件系統目錄的文件夾。
$ sudo mkdir /nfsroot
接著,設置NFS服務器導出客戶機根文件系統。向/etc/exports添加以下行來實現。
/nfsroot *(rw,no_root_squash,async,insecure,no_subtree_check)
運行下列命令來重新載入修改過的/etc/exports。
$ sudo exportfs -rv
默認情況下,Ubuntu在initrd鏡像中不提供網絡啟動支持。因此你需要創建一個新的initrd.img文件。首先添加下列行到/etc/initramfs-tools/initramfs.conf中。
BOOT=nfs
MODULES=netboot
然後運行下列命令來創建一個新的initrd.img。
$ sudo mkinitramfs -o /var/lib/tftpboot/initrd.img
將新的內核鏡像文件復制到/var/lib/tftpboot中。
$ sudo cp /boot/vmlinuz-`uname -r` /var/lib/tfftpboot/vmlinuz
是時候將整個根文件系統拷貝到/nfsroot中了。
假設您使用的是一個全新的Ubuntu服務器安裝,你只需將文件系統拷貝到NFS的根之中。
$ sudo cp -ax / /nfsroot
然後通過文本編輯器打開/nfsroot/etc/fstab 並添加以下行。
/dev/nfs / nfs defaults 1 1
文件夾/var/lib/tftpboot應擁有全局讀寫權限。否則客戶機無法從網絡啟動。
$ sudo chmod -R 777 /var/lib/tfftpboot
最後,為了避免任何服務器設置出現錯誤,我推薦對運行DHCP服務的網卡使用靜態IP。舉個例子,如果網卡名為eth0,你的/etc/network/interfaces中的配置應該看起來像這樣:
iface eth0 inet static
address 10.10.101.1
netmask 255.255.255.0
broadcast 10.10.101.255
network 10.10.101.0
第五步:啟動無盤客戶機
在您完成了服務器上的配置之後,從網絡啟動你的客戶機。要從網絡啟動一般你只需修改BIOS設置中的啟動優先順序即可。
如果客戶機啟動成功,您的無盤環境就配置好了。無需做任何修改就可以任意添加一台或多台客戶端電腦。