PXE系列之四:PXE无盘LINUX工作站

PXE系列之四:PXE无盘LINUX工作站

 

(一)概念:

 

无盘引导,本机无硬盘,从pxe服务器上把一个小小的内核通过tftp传到客户端,运行于其内存中,这种应用

往往还需要一个存在于某个文件服务器上的文件系统(可以与pxe服务器相同),对于客户端来说,尽管这

个文件系统是远程的,但用起来跟自己本地文件系统一样。

 

    无盘引导需要:

      服务器端(所有的服务集中在一台主机上,IP172.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里面的内容全删除,不然容易出错

你可能感兴趣的:(PXE无盘工作站)