NFS-Root Mini-Howto 作者: Andreas Kostyrka, [1]andreas@ag.or.at 译者: Jing-Jong SHYUE, [2]shyue@sonoma.com.tw V8, 8 August 1997 _________________________________________________________________ 这份 Mini HOWTO 将试著解释如何设定一个 "无磁碟" 的 Linux 工作站. 且这个 工作站的根目录档案系统是以 NFS 的方式挂载. 这份文件的最新版可以 在ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO/mini/NFS-Root 或任一个靠近 你的 sunsite 映射站台找到. _________________________________________________________________ 1. 版权声明(此段不译) * 1.1 相关支援 2. 一般概论 3. 伺服器的设定 * 3.1 编译核心 * 3.2 建立根目录档案系统 4. 启动工作站 * 4.1 使用开机唯读记忆体 * 4.2 使用原始的核心磁片 * 4.3 使用 bootloader 与 RARP * 4.4 使用 bootloader 但不使用 RARP 5. 已知的问题 * 5.1 /sbin/init 无法启动. * 5.2 /dev 的问题. 6. 其他主题 _________________________________________________________________ 1. 版权声明(此段不译) (c) 1996 Andreas Kostyrka (e9207884@student.tuwien.ac.at or andreas@ag.or.at) Unless otherwise stated, Linux HOWTO documents are copyrighted by their respective authors. Linux HOWTO documents may be reproduced and distributed in whole or in part, in any medium physical or electronic, as long as this copyright notice is retained on all copies. Commercial redistribution is allowed and encouraged; however, the author would like to be notified of any such distributions. All translations, derivative works, or aggregate works incorporating any Linux HOWTO documents must be covered under this copyright notice. That is, you may not produce a derivative work from a HOWTO and impose additional restrictions on its distribution. Exceptions to these rules may be granted under certain conditions; please contact the Linux HOWTO coordinator at the address given below. In short, we wish to promote dissemination of this information through as many channels as possible. However, we do wish to retain copyright on the HOWTO documents, and would like to be notified of any plans to redistribute the HOWTOs. If you have questions, please contact Andreas Kostyrka , the author of this mini-HOWTO, or Tim Bynum, the Linux HOWTO coordinator, at via email. 1.1 相关支援 * Avery Pennarun (如何启动 Linux 而不使用 LILO) * Ofer Maor (提供一个较好的 "建立无磁碟工作站" HOWTO.) * Christian Leutloff (提供网路启动的 资讯.) 2. 一般概论 一般来说, 对这样的工作站会有下列的问题: * 系统必须知道他专用的 IP 位置, 并且视需要而重设 Ethernet 的组态. * 系统必须知道 NFS 伺服器的位置, 与根目录的挂载路径. 目前核心 (1.3.7x) 对於 NFSROOT 的实作提供了下面的解决方案: * IP 位置可以利用 RARP 取得; 完整的 Ethernet 组态则可以用 LILO 或 LOADLIN 的参数传递给核心. * 要被挂载的 NFS 路径可以利用核心的参数来传递. 如果没有在此指定, 核心 会假设 RAPR 伺服器同时也是 NFS 伺服器, 并且用核心编译时的预设路径. (目前的预设路径是 /tftpboot/< 机器的 IP 位置>. * 客户端的组态也可以利用 BOOTP 取得. 在开始设定无磁碟环境之前, 你必须决定是否要使用 LILO 或 LOADLIN 来启动系 统. 用这种方式的好处是较有弹性, 缺点则是速度较慢. 不使用 LILO 来开机的 速度会较快. 你必须自行决定. 3. 伺服器的设定 3.1 编译核心 把 RARP 支援编译到核心中是个好方法. 如果在你不想在启动时传递额外的参数 给核心, 你必须将他编译到核心中. 但如果客户端不在同一个子网路区段中, 这 个方式便没有作用. 工作站的核心则必须至少有下列的支援: * NFS 档案系统支援. (不需要把 ext2 档案系统的支援编译到核心中, 以模组 方式编译就够了.) * 启动 "Root on NFS" 的功能. * 网路卡的 Ethernet 驱动程式必须被编译在核心中. * 依据你的需求而将 NFS 根目录系统下面的 RARP 或 BOOTP 编译到核心中. (也就是当 make config 执行时, 在 NFS 选项之後的设定.) 如果在你不想在工作站开机时传递参数给核心, 你必须把根目录设备设定成 0:255. 做法是用 mknod /dev/nfsroot b 0 255 建立一个装置控制档. 有了这个 档案後, 你便可以把核心内的根目录路径以 rdev /dev/nfsroot 指定. 3.2 建立根目录档案系统 复制档案系统 警告: 这些指令可能可以正常作用, 但并不表示可以在其他环境下作用. 对於建 立根目录档案系统的较佳方式请参考 Ofer Maor 所写的 NFS-Root-Client mini howto. 决定了根目录的放置路径後, 可以用下面的指令建立 mkdir -p <路径>, 接著执 行 tar cClf / - | tar xpCf <路径> -. 如果你不用 LILO 启动核心, 根目录路径必须置於 /tftpboot/. 如果 你不喜欢这个位置, 你可以修改核心原始码中最顶层的 Makefile, 找到类似下面 这行并加以修改 NFS_ROOT = -DNFS_ROOT="\"/tftpboot/%s\"" 如果你改了这个, 你必须重新编译核心. 根目录系统所需的改变 首先清除不需要的档案, 并且检查 /etc/rc.d 的指令稿. 下面是一些重点: * 首先是 eth0 的设定. 工作站启动时最少要启动 eth0, 让工作站使用伺服器 的 IP 位置可不是一个好主意. (作者早期便犯过这个错误) * 另一个重点是 /etc/fstab 的设定. 他应该设成 nfs 档案系统. * 警告: 不要把伺服器的根目录系统与客户端工作站的根目录系统弄混了. (我 曾经改了伺服器上的 rc.inet1, 并怀疑为何工作站仍然不能运作) 将档案系统分享出去 要将根目录系统分享给工作站的指令请参照 exports(5). 在改变设定档後, 你必 须重新起动 nfsd 与 mountd. 在 RedHat 下, 你只要执行 /etc/rc.d/init.d/nfs stop ; /etc/rc.d/init.d/nfs start 就可以了. 设定 RARP 在网路上必须有一个 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 要设定 BOOTP, 你必须编辑 /etc/bootptab. 请参阅 bootpd(8) 以及 bootptab(5) 说明页. 找寻硬体位置 如果我不知道网路卡的硬体位置, 我该如何查询? * 利用你所制作的核心磁片开机, 并且找寻网路卡被确认的部分. 通常都会有 6 组 16 进位的位元组, 这应该就是网路卡的硬体位置. * 用其他支援 TCP/IP 的作业系统启动工作站. 然後从伺服器 ping 这个工作 站, 接著利用下面的指令查询伺服器上的 ARP 快取. /sbin/arp -a 4. 启动工作站 4.1 使用开机唯读记忆体 由於我没有用过这个恶劣的方法, 我只能提供你下面的方向 (Christian Leutloff 提供): * 你不能使用 "一般的" 开机唯读记忆体. * Gero Kuhlmann 提供一个 netboot 套件, 制作给 Linux 用的开机唯读记忆 体与相关资讯. 你可以在你当地的 Linux 映射站台找到 netboot 套件; 或 是从 Debian 套件中取得 (netboot-0.4). * 仔细阅读你的开机唯读记忆体所附的手册. * 你可能必须启动伺服器上的 tftpd, 但这依据你的开机唯读记忆体载入核心 的方式而定. * 找寻你所使用的开机唯读记忆体公司提供的 Linux 修补, 但大多数的人没有 可程式化唯读记忆体烧录机:( (特别是我住的欧洲)欢迎找我, 我这边有烧录器. 4.2 使用原始的核心磁片 如果你的根目录档案系统已经用预设的名称正确的分享出去, 而且你的 NFS 伺服 器同时也是 RARP 伺服器 (这些机器也都在同一个子网路区段中), 你可以直接把 核心复制到磁片上, 并以那片磁片开机. (你必须在核心中把根目录设备设成 0:255) 这个方法假设你的根目录档案系统存放於伺服器的 /tftpboot/IP 位置 路径之下. (这个路径可以经由修改编译核心时的设定而改变.) 4.3 使用 bootloader 与 RARP 在开机时给核心所有必要的参数, 并且增加 nfsroot=<伺服器 IP 位置>:<挂载路 径> 这组参数. 其中 伺服器 IP 位置 是 NFS 伺服器的 IP 位置, 而 挂载路径 是根目录档案系统存放的路径. 技巧: * 当使用 LILO 时, 考虑使用 "锁定" 功能: 只要在第一次输入完整的参数, 并加上 "lock" 这个参数, 下一次开机时让 LILO 逾时. * 要制作工作站的专用开机磁片时, 你可以在 lilo.cong 中使用 append= 功 能. 4.4 使用 bootloader 但不使用 RARP 另一种使用 nfsroot 的方法是给核心下面的参数: nfsaddrs=:::: 核心将会依据所 给的参数来设定 eth0. wst-IP 工作站的 IP 位置 srv-IP NFS 伺服器的 IP 位置 gw-IP 闸道器的 IP 位置 netmask 子网路遮罩 hostname 工作站的名称 5. 已知的问题 5.1 /sbin/init 无法启动. 一个常见的问题是 /sbin/init 在某些套件中是动态连结的, 所以你必须提供一 个正确的 /lib 给客户端工作站. 一个简单的方法是把 /sbin/init 换成静态连 结的 "Hello World" 程式, 如此便可以确认问题是否来自动态连结. 5.2 /dev 的问题. 如果你开机时收到一堆关於 tty 的错误讯息, 你必须在客户端工作站的 /dev 路 径下执行 "MAKEDEV" 程式. 有些谣言说这个方法不能用在 64 位元的伺服器上. 如果你遇到了, 请告诉我你的伺服器作业系统版本. 一个可能的解决方式是在系 统启动初期建立一个小型的 /dev 记忆体磁碟, 并且重新设定装置的节点位置. 6. 其他主题 * 在 ftp://sunsite.unc.edu/system/Network/admin/bootpc.v045.tgz 有 BOOTP 的客户端程式. 这个程式包含了在 Linux 2.0 中的 initrd 程式, 他可以很好的应用在无磁 碟工作站上. 对於更特定的设定, initrd 是个很好的选择. * 在 Linux 2.0 中包含了 BOOTP 的选项而不是 RARP, 所以可能不需要另外的 bootpd. * 在核心原始档的说明文件中, 有一个关於 NFS 根目录系统的文件. * 曾经有人寄给我一个修补程式, 让你可以经由 NFS 来设定置换区, 可是我弄 丢了 :( 你可能可以在 http://www.linuxhq.com/ 的非官方修补区中找到这个修补 档. * andreas@ag.or.at 的 PGP 公开金钥指纹是: F1 F7 43 D5 07 C4 6C 87 BF 6B 33 A2 2C EE 5A F9. References 1. mailto:andreas@ag.or.at 2. mailto:shyue@sonoma.com.tw