去機房安裝硬盤,拆開機器,發現SCSI線不夠長,只能接一個硬盤。看來只能用新硬盤替換下老硬盤,可是去的時候沒有帶任何光盤,無法給新硬盤安裝操作系統,同事說可以回去用PXE,遠程安裝系統。以前對PXE也有一些了解,不過沒有實踐過。在網上查了如下資料:
基本原理
1) 什麼是PXE
PXE(Pre-boot Execution Environment)是由Intel設計的協議,它可以使計算機通過網絡啟動。協議分為client和server兩端,PXE client在網卡的ROM中,當計算機引導時,BIOS把PXE client調入內存執行,並顯示出命令菜單,經用戶選擇後,PXE client將放置在遠端的操作系統通過網絡下載到本地運行。
PXE協議的成功運行需要解決以下兩個問題:
既然是通過網絡傳輸,那麼計算機在啟動時,它的IP地址由誰來配置;
通過什麼協議下載Linux內核和根文件系統
對於第一個問題,可以通過DHCP Server解決,由DHCP server來給PXE client分配一個IP地址,DHCP Server是用來給DHCP Client動態分配IP地址的協議,不過由於這裡是給PXE Client分配IP地址,所以在配置DHCP Server時,需要增加相應的PXE特有配置。
至於第二個問題,在PXE client所在的ROM中,已經存在了TFTP Client。PXE Client使用TFTP Client,通過TFTP協議到TFTP Server上下載所需的文件。
這樣,PXE協議運行的條件就具備了,下面我們就來看看PXE協議的工作過程。
2) 工作過程
在上圖中,PXE client是需要安裝Linux的計算機,TFTP Server和DHCP Server運行在另外一台Linux Server上。Bootstrap文件、配置文件、Linux內核以及Linux根文件系統都放置在Linux Server上TFTP服務器的根目錄下。
PXE client在工作過程中,需要三個二進制文件:bootstrap、Linux 內核和Linux根文件系統。Bootstrap文件是可執行程序,它向用戶提供簡單的控制界面,並根據用戶的選擇,下載合適的Linux內核以及Linux根文件系統。
具體配置過程如下:
首先是安裝必要的服務,DHCPD,TFTP-SERVER,NFS(一般默認就有了)
dhcpd和tftp-server都有對應的rpm,直接安裝就可以了。
# vi /etc/xinetd.d/tftp
=============+==========+===========+============+============
service tftp
{
disable = no (默認是yes,這裡改成no,啟用它)
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -u nobody -s /tftpboot //-s 表示用/tftpboot作為tftp目錄的根目錄。
per_source = 11
cps = 100 2
flags = IPv4
}
tftp是由xinted來啟動的,修改完後要記得service xinetd restart
# vi /etc/dhcpd.conf
=============+==========+===========+============+============
ddns-update-style interim;
ignore client-updates;
default-lease-time 21600;
max-lease-time 43200;
authourtative;
next-server 192.168.1.103;
subnet 192.168.1.0 netmask 255.255.255.0 {
option routers 192.168.1.1;
option subnet-mask 255.255.255.0;
range 192.168.1.1 192.168.1.100;
default-lease-time 21600;
max-lease-time 43200;
filename “/pxelinux.0”;
option domain-name-servers 202.106.0.20;
}
這裡的 pxelinux.0就是上面提到的bootstrap,上面已經指定了tftp的根目錄,所以這裡用相對路徑。
next-server 192.168.1.103;這句一開始我並沒有加上,當要安裝系統的機器啟動以後,在查找pxelinux.cfg目錄下的配置文件的時候,就死活找不到了。經過很長時間的等待,出現一個boot:的提示符,告訴我:can‘t load kernel image:linux,一開始以為是/tftpboot/pxelinux.cfg/default的配置文件有誤,檢查後沒問題。
google了半天,總算查到了一個帖子,說可能是dhcp3.0的一個bug,需要加上這個參數來指定DHCP SERVER的IP.修改配置文件加入此句後,重啟dhcp,然後再重新啟動客戶機,這次速度大大加快,順利通過。
3 配置支持PXE
# mkdir /tftpboot
# cp /usr/lib/syslinux/pxelinux.0 /tftpboot
把LINUX第一張安裝光盤上/image/pxeboot/initrd.img和vmlinuz 以及isolinux/*.msg考到/tftpboot目錄下(*.msg也可以不拷,重點是initrd.img和vmlinuz,沒有內核是無法引導的)
# cd /tftpboot
# mkdir pxelinux.cfg
# vi defaultdefault centos5
prompt 1
timeout 30
label centos5
kernel vmlinuz
append ks=nfs:192.168.1.103:/root/inst/ks initrd=initrd.img devfs=nomount ramdisk_size=9216
#append initrd=initrd.img devfs=nomount ramdisk_size=9216
這裡的ks=nfs:192.168.1.103:/root/inst/ks 文件是指定kickstart配置文件,可以在安裝中不用人工干預,自動按預設的參數安裝。實現安裝過程的全自動。
4 配置NFS服務
# vi /etc/exports
/root/inst 192.168.1.0/24(ro,sync) //這裡是/root/inst 而不是/root/inst/
# mkdir /home/iso
拷貝安裝LINUX的ISO文件到這個目錄
5 需要開啟的系統服務
/dhcpd/network/nfs/portmap/syslog/tftp/xinetd/
service dhcpd start
service portmap start
service nfs start
最後附上ks文件的內容。
install
nfs --server=192.168.1.103 --dir=/root/inst
lang en_US.UTF-8
keyboard us
network --device eth0 --bootproto static --ip 192.168.1.220 --netmask 255.255.255.0 --gateway 192.168.1.1 --nameserver 192.168.1.1
#network --device eth0 --bootproto DHCP
rootpw --iscrypted $1$WvFbqnpm$m94fa4AopXI/kfYOYbWMW.
firewall --enabled --port=22:tcp
#firewall --disabled
authconfig --enableshadow --enablemd5
selinux --disabled
timezone --utc Asia/Shanghai
bootloader --location=mbr --driveorder=sda --append=“rhgb quiet”
clearpart --all
zerombr yes
clearpart --linux --initlabel
part /boot --fstype ext2 --size=256
part / --fstype ext3 --size=8192
part /opt --fstype ext3 --size=8192
part /usr --fstype ext3 --size=16384
part swap --size=4096
part /home --fstype ext3 --size=1 --grow
reboot //加入這行後裝完系統後可以自動重啟,需要注意的是機器的啟動順序不能是網卡優先,否則會循環裝系統。..。..。.
%packages --resolvedeps
@ everything
grub
kernel
kernel-devel
e2fsprogs