PXE、NFS启动Linux的试验
1.试验目的
熟悉Linux下通过PXE、NFS启动的原理
2.试验环境
浪潮NF420服务器2台,配置如下:Linux操作系统为EL-3.0,
2块网卡(只有1块有网线),内核版本号linux- 2.4.21 -15
使用的软件包:tftp-hpa-0.40.tar.gz(证明linux9自带的可以用),内核linux- 2.4.28
3.试验原理
请查阅PXE,NFS原理
4.试验过程
1).安装DHCP服务器dhcpd, 配置/etc/dhcpd.conf文件
dhcp服务器IP为10.151.11.168
PXE启动的客户端mac地址为00:02:B3:55:84:D2
PXE启动的客户端IP为10.151.11.176
配置如下(红色标识为关键修改部分):
####################################
deny unknown-clients;
option subnet-mask 255.255.0.0;
option broadcast-address 10.151.255.255;
option domain-name "langchao";
option routers 10.151.11.168;
ddns-update-style none;
subnet 10.151.0.0 netmask 255.255.0.0 {
group{
host node{
hardware ethernet 00:02:B3:55:84:D2;
fixed-address 10.151.11.176;
filename "pxelinux.0";
}
}
}
####################################
2).配置tftp server
该实验中,使用pxelinux作引导工具需要支持TSIZE参数的tftp server,故先找到默认的tftp rpm包,然后删去tftp的rpm包
(查找到当前的tftp的rpm包 :rpm–q tftp)
(删除当前的tftp的rpm包 :rpm–e tftp)
tar xzvf tftp-hpa-0.40.tar.gz
cd tftp-hpa-0.40后,执行make install
至此,Tftp server 安装完毕.
通过xinetd来使用tftp服务,我的/etc/xinetd.conf文件如下
####################################
service tftp
{
socket_type = dgram
proctocol = udp
wait = yes
user = root
server =/usr/sbin/in.tftpd
}
####################################
配置完毕后,使用service xinetd start 启动tftp服务。
3).配置客户端启动文件
在服务器上建立目录 /tftpboot , 将/usr/bin/syslinux/pxelinux.0(如没有syslinux,则需要先安装)拷贝到/tftpboot/, pxelinux.0为启动文件,同时在/tftpboot下新建一个pxelinux.cfg目录,客户端启动时会在此目录下找与其IP相应的配置文件,该文件的名称规则为IP地址的16进制的输出(比如客户端通过dhcp得到的IP为10:151:11:176,则启动配置文件名为 0A 970BB0),文件格式为
########################
DEFAULT linux
PROMPT 0
LABEL linux
KERNEL vmlinuz
append ip=dhcp root=/dev/node nfsroot=10.151.11.168:/remote/node
vga=normal
##########################
4).配置NFS
建立目录/remote/node,作为该客户启动的文件系统,在tftpboot/pxelinux.cfg的配置文件 0A 970BB0里指定了从这个nfs export的/remote/node目录启动。
该目录里应把标准的目录都建好,包括usr,root,bin等
下面是建立该目录的脚本
#######################
cd /remote/node
echo -n "Copy directory bin ..."
cp -a /bin .
echo " OK"
echo -n "Copy directory dev ..."
cp -a /dev .
echo " OK"
echo -n "Make a node nd0 ..."
mknod dev/node b 43 0
chmod 600 dev/node
echo " OK"
echo -n "Copy directory etc ..."
cp -a /etc .
echo " OK"
echo -n "create directory home ..."
mkdir home
echo " OK"
echo -n "Copy directory lib ..."
cp -a /lib .
echo " OK"
echo -n "clean modules of directory lib ..."
rm -rf lib/modules
echo " OK"
echo -n "create directory root ..."
mkdir root
echo " OK"
echo -n "copy directory sbin ..."
cp -a /sbin .
echo " OK"
#echo -n "link directory usr ..."
#ln -s /usr usr
#echo "OK"
echo -n "create directory var ..."
mkdir var
cd var
echo "Entering directory var "
echo -n "copy lib"
cp -a /var/lib .
echo -n " cache"
cp -a /var/cache .
echo -n " log"
cp -a /var/log .
echo -n " tmp"
cp -a /var/tmp .
echo -n " spool"
cp -a /var/spool .
echo -n " yp"
cp -a /var/yp .
cd ../
echo -n "leaving directory var"
echo " OK"
echo -n "create directory proc usr tmp ..."
mkdir proc usr tmp
echo " OK"
echo -n "change attribute of tmp ..."
chmod 777 tmp
echo " OK"
echo -n "create file fastboot and add +i attribute ... "
touch fastboot
chattr +i fastboot
echo " OK"
#######################
编辑/etc/exports文件:使服务器提供该nfs的文件系统目录
#######################
/remote/node *(rw,async,no_root_squash)
#######################
编辑/remote/node/etc/fstab
#######################
none /proc proc defaults,intr 0 1
10.151.11.168:/remote/node / nfs rw 0 0
#10.151.11.168:/remote/root /root nfs rw 0 1
#10.151.11.168:/remote/home /home nfs rw 0 1
#10.151.11.168:/bin /bin nfs rw 0 1
10.151.11.168:/usr /usr nfs rw 0 0
#10.151.11.168:/lib /lib nfs rw 0 1
#10.151.11.168:/sbin /sbin nfs rw 0 1
#10.151.11.168:/etc /etc nfs rw 0 1
#######################
使用service nfs start启动nfs
5) 编译内核
#######################
make menuconfig
make dep
make bzImage
#######################
客户端通过NFS启动的内核,应该支持
Kernel Level Auto Configuration的DHCP协议,
NFS,NFS ROOT
客户端网卡驱动
将编译好的内核/usr/src/arch/i386/boot下的bzImage拷贝到/tftpboot/目录下,改名vmlinuz
6) 启动服务器的dhcp、nfs、tftp服务
Service dhcpd start
Service nfs start
Service xinetd start
7) 启动客户端
将客户端设置为从网卡启动
5.试验总结
试验过程中,出现了如下问题:
1. 有时候客户端启动时发现得到的IP并不是该服务器配置的IP,导致无法找到启动启动配置文件(根据IP规则得到的文件)
分析:由于该网段内还存在其他的dhcp服务器,所以出现此类问题
解决:用双绞线将两台机子对连,或者断开外部的网络,使局域网内只有server作为dhcp的服务器
2 客户端通过pxe启动后,会有少部分文件提示找不到,并不影响继续启动的执行
分析:服务器提供的NFS并不是干净的linux操作系统
解决:并不影响启动的执行,可以忽略
3 客户端通过pxe启动后,发现已经mount上了NFS,但启动过程中配置网卡时出现错误,提示“Network is unreachable”
分析:可能是由于网卡没有驱动(但实际不是这个原因)
解决:修改/remote/node/etc/sysconfig/network-scripts/ifcfg-eth0
和/remote/node/etc/sysconfig/network-scripts/ifcfg-eth1,将其中的ONBOOT选项设置为NO,本人理解为启动时不需要配置网卡,因为网卡在pxe过程中已经被使用,如果在使用的时候,就会提示该错误。