📄 remote-boot-3.html
字号:
(参考 lilo 文件),并重新启动您的电脑 (由硬碟启动). 如有任何错误, 修正它们并再试一次.
执行 <CODE>depmod -a</CODE> 计算 modules dependencies. 当完全无误时, 执行 <CODE>make bpImage</CODE> 产生一个
bootimage 给 TCP/IP Bootprom 使用.
<P>
<H3>把 Root 档案系统移到 NFS</H3>
<P>您的伺服器要有足够的空间来保存您的整个 Linux 档案系统 (几百 Megabytes). 建立一个新
的目录给 NFS 输出, 就叫 <CODE>rootfs</CODE>, 并在其中建立另一个新目录就叫 <CODE>runtime</CODE>. 我们使用
<CODE>/export/linux/rootfs/runtime</CODE>. 把它输出成只有您的 Linux 客户端可读可写, 并具有 root 的存取权 (
<CODE>annon=0</CODE>). 例如, 我们的 NFS 是在 Solaris 下执行, 我们用以下这个指令:
<P>
<P><CODE>share -F nfs -o rw=pc7971,anon=0 /export/linux/rootfs/runtime</CODE>.
<P>在您的 Linux 客户端挂上这个分割区并用GNU <CODE>tar</CODE> 把整个 Linux 档案系统复制过去 (预设是
RedHat Linux). 很重要的是当您使用 GNU <CODE>tar</CODE> 指令,因为所有的 <CODE>tar</CODE> 指令可能无法正确地处理
block device 的 special nodes . 然後编辑档案 /export/linux/rootfs/runtime/etc/fstab 并变更根目录的
设定,使根目录符合以 nfs mount 取代自己的硬碟机. 你还要移去 (或者 至少要变更名称)
<CODE>/export/linux/rootfs/runtime/etc/sysconfig/network-scripts/ifcfg-eth0</CODE>
因为网路装置将由 NFS-root 初始化但不能被初始化两次.
<P>现在在您的 <CODE>/etc/lilo.conf</CODE> 复制一行 linux, 例如:以 <CODE>linux-nfs</CODE> 为名, 并加入以下的参数:
<P>
<P><CODE>append="root=/dev/nfs nfsroot=/export/linux/rootfs/runtime nfsaddrs=</CODE><EM>您的-ip:伺服器的-ip:闸道器的-ip:网路遮
罩:机器名称</EM><CODE>"</CODE>
<P>(<EM>您的-ip</EM> 是您的 Linux 客户端的 IP 位址,是以十进位有点的方法表示, <EM>伺服器的-ip</EM> 是 NFS
伺服器的 IP 位址, <EM>闸道器的-ip</EM>
是 Linux 客户端的预设闸道器, <EM>网路遮罩</EM> 是 Linux 客户端的
网路遮罩 而 <EM>机器名称</EM> 是Linux 客户端的主机名称). 再执行一遍 lilo , 重新启动您的电脑
(仍然是由硬碟机), 并选择 <CODE>linux-nfs</CODE> 开机设定. 您的电脑将如先前一般启动, 即使有一点慢.
如果在这里有某些东西不能正常工作, 您只要重新开机用您原来 local的 <CODE>linux</CODE> 开机设定并试
著修正它. 大部份的状况是, 您的 NFS root 设定错误. 如果有任何东西您不了解, 看一下
<CODE>/usr/src/linux/Documentation</CODE> 这些档案... 您或许可以看看
<A HREF="http://www.ag.or.at/~andreas/NFS-Root-Mini-Howto.html">NFS-Root-Mini-Howto</A>.
<P>您可以再试一次,这次只用 <CODE>append="root=/dev/nfs"</CODE>
以确定 Linux kernel 可以透过 DHCP/BOOTP要求而获得您所设定的 IP 参数. 如果
要这样做, 您必须在您的 DHCP 设定档中加入以下
这些选项 (当然是要设定您自己的网路组态), 加上您的机器的硬体及 IP 位址:
<BLOCKQUOTE><CODE>
<HR>
<PRE>
option subnet-mask 255.255.252.0;
option routers 129.194.68.1;
option root-path "/export/linux/rootfs";
</PRE>
<HR>
</CODE></BLOCKQUOTE>
如果您的 Linux kernel 须要再加入其它指令参数, 您可以用 <CODE>option option-177</CODE> 来加入.
<P>下一步要使我们的系统在 唯读的 NFS 档案系统下可以工作.
<P>
<H3>产生唯读的 NFS Root 档案系统</H3>
<P>既然我们要我们的 root 档案系统在大部份的 Linux 客户端以唯读的方式挂上, 那就要使档
案系统有些微的不同, 因此我们将需要写入权限的地方以 ramdisk 或 filecache 取代. 我们把
这个档案系统建立在 <CODE>/export/linux/rootfs</CODE> 目录下, 而标准的版本则直接放到 <CODE>/runtime/</CODE> 下. 登入您
的 NFS 伺服器并在 <CODE>/export/linux/rootfs</CODE>目录下,建立以下的目录跟连结:
<P>
<UL>
<LI>bin -> cache/bin</LI>
<LI>dev -> ramdisk/dev</LI>
<LI>etc -> ramdisk/etc</LI>
<LI>lib -> cache/lib</LI>
<LI>root -> ramdisk/root</LI>
<LI>sbin -> cache/sbin</LI>
<LI>tmp -> ramdisk/tmp</LI>
<LI>usr -> cache/usr</LI>
<LI>var -> ramdisk/var</LI>
<LI>cache/
<UL>
<LI>bin -> /runtime/bin</LI>
<LI>lib -> /runtime/lib</LI>
<LI>sbin -> /runtime/sbin</LI>
<LI>usr -> /runtime/usr</LI>
</UL>
</LI>
<LI>mnt/
<UL>
<LI>cdrom/</LI>
<LI>floppy/</LI>
<LI>tmp/</LI>
</UL>
</LI>
<LI>proc/</LI>
<LI>ramdisk/
<UL>
<LI>dev -> /runtime/dev</LI>
<LI>etc -> /runtime/etc</LI>
<LI>root -> /runtime/root</LI>
<LI>tmp -> /runtime/tmp</LI>
<LI>var -> /runtime/var</LI>
</UL>
</LI>
</UL>
就如您所见的, 它看起来像正常的 root filesystem, 除了少部份几个是重新指到 <CODE>/ramdisk</CODE>, 有
些则重新指到 <CODE>cache</CODE> 目录. 当用唯读的 NFS filesystem 开机, 我们将挂上一个已初始化过的
ramdisk 放在 <CODE>/ramdisk</CODE> 下. 同样□ 自己硬碟的分割区将被挂在 <CODE>/cache</CODE> 给 NFS 快取使用. 粗略的
说,这个档案快取的原理是当the principle of the filecache is that whenever a symbolic link from the
cache subdirectory is followed, it is replaced by its target. 如果目标自己是一个子目录, 则每一个
子目录会转换成一个符号连结并连结到外部档案系统的原始位置. 注意档案快取使用绝
对符号连结是必须的, 即使它们在 NFS 伺服器上是无意义的. 如果您不喜欢这样, 可以在
您的 NFS 伺服器上,建立一个符号连结由 <CODE>/runtime</CODE> 到 <CODE>/export/linux/rootfs/runtime</CODE> .
<P>在唯读的客户端加入一些设定的东西是必须的, 如此才可以挂上 ramdisk, 及设定档案快取
和侦测硬体以变更设定档. 这些都由三个程序档和一个组态档来完成, 您可以把它复制到
您的NFS 伺服器:
<P>
<UL>
<LI><CODE>
<A HREF="soft/linux/etc/rc.ramdisk">runtime/etc/rc.d/rc.ramdisk</A></CODE>,
可以快速设定并挂上 ramdisk:
<BLOCKQUOTE><CODE>
<HR>
<PRE>
#!/bin/sh
#
# 设定一个 ramdisk 因为 root 透过 NFS 以唯读方式挂上
#
modprobe rd
gzip -c -d /runtime/lib/ramdisk.gz | dd of=/dev/ram bs=1k > /dev/null 2>&1
mount -n -t ext2 /dev/ram /ramdisk
</PRE>
<HR>
</CODE></BLOCKQUOTE>
</LI>
<LI><CODE>
<A HREF="soft/linux/etc/rc.sysdetect">runtime/etc/rc.d/rc.sysdetect</A></CODE>,
这是所有的机器各自独立的设定档, 包括侦测及分配 区域硬碟机的分割区
给档案快取使用. 为了空间的理由我们不在此份文件可列印的版本中包含此档, 但您可以在超文
件的版本找到它; </LI>
<LI><CODE>
<A HREF="soft/linux/etc/filecache.init">runtime/etc/rc.d/init.d/filecache.init</A></CODE>
这是用来启动档案系统的:
<BLOCKQUOTE><CODE>
<HR>
<PRE>
#!/bin/sh
#
# filecache: 档案快取: 启动档案快取 (给 NFS root 用)
#
# 来源功能函数库.
. /etc/rc.d/init.d/functions
# 看看我们如何呼叫功能函数.
case "$1" in
start)
if [ -e /cache -a -r /etc/filecache.conf ]; then
echo -n "Starting NFS filecache: "
# 把 var 与 tmp 移到区域性的硬碟机
rm -rf /cache/var /cache/tmp
(cd /ramdisk; tar cf - var tmp) | (cd /cache; tar xf -)
(cd /ramdisk; rm -rf var tmp;ln -s /cache/var;ln -s /cache/tmp
)
chmod 777 /cache/tmp
# 启动档案快取
daemon filecache -d on
echo ""
touch /var/lock/subsys/filecache
fi
;;
stop)
filecache off
rm -f /var/lock/subsys/filecache
;;
*)
echo "*** Usage: filecache.init {start|stop}"
exit 1
esac
exit 0
</PRE>
<HR>
</CODE></BLOCKQUOTE>
</LI>
<LI><CODE>
<A HREF="soft/linux/etc/filecache.conf">runtime/etc/filecache.conf</A></CODE>,
档案快取的设定档
<BLOCKQUOTE><CODE>
<HR>
<PRE>
Max 100 MB 50 % #
Cache /runtime /cache
</PRE>
<HR>
</CODE></BLOCKQUOTE>
</LI>
</UL>
前两个档案应该放在前两个档案应该放在 <CODE>
<A HREF="soft/linux/etc/rc.sysinit">runtime/etc/rc.d/rc.sysinit</A></CODE>, 档案内最前面的位置, 如下所示:
<BLOCKQUOTE><CODE>
<HR>
<PRE>
# 设定所需的 ramdisk (给 root NFS 唯读的机器)
if [ -e /ramdisk -a -r /etc/rc.d/rc.ramdisk ]; then
/etc/rc.d/rc.ramdisk
fi
# 设定硬体各自独立的参数 (给每个 root NFS使用)
if [ -r /etc/rc.d/rc.sysdetect ]; then
/etc/rc.d/rc.sysdetect
fi
</PRE>
<HR>
</CODE></BLOCKQUOTE>
而第三个应该
be bound as usual to the System V init directories: we use links
named <CODE>S35filecache</CODE> in the <CODE>rc3.d</CODE> and <CODE>rc5.d</CODE> directories,
and <CODE>K80filecache</CODE> in the <CODE>rc0.d</CODE>, <CODE>rc1.d</CODE>, <CODE>rc2.d</CODE> and
<CODE>rc6.d</CODE> directories.
<P>检查一下 <CODE>rc.sysdetect</CODE> 这个档案, 并使它与您的硬体设备配合. 特别要注意的是, 如果您跟我们一样没有
使用相同的显示卡及萤幕 (这很可能发生的 :-), 看看它们在 <CODE>/proc/pci</CODE>
的回应并依此修改叙述档. 在每台
机器所使用的存放位置下, 其 <CODE>rc.sysdetect</CODE> 之中有一段内容为, 可自订的设定档
(例如 <CODE>printcap</CODE>), a为了能每
台独立工作, 您需要於伺服器的 <CODE>dhcpd.conf</CODE> 档案中, 用特别的标记 <CODE>option-132</CODE> 设定每台机器所使用的位
置. 在您继续安装之前, 您至少要先建立基本的几个档案<CODE>
<A HREF="soft/linux/etc/fstab.ref">runtime/etc/fstab.ref</A></CODE> 和
<CODE>
<A HREF="soft/linux/etc/hosts.ref">runtime/etc/hosts.ref</A></CODE> ,
这些将由 <CODE>rc.sysdetect</CODE> 叙述档在启动时透过侦测设定来完成,
为了动态的设定 X servver, 使用
RedHat 软体套件, 有一件事您必须先变更的: 在 <CODE>/usr/X11R6/bin</CODE> 及 <CODE>/usr/X11R6/lib/X11</CODE> 目录下, 有一些相关的
连结设定档及目录应该改成绝对连结. 别忘了以後的 X server 更新安装也要如法泡制.
<P>把
<A HREF="soft/linux/bin/filecache">filecache</A> 安装在 <CODE>runtime/bin</CODE> 目录下, 并把它的使用说明
<A HREF="soft/linux/man/filecache.8">man page</A> 安装在 <CODE>runtime/usr/man/man8</CODE> 目录下. 把
<A HREF="soft/linux/bin/bootptag">bootptag</A> 或
<A HREF="soft/linux/bin/dhcptag">dhcptag</A> 安装
在 <CODE>runtime/usr/local/bin</CODE> 目录下, 并且
<A HREF="soft/linux/src/util/bootptag.c">bootptag.c</A>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -