PXE系列之四:PXE无盘LINUX工作站
(一)概念:
无盘引导,本机无硬盘,从pxe服务器上把一个小小的内核通过tftp传到客户端,运行于其内存中,这种应用
往往还需要一个存在于某个文件服务器上的文件系统(可以与pxe服务器相同),对于客户端来说,尽管这
个文件系统是远程的,但用起来跟自己本地文件系统一样。
无盘引导需要:
服务器端(所有的服务集中在一台主机上,IP为172.16.2.96):
a) tftp服务器,dhcp服务器
b) 一个能被引导的内核,这个内核需要make menuconfig进行必要的配置, 详见:《PXE系列之二:内核 编译与配置》文件
c) 一个制作好的根文件系统,详见:《PXE系列这三:制作根文件系统》文件
d) 一个NFS服务器,用于存放客户端的根文件系统
客户端需要:
网卡支持pxe,现在的网卡基本上都支持
(二)过程,所有的过程均在服务器端完成:
主要流程:
1. 搭建pxe环境,包括一个dhcp服务器,一个tftp服务器,一个pxelinux.0文件和一个pxelinux.cfg目录等等。详见上一篇《PXE系列之一:PXE环境搭建》。
2. 编译新的内核,并放到tftp根目录下。编译过程详见《PXE系列之二:内核编译与配置》。现在,我们得到一个符合PXE引导的内核bzImage。
Ø 首先,把新内核bzImage放到合适的位置,我放的路径是
/tftpboot/pxelinux/minilinux/bzimage
Ø 接着,修改/tftpboot/pxelinux/pxelinux.cfp/default,我的文件内容如下:
default bzimage append root=/dev/rootfs rootfs=172.16.2.96:/home/centos_rootfs vga=normal prompt 0
其中,prompt 0 表示直接加载defalut 中所指定的内核,append 中指定根文系统所在的nfs服务
器位置(详见4.架设NFS服务),动态ip等内容.
3. 制作根文件系统(详见《PXE系列这三:制作根文件系统》),最终我们会得到一个能为新内核通过NFS挂载的根文件系统,本例中它位于/home/centos_rootfs下面,目录结构如下:
/home/centos_rootfs/bin /home/centos_rootfs/etc /home/centos_rootfs/home /home/centos_rootfs/lib /home/centos_rootfs/var /home/centos_rootfs/tmp /home/centos_rootfs/dev /home/centos_rootfs/root /home/centos_rootfs/usr /home/centos_rootfs/sbin /home/centos_rootfs/lib64 /home/centos_rootfs/proc
4. 架设NFS服务,本例中NFS服务与dhcp,tftp等服务一起集中在一台服务器上。这里假设你已开启了
NFS服务(一般的系统都支持NFS,否则关于如何安装及开启nfs,可在网上搜索)。
Ø 现在修改/etc/exports文件,将/home/centos_rootfs共享出去,本例中该文件有如下二
行(事实上,多台无盘站肯定要有自己的私有目录,那么 每多一台,下面就要多一行):
/home/centos_rootfs *(rw,sync,no_root_squash) #/home/centos_rootfs_2 *(rw,sync,no_root_squash) #/home/centos_rootfs_3 *(rw,sync,no_root_squash) #.... /home/usr *(ro,sync,no_root_squash) #
说明:(带#的为注释)
#第一行表示,允许任何IP访问挂载该目录,并对该目录有读写权限。
#第二行是因为/usr下面内容基本是不变的,所以单独拉出来,设置为所有无盘站共
享,ro表示为只读共享模式
#事实上,除/usr外,/lib /lib64 /bin /sbin这四个目录也同样可以设置为所有无盘
站共享,但太麻烦了,就没有设置
Ø 把第3步中得到的文件系统中的/usr目录移出来,放到你指定的一们位置(我这里
是/home下),在其原来的位置新建一个空的usr目录,修改/home/centos_rootfs/etc/fstab
的内容,有如下三行:
172.16.2.96:/home/centos_rootfs / nfs defaults 0 1 172.16.2.96:/home/usr /usr nfs defaults 0 0 devpts /dev/pts devpts defaults 0 0
前两行的意义很明显,第三行如果没了的话,很容易出问题
注意,上面修改的两个fstab是不一样的。
(三)无盘引导:
到这里,所有工作已经完成,开始引导。
确保dhcp,tftp,nfs等服务都已启动(用service dhcpd status命令检查),然后启动无盘工作站,其
控制台最初显示找到dhcp服务,然后通过tftp传输所需文件,最后加载内核,加载根文件系统
(四)优化:
http://www.net130.com/CMS/Pub/special/special_dhcp/special_dhcp_linux/2006_08_02_45678.htm上面说,可以把除了/usr之外,这四个目录:/bin, /lib, /lib64, /sbin也拉出来设为全局共享。我相信作者成功地做过,不过我试过,失败了,因为启动时要用到这几个目录下面的东西,不知为何它们设为nfs挂载就失败了,有待进一步研究。
(四)问题:
1. 常见的tftp-server问题
2. dhcpd.conf中的filename参数,用的是相对路径(相对于/tftpboot),有的tftp软件用的是绝对路径,注意阅读其文档
3. 如果同样的配置在相同系统的机子上出错,很可能是scp过程中出错
常见的引导过程错误:
a) Looking up port of RPC 100003/2 on 172.16.2.96 Root-NFS: unable to get nfsd port number from server, using default
Looking up port of RPC 100005/1 on 172.16.2.96
Root-NFS: Unable to get mountd prot number from server,using default
Root-NFS: Server returned error -5 while mounting /home/centos_rootfs
VFS: Unable to mount root fs via NFS, trying floppy.
b) 这种情况一般是nfs没有配置好,可以察看nfs服务器的/var/log/messages文件.
c) " kernel panic :NO init found Try passing init=option to kernel "这说明根文件系统已经加载成功,但根文件系统的启动出现问题,可尝试修改/etc/fstab(可以参照现有系统的fstab文件)
d) 由于主机IP改变,导致nfs服务不能正常启动,卡死在
"Starting nfs quotas: "这一步骤上,,重启机子即可
e) 引导过程一直在试着,打开/proc下面各种以阿拉伯数字命名的文件,并出现死循环时,就把/proc下所有文件删除
4. 如果无盘站共用一个根文件系统(共用所有目录),那么会出现很多莫名其妙的错误。 解决办法是:关闭所有无盘站,重启NFS服务。但这不是一劳永逸的,所以大家还是不要共享所有目录的好。
5. 注意无盘所用根文件系统根目录下/etc/fstab文件的内容(在本例是/home/centos_rootfs/etc/fstab文件)里面一定要把根文件系统挂载上。
6. 根文件系统目录下的/proc里面的内容全删除,不然容易出错