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