通用线程: 高级文件系统实现者指南,第 6 部分

http://tech.ddvip.com   2008年04月15日    社区交流

内容摘要:Daniel Robbins 通过向您演示如何在 Linux 2.4 下来安装这些高级文件系统回答这些问题。在这一安装过程中,Daniel 向您演示了如何使用一个初始化封装器来(最终!)将您的系统转换到“devfs mode”。

  正如您所看到的一样,由于在脚本的开始有 #!/bin/bash 语句,所以初始化封装器是一个真正的 bash 脚本。这里正好向您指出初始化封装器运行 需要 bash 2.0 或更高版本;输入 /bin/bash --version 命令来看一下 bash shell 版本是否足够新 。如果不是,可能想知道是否安装了 /bin/bash2 可执行文件。如果安装了,请将脚本的第 1 行改为 #!/bin/bash2 。

  现在,让我们来阅读脚本。 trap 命令防止用户在脚本执行时中断(例如,在引导时键入 control-C)脚本。然后, export 一个合理的缺省路径并且设置缺省 umask 为 022。由于在 2.4 之前发布的一些内核中有一个会产生 umask 缺省为 0 的错误,这一错误可能会造成安全威胁,因此在引导阶段尽可能早的设置一个缺省的 umask 总不失为一个好主意。

  接下来,碰到了第一个条件语句, if [ $$ -ne 1 ] 。 bash 将 $$ 扩展为当前正在运行的进程标识,因此可以发现我们真正想问的问题是“我们的进程标识根本不是 1 吗?”这样做有什么意义呢?如果是在引导期间,则 bash 是由内核启动的,由于 PID 1 是为 init 进程保留的,所以将总会得到 PID 为 1。如果 PID 不是 1,则知道在系统已经引导之后,正在从命令行方式运行。由于 /sbin/init 命令有双重用途,允许超级用户改变已经引导的系统的运行级别,因此这很正常。如果是这样的话,那么仅仅 exec 了原来的 /sbin/init (现在 改名为 /sbin/init.system ) 。通过使用 $* 变量来传递任何命令行参数给 init.system ,初始化封装器终止,并且 init.system 开始执行。

  内核引导选项

  然而,如果在引导期间 正在由内核启动封装器,则 bash 的 PID 将为 1 ,当 bash 继续执行封装器时,将跳过该条件语句。就这么提一下,以下是接下来的几行:

来源:ibm    作者:Daniel Robbins    责编:豆豆技术应用

正在加载评论...