把 RARP 支援编译到核心中是个好方法. 如果在你不想在启动时传递额外的参数给核心, 你必须将他编译到核心中. 但如果客户端不在同一个子网路区段中, 这个方式便没有作用.
工作站的核心则必须至少有下列的支援:
如果在你不想在工作站开机时传递参数给核心, 你必须把根目录设备设定成 0:255.
做法是用 mknod /dev/nfsroot b 0 255
建立一个装置控制档.
有了这个档案後, 你便可以把核心内的根目录路径以 rdev <kernel-image> /dev/nfsroot
指定.
警告: 这些指令可能可以正常作用, 但并不表示可以在其他环境下作用.
对於建立根目录档案系统的较佳方式请参考 Ofer Maor <ofer@hadar.co.il>
所写的 NFS-Root-Client mini howto.
决定了根目录的放置路径後, 可以用下面的指令建立
mkdir -p <路径>
, 接著执行
tar cClf / - | tar xpCf <路径> -
.
如果你不用 LILO 启动核心, 根目录路径必须置於
/tftpboot/<IP 位置>
.
如果你不喜欢这个位置, 你可以修改核心原始码中最顶层的 Makefile, 找到类似下面这行并加以修改
NFS_ROOT = -DNFS_ROOT="\"/tftpboot/%s\""
如果你改了这个, 你必须重新编译核心.
首先清除不需要的档案, 并且检查 /etc/rc.d 的指令稿. 下面是一些重点:
要将根目录系统分享给工作站的指令请参照 exports(5)
.
在改变设定档後, 你必须重新起动 nfsd 与 mountd.
在 RedHat 下, 你只要执行
/etc/rc.d/init.d/nfs stop ; /etc/rc.d/init.d/nfs start
就可以了.
在网路上必须有一个 RARP 伺服器. 如果启动时同时没有设定 nfsroot 参数, 则 RARP 伺服器必须设在 NFS 伺服器上. 通常都将 RARP 伺服器设在 NFS 伺服器上. 要完成这个设定, 你的核心必须要有 RARP 支援.
并且必须执行下面的指令 (通常放在 /etc/rc.d
里面):
/sbin/rarp -s <ip 位置> <硬体位置>
其中
是工作站的 IP 位置, 而
则是工作站网路卡的乙太网路位置.
例如: /sbin/rarp -s 131.131.90.200 00:00:c0:47:10:12
你也可以使用符号名称来取代 IP 位置, 但伺服器必须能找到该名称所对应的 IP 位置. (设定在 /etc/hosts 中, 或是经由 DNS 查询)
要设定 BOOTP, 你必须编辑 /etc/bootptab
.
请参阅 bootpd(8) 以及 bootptab(5) 说明页.
如果我不知道网路卡的硬体位置, 我该如何查询?
/sbin/arp -a