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

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


发布日期: 1970-01-01 更新日期: 2015-01-30 编辑:giser 浏览次数: 7299

标签:

摘要: (一)概念: 无盘引导,本机无硬盘,从pxe服务器上把一个小小的内核通过tftp传到客户端,运行于其内存中,这种应用往往还需要一个存在于某个文件服务器上的文件系统(可以与pxe服务器相同),对于客户端来说,尽管这 个文件系统是远程的,但用起来跟自己本地文件系统...

(一)概念:

无盘引导,本机无硬盘,从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,我的文件内容如下:

view plaincopy to clipboardprint? 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下面,目录结构如下:

view plaincopy to clipboardprint? /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共享出去,本例中该文件有如下二行(事实上,多台无盘站肯定要有自己的私有目录,那么 每多一台,下面就要多一行):说明:(带#的为注释)

view plaincopy to clipboardprint?/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 的内容,有如下三行:

view plaincopy to clipboardprint? 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里面的内容全删除,不然容易出错

关注公众号
获取免费资源

随机推荐


Copyright © Since 2014. 开源地理空间基金会中文分会 吉ICP备05002032号

Powered by TorCMS

OSGeo 中国中心 邮件列表

问题讨论 : 要订阅或者退订列表,请点击 订阅

发言 : 请写信给: osgeo-china@lists.osgeo.org