Next Previous Contents

2. 绕回设备与内存磁盘的原理

首先我将介绍用在将绕回文档系统设成根目录系统所需要的基本知识.

2.1 绕回设备

绕回设备 是 Linux 中的一种虚拟设备, 用法类似于其他储存媒体设备.

例如 /dev/hda1, /dev/hda2, /dev/sda1 或其他磁盘, 例如软盘机 /dev/fd0 等等, 都属于储存设备. 这些设备都可以用来储存文档或是目录结构. 也都可以依据使用需求而被格式化成各种不同的文档系统(例如 ext2fs, msdos, ntfs 等), 并且被挂载于目录树中.

绕回文档系统依存于一个储存在别的文档系统中的文档, 并将这个文档当作是一个周边设备来操作. 这个虚拟的设备如同前面所列的真实设备一样, 可以被格式化或挂载于目录树中. 绕回文档系统的设备档通常是 /dev/loop0 或是 /dev/loop1 等等, 这些设备再被指向所依存的文档, 如此这个文档便能被视为虚拟设备而被挂载.

2.2 内存磁盘设备

在 Linux 中还有一种可以被当成文档系统操作的虚拟设备, 也就是内存磁盘设备.

在这个状况中, 这个设备仅指向部分的实体内存, 并不参考其他硬件设备. 这些内存绝不会被置换到硬盘中, 但会留存于磁盘快取中.

内存磁盘可以在任意时间经由写入内存磁盘设备档 /dev/ram0/dev/ram1 等等, 而被产生. 内存磁盘同样可以被格式化或挂载于目录树中, 就像绕回设备一样.

内存磁盘通常被用于由软盘启动系统的时机, 例如 Linux 的安装磁盘或是救援磁盘. 开机所需要的程序通常被存在一个磁盘映像档中, 而这个映像档通常被压缩后存在软盘中. 系统核心将可以认知这个文档, 并且在开机程序中被解开后放置于内存磁盘中, 再被挂载成开机所需的文档系统.

2.3 起始内存磁盘

在我们能将绕回设备当成根目录系统之前, 起始内存磁盘是一个非常重要的机制.

因为内存磁盘需要复制一个文档系统的映像档到内存中, 所以这个映像档必须是可以被存取的. 当内存磁盘的工作完成要正式将真实的根目录系统挂载之前, 在这个内存磁盘中的 /linuxrc 会被执行. 而如果 /dev/initrd 存在且可用的话, 内存磁盘则会被挂载在 /initrd之下.

对于一个正常的开机程序而言, 这是一个相当特殊的特性, 因为起始内存磁盘仍继续执行. 而且在主要开机程序开始之前, 可以经由起始内存磁盘的参数来变更根目录磁盘.

2.4 根目录文档系统

根目录磁盘是第一个被挂载的装置, 所以在开机后会成为根目录 "/".

由于根目录包含了所有的文档, 所以会有一些复杂. 在开机过程中 rc 命令稿会被执行, 这些命令稿可能是 /etc/rc.d/etc/rc?.d, 端视 /etc/init 程序的设计.

在系统启动后, 根目录文档系统是不可能被卸载的, 因为所有的程序必须使用相同的信息. 这也就是为什么起始内存磁盘是如此的重要, 因为只有这时的根目录系统是不同的.

2.5 Linux 开机程序

为了了解在开机过程中起始内存磁盘的动作, 下列是开机的过程.

  1. 核心被载入内存, 通常是由 LILOLOADLIN 完成的. 你可以看到 Loading... 信息, 表示正在载入核心.
  2. 起始内存磁盘被载入, 通常也是由 LILOLOADLIN 完成的. 你会再次的看到 Loading... 信息, 表示正在载入初始内存磁盘.
  3. 核心被初始化, 所有给核心的参数都会被设定; 同时初始内存磁盘被挂载为根目录.
  4. 执行在初始内存磁盘上的 /linuxrc 程序.
  5. 核心参数所指定的文档系统被挂载为根目录.
  6. 执行 /etc/init 以完成使用者所设定的开机程序.

这只是一个简化的说明, 但足够解释核心的启动与初始内存磁盘的用途.


Next Previous Contents