存档

文章标签 ‘PXE NFS rootfs’

通过PXE实现NFS Root

2013年1月4日 没有评论

前不久做了一个小测试,在一块支持PXE启动的主板上实现了网络NFS启动。主要目的是用来批量测试主板:之前测试主板都要加上DOM卡或者硬盘,频繁的插拔会导致DOM卡或硬盘的损坏,采用网络启动会减少这种硬件损耗。以下为主要的步骤。

1. 将主板接上一块SATA硬盘,连接USB光驱,安装Linux操作系统(以Cent OS为例)。注意安装时要选择开发包。

2. 安装完成后进入Cent OS系统,下载源码(例如linux-2.6.32.tar.gz)包然后解压,在解压生成的目录里,配置.config文件(可以使用make menuconfig或直接vim .config),将以下几项设置为y。

CONFIG_IP_PNP=y
CONFIG_IP_PNP_DHCP=y
CONFIG_IP_PNP_BOOTP=y
CONFIG_IP_PNP_RARP=y

CONFIG_ROOT_NFS=y

CONFIG_E1000=y
CONFIG_E1000E=y

注意,我测试使用的是Intel千兆网卡,所以上面的配置文件中选定的是Intel千兆网卡的驱动。如果主板使用的其它网卡,就选用对应的驱动。这里很重要,如果没有选择正确的网卡驱动而且没有设置Build-in方式,那么后面启动的时候就会碰到无法找到根目录的情况(我在这里曾经折腾了好长时间,排除防火墙/selinux等原因后发现失败是因为网卡驱动没有正确加载)。

然后编译内核:

# make bzImage
# make modules
# make modules_install
# make install

编译完成后,重启系统,选择从新内核启动。

3. 接下来生成根文件系统。在从新内核启动的系统中,新建一个/rootfs目录,然后将/etc、/bin、/sbin、/usr、/lib、/lib64、/dev和/var目录拷贝到/rootfs目录中,

# cd /
# mkdir -p rootfs
# chmod -R 777 rootfs
# cp -arf /etc /rootfs
# cp -arf /bin /rootfs
# cp -arf /sbin /rootfs
# cp -arf /usr /rootfs
# cp -arf /lib /rootfs
# cp -arf /lib64 /rootfs
# cp -arf /dev /rootfs
# cp -arf /var /rootfs
# cd /rootfs
# mkdir -p proc
# rm -rf dev/console
# rm -rf dev/null
# cd dev
# sudo mknod –m 600 console c 5 1
# sudo mknod –m 666 null c 1 3

4. 准备一台服务器(测试时服务器的IP为172.16.30.253)。在服务器上安装dhcp, tftp和syslinux

# yum install xinetd tftp-server tftp 
# yum install dhcpd
# yum install syslinux

5. 配置服务器。首先配置dhcp,

# vim /etc/dhcpd/config

allow bootp;
allow booting;

ddns-update-style interim;

next-server 172.16.30.253;
filename "/pxelinux.0";

subnet 172.16.30.0 netmask 255.255.255.0 {

        option routers 172.16.30.253;
        option subnet-mask              255.255.255.0;
        option domain-name-servers      172.16.30.253;
        option time-offset              -18000; # Eastern Standard Time
        range dynamic-bootp 172.16.30.128 172.16.30.254;
        default-lease-time 21600;
        max-lease-time 43200;

}

配置服务器的tftp:

# cp /usr/lib/syslinux/pxelinux.0 /tftpboot/
# cd /tftpboot
# mkdir -p pxelinux.cfg
# cd pxelinux.cfg
# vim default

prompt 0
default linux

label linux
kernel vmlinuz
append init=/sbin/init root=/dev/nfs rw nfsroot=172.16.30.253:/mnt/c ip=dhcp

注意,为了测试方便,以上设定可用single方式来启动。

配置服务器的nfs:

# mkdir -p /mnt/c
# chmod -R 777 /mnt/c
# vim /etc/exports

/mnt/c  *(rw,no_all_squash,no_root_squash)

启动各项服务:

# service dhcpd start
# service nfs start
# service xinetd start

6. 在主板新内核环境中,将第3步中准备好的rootfs复制到服务器的nfs目录下

# mkdir -p /mnt/rootfs
# mount 172.16.30.253:/mnt/c /mnt/rootfs
# cd /rootfs
# cp -rf * /mnt/rootfs
# sync

7. 将连接到主板的硬盘拆下,然后检查BIOS中是否已经打开PXE。重启系统,即可以从网络启动。

我写的比较简单。实际过程中,我还参考了这个链接

分类: 科技 标签: