Boot Linux Through PXE

2018/07/02

Tags: linux pxe

测试 porteus 的时候,每次都是做好 iso 之后写到一个 u 盘,然后用 u 盘启动看看效果,发现有点蛋疼,这浪费时间不说,我的 u 盘寿命估计也得少一截。就研究了一下 pxe 启动,这样每次改完之后通过 pxe 直接读取我改了之后的 iso 引导 linux 就好了。

我这看 pxe 启动主要需要做两个事情,一个是 dhcp 的时候广播 tftp 的信息,一个是通过 nfs 共享给那个系统需要读取的文件。nfs 共享也可以改用 http 等其他服务。

dnsmasq

广播 tftp 的信息,可以通过 dnsmasq 来做。dhcp 部分就不贴了,只贴 tftp 相关的。

1
2
3
tftp-root=/srv/pxe/boot
dhcp-boot=/pxelinux.0
enable-tftp

网卡启动的时候会获取 /pxelinux.0 然后获取 /pxelinux.cfg/default (这个实际上有一个判断顺序,方便给不同的机器不同的配置)。然后根据这里面的配置,获取内核信息。然后加载内核。

nfs

加载内核之后还需要系统文件,这个时候貌似有几个选择,比如通过 http 发送。我这用的是 nfs。想要通过 nfs 发送,内核得能支持 nfs mount。各 linux 的做法貌似不太一样。

配置 nfs 的目录,在 /etc/exports 里面加入类似这样的信息。

1
2
/srv/pxe/porteus *(ro,fsid=0,no_subtree_check)
/srv/pxe/storage *(rw,fsid=1,no_root_squash,no_subtree_check)

然后 exportfs -rv ,这样 nfs 设置好了。

我这 export 的目录和上面 tftp-root 的目录不一样,有的发行版可能会按照 tftp-root 的设置来读取,这个还得区分发行版看。

其他

上面的例子只是写了一个大高,是实际使用相差很大。比如如何得到 pxelinux.0 ,如何让内核支持 nfs,以及在内核启动的时候加载 nfs 并使用 nfs 的数据启动,这些都和发行版有关系,还需要单看。

参考

Comments