第 6 部分. 使用分区和文件系统
目录:
没有驱动器字母!
装载!
/etc/fstab 文件
添加文件系统
分区
文件系统类型
格式化分区
其他文件系统工具
完整的体系是分区的总和
在本部分,我们研究了 Linux 的分层目录结构,以及装载和设备。在 Linux 中文件和存储设备的使用与 Windows 中不同。虽然同样有文件和分层目录结构,但是除此以外您还需要建立一种不同的思维方式。
清单 1. 目录结构
没有驱动器字母!
在 Linux 中没有驱动器字母,这确实相当有用。如果您曾经在复杂的网络环境中使用过 Windows 系统,并且运行这个系统的机器带有若干个设备,那么您可能会发现字母表中的字母不够用。在 Linux 中,只有一个文件结构。它以 root (/) 开始,所有的本地文件系统,所有本地设备,以及所有的远程文件系统都表示为这个结构中的子目录。当 Linux 第一次引导时,它根据 /etc/fstab 文件中的信息构建这个文件结构。Windows 为硬盘驱动器分区和其他存储设备分配驱动器字母,而 Linux 在 root 文件结构中为它们分配目录。这个分层的结构是完全可配置的,并且可以动态地修改。
装载!
将一个设备添加到文件系统中,术语上称为 装载 。Linux 会自动装载一个 / (root) 文件系统。也可能会有一个单独的 /boot 文件系统,其中存放的是核心的内核引导文件。Linux 还将装载一些特殊的文件系统。交换分区并不表示为文件系统的一部分,但是内核会处理它。不过,其他特殊的文件系统,比如 proc,被看作是文件系统的常规部分,可以像普通文件一样对它进行处理。
(注意:什么是 /proc?/proc 文件系统是 Windows 思想与 Linux 思想不同之处的极好示例。 /proc 存储的是对正在运行的系统各个方面的虚拟描述。在那里有 IRQ 设置、内存使用、加载的设备驱动器、网络状态等很多信息。甚至有一个叫做 /proc/kcore 的文件,是所有用到的系统内存的虚拟描述。这里的每一个文件都可以像普通文件或二进制文件一样解析。可以编写某些文件来改变运行着的内核的行为,而不用重新引导。例如,为打开系统中启用的第一个以太网设备的 IP 转发,您可以使用一个文件命令:
这种系统的主要好处在于,您只需要使用简单的脚本技术,就可以对您的正在运行的系统进行深入而有效的操作。)
其他文件系统,比如可移动的媒体或者远程文件系统,需要手工装载。装载一个文件系统时,您需要知道在 Linux 中对它进行引用的正确方法,还需要有一个空目录作为装载点。对于可移动媒体,Linux 可能在安装时就为您创建了装载点。在 Red Hat Linux 中,cdrom 设备被设置装载到 /mnt/cdrom 目录。也就是说,当您将一张 CD 放入 CDROM 设备后,输入命令:
CD 就会被添加到文件系统中,CDROM 设备会被锁定以使它不会被意外弹出。只需要到 /mnt/cdrom 目录就可以访问 CD 中的内容。当不再使用 CD 时,您可以用下面的命令将它从文件系统中移除:
/mnt/cdrom 目录将变空,CDROM 设备的锁定被解除。您现在可以安全地弹出 CD。对其他可移动媒体也是如此,比如软盘驱动器 (/mnt/floppy)。运行不带参数的 mount 命令会显示出当前已装载的文件系统。
(注:为什么都需要加锁?不要忘记,Linux 不仅是多用户的,而且是多会话的。也就是说几个用户可以同时登录到系统中、运行程序、使用资源。这与 Windows 中的登录后使用共享文件不同。每一个用户都可以像自己坐在控制台前一样使用系统。为了保持稳定,Linux 不允许任意释放当前正在使用的文件系统,通过锁定 CD,在直到没有人再使用之前 CD 不会被弹出。)
/etc/fstab 文件
设备与其装载点之间的关联关系在 /etc/fstab 中配置。这个文件可以直接修改,也可以由管理工具来维护。下面是一个 /etc/fstab 示例:
理解 /etc/fstab
每一行表示一个要装载的文件系统。第一列指出的是要装载的设备。第二列是装载点,也就是设备在文件系统中的位置。第三列指出了文件系统的类型。第四列是处理文件系统的选项。最后一列是文件系统的标志位。第一个数字是 1 或者 0,指定系统是否应该用 dump(系统备份的一个选项)进行复制。第二个数字是 0、1 或者 2,指定了在引导时检查文件系统的次序。0 表示完全不检查。1 表示要最先检查, root (/) 文件系统需要指定为 1。其他文件系统应该是 2。
在上面列出的 fstab 文件中,root 文件系统位于第一个 IDE 硬盘驱动器的第五个分区中,这个分区是扩展分区的第一个逻辑驱动器。/boot 文件系统位于第一个 IDE 硬盘驱动器的第二个主分区中,其中存放的是内核启动文件。交换分区位于第一个 IDE 硬盘驱动器的第六个分区,也就是扩展分区的第二个逻辑驱动器。列表中的其他文件系统相应的设备是“none”。我们马上就要阐述这一问题。现在我们先来关注物理磁盘。
(注:什么都是文件在 Linux 中,文件系统由类似于文件的名称来表示。在 /dev 目录下的所有文件都是称为 nodes 的特殊文件,它们通过设备驱动程序链接到物理设备。这就使得您可以做一些有趣的事情。例如,为制作一张 CD 的 ISO 映像,您可以使用 cp (copy) 命令:
这样复制的是一个二进制映像而不是 CD 的文件结构。以文件为中心的方法还允许您可以为设备名称指定有意义的别名。例如,通常有一个叫做 /dev/cdrom 的别名,指向物理 CDROM 设备,而这个设备通常是 /dev/hdc。 一旦创建了别名,您就可以通过 /dev/cdrom 访问那个设备,这样更好记。别名技术还允许您标准化脚本,使这些脚本可以在物理配置不同的系统上使用。)
第四列中的选项将随文件系统类型而不同。在上面的例子中,/ 和 /boot 的装载选项为“default”。也就是说,它们使用异步 I/O 以可读写方式自动装载。只有 root 可以装载或者缷载设备,但是用户可以执行二进制文件和使用“sticky bit”(稍后介绍)。文件系统将被作为块字符设备来处理。然而,对 /mnt/cdrom 来说,选项就不同了。它不会被自动装载,并且将会作为只读文件系统装载。用户将可以在该文件系统中执行脚本和程序。
添加文件系统
在 /etc/fstab 文件中添加新的一行,您就可以将文件系统添加到 /etc/fstab。作为一个实际的例子,我有一个 RAID 设备,存储的是部门所用到的文件资源。这个设备中只有数据文件,并且保持与操作系统分离,这样在出现硬件故障时可以将它转移到另一个系统。RAID 已经配置好,在 Linux 中识别为 /dev/sdc,即第三个 SCSI 设备。在第一个分区上创建了带日志的 ext3 文件系统,这样我们通过 /dev/sdc1 就可以访问它。我希望在计算机引导时自动将这个 RAID 装载到文件系统中。我在 /etc/fstab 中添加了如下一行:
这样在引导时 RAID 就会像 / 和 /boot 系统一样被装载。现在我只要再创建一个目录作为指定的装载点:
一旦创建了这个空目录,我们可以将文件系统装载到它:
RAID 现在关联到了 /data。如果系统被重新引导,/data 将自动装载。
分区
在 Linux 中分区与 Windows 中本质上相同。控制台命令 fdisk 可以创建和管理分区。当您使用 fdisk 时,您必须指明它要操作哪个设备。可使用命令 fdisk -l 来查看可用设备。
清单 2. 使用 fdisk
上面的清单来自于一台膝上型电脑,所以它显示的结构与服务器有些不同。它显示了一个有若干个分区的 IDE 硬盘驱动器。如果有其他设备,同样也将会被列出。例如,第二个 IDE 硬盘驱动器可能会显示为 /dev/hdb。指定一个设备再次运行 fdisk,您会得到一个简短的提示。
清单 3. 对一个设备运行 fdisk
输入“m”可以查看命令菜单。您可以使用“p”来显示当前的分区表。您可以创建、删除和修改现有分区的类型。“l”将为您列出可用分区类型的完全列表。用“w”将您的修改写入到分区表并退出程序,或者使用“q”不保存修改而退出。一些修改会立即生效。有一些修改需要系统重新引导方能生效。Linux 下的分区规则与 Windows 中相同。您可以使用 4 个主分区,每个都可以成为扩展分区。
文件系统类型
Linux 可以处理内核所能识别的任何文件系统类型。相当多的类型是默认编译到内核中的,并且可以再添加新的文件系统。下面是一些重要的文件系统类型:
·ext2:标准 Linux 文件系统
·ext3:带日志的标准 Linux 文件系统
·vfat:Microsoft 的 Fat32 文件系统
·jfs:IBM 的日志文件系统
·reiserfs:另一个流行的日志文件系统
(注:日志节约时间,保全数据 日志文件系统有助于在非正常关闭时保护数据。如果一个卷没有缷载就被关闭,可能还遗留下未完成的工作,以及处于 in-between 状态的文件。在典型的文件系统中,需要对这个卷进行全面的检查,对较大的卷来说这需要比较长的时间。日志文件系统会对磁盘的每一个写操作的事务记录保持一段时间(比如 5 秒)。当这个卷没有被完全地缷载时,文件系统只需要回滚到最后一个已知的正常状态。原来恢复一个卷需要 20 分钟时间,现在只需要几秒!)
格式化分区
分区创建完成后,用适当版本的 mkfs 命令对其进行格式化。文件系统将有其自己版本的 mkfs ,比如 mkfs.ext2 或者 mkfs.ext3。这些助手脚本让您可以只需要指定分区就可以创建一个文件系统。下面是一些例子:
清单 4. 使用 mkfs
有一些高级的参数会影响分区如何格式化,但是对通常的用途来说,使用默认的参数就可以了。一旦分区经过了格式化,它就可以装载到 / 文件系统中。一个文件系统必须在被缷载后才可以重新格式化。
其他文件系统工具
让我们来看一看其他有用的工具。
控制台工具 有几个工具可以查看磁盘和文件系统的状态。
df df 表示“disk free”。它会报告装载的文件系统上已用的和可用的磁盘空间的大小。有用的开关:
检查磁盘空间
du du 表示“disk usage”。它会报告特定的文件和每个子目录 (参数中指定的目录) 所使用的磁盘空间大小。有用的开关:
检查磁盘使用情况
fsck 这个程序用来检查和修复文件系统,相当于 Windows 中的 chkdsk。如同 mkfs 一样,对应不同的文件系统类型它有不同的版本。 fsck 必须运行于已缷载的卷上,虽然除非是在文件系统没有缷载完全的时候,否则很少会用到它。 man fsck 和 info fsck,以及本文最后的 参考资料 中都提供了详细的资料。
Webmin Webmin 有一些工具用于管理文件系统和分区。
图 1. Webmin 分区工具
硬件、本地磁盘上的分区 每一个磁盘和分区以及它们的使用情况都被显示出来。点击一个文件系统可以查看详细信息。对于已卸载的分区,可以编辑它的类型,以及格式化它的文件系统。
系统、磁盘和网络文件系统 装载的和卸载的文件系统都在 /etc/fstab 中列出。普通文件系统类型有一个用于创建条目的向导。没有识别出的文件系统类型可以在这里装载和缷载,但是只能手工编辑 /etc/fstab。大多数服务器文件系统在这里都可以很好地处理。
完整的体系是分区的总和
虽然在 Linux 中对分区和文件系统的管理与 Windows 中有很多类似之处,但是从驱动器字母过渡到完全的分层树可能还需要作一些调整。因此,有一些健壮的控制台工具可以使用这些功能及 /etc 目录下的配置文件。Webmin 等基于浏览器的前端提供了一些有用的工具。
没有驱动器字母!
装载!
/etc/fstab 文件
添加文件系统
分区
文件系统类型
格式化分区
其他文件系统工具
完整的体系是分区的总和
在本部分,我们研究了 Linux 的分层目录结构,以及装载和设备。在 Linux 中文件和存储设备的使用与 Windows 中不同。虽然同样有文件和分层目录结构,但是除此以外您还需要建立一种不同的思维方式。
清单 1. 目录结构
|
没有驱动器字母!
在 Linux 中没有驱动器字母,这确实相当有用。如果您曾经在复杂的网络环境中使用过 Windows 系统,并且运行这个系统的机器带有若干个设备,那么您可能会发现字母表中的字母不够用。在 Linux 中,只有一个文件结构。它以 root (/) 开始,所有的本地文件系统,所有本地设备,以及所有的远程文件系统都表示为这个结构中的子目录。当 Linux 第一次引导时,它根据 /etc/fstab 文件中的信息构建这个文件结构。Windows 为硬盘驱动器分区和其他存储设备分配驱动器字母,而 Linux 在 root 文件结构中为它们分配目录。这个分层的结构是完全可配置的,并且可以动态地修改。
装载!
将一个设备添加到文件系统中,术语上称为 装载 。Linux 会自动装载一个 / (root) 文件系统。也可能会有一个单独的 /boot 文件系统,其中存放的是核心的内核引导文件。Linux 还将装载一些特殊的文件系统。交换分区并不表示为文件系统的一部分,但是内核会处理它。不过,其他特殊的文件系统,比如 proc,被看作是文件系统的常规部分,可以像普通文件一样对它进行处理。
(注意:什么是 /proc?/proc 文件系统是 Windows 思想与 Linux 思想不同之处的极好示例。 /proc 存储的是对正在运行的系统各个方面的虚拟描述。在那里有 IRQ 设置、内存使用、加载的设备驱动器、网络状态等很多信息。甚至有一个叫做 /proc/kcore 的文件,是所有用到的系统内存的虚拟描述。这里的每一个文件都可以像普通文件或二进制文件一样解析。可以编写某些文件来改变运行着的内核的行为,而不用重新引导。例如,为打开系统中启用的第一个以太网设备的 IP 转发,您可以使用一个文件命令:
|
这种系统的主要好处在于,您只需要使用简单的脚本技术,就可以对您的正在运行的系统进行深入而有效的操作。)
其他文件系统,比如可移动的媒体或者远程文件系统,需要手工装载。装载一个文件系统时,您需要知道在 Linux 中对它进行引用的正确方法,还需要有一个空目录作为装载点。对于可移动媒体,Linux 可能在安装时就为您创建了装载点。在 Red Hat Linux 中,cdrom 设备被设置装载到 /mnt/cdrom 目录。也就是说,当您将一张 CD 放入 CDROM 设备后,输入命令:
|
CD 就会被添加到文件系统中,CDROM 设备会被锁定以使它不会被意外弹出。只需要到 /mnt/cdrom 目录就可以访问 CD 中的内容。当不再使用 CD 时,您可以用下面的命令将它从文件系统中移除:
|
/mnt/cdrom 目录将变空,CDROM 设备的锁定被解除。您现在可以安全地弹出 CD。对其他可移动媒体也是如此,比如软盘驱动器 (/mnt/floppy)。运行不带参数的 mount 命令会显示出当前已装载的文件系统。
(注:为什么都需要加锁?不要忘记,Linux 不仅是多用户的,而且是多会话的。也就是说几个用户可以同时登录到系统中、运行程序、使用资源。这与 Windows 中的登录后使用共享文件不同。每一个用户都可以像自己坐在控制台前一样使用系统。为了保持稳定,Linux 不允许任意释放当前正在使用的文件系统,通过锁定 CD,在直到没有人再使用之前 CD 不会被弹出。)
/etc/fstab 文件
设备与其装载点之间的关联关系在 /etc/fstab 中配置。这个文件可以直接修改,也可以由管理工具来维护。下面是一个 /etc/fstab 示例:
理解 /etc/fstab
每一行表示一个要装载的文件系统。第一列指出的是要装载的设备。第二列是装载点,也就是设备在文件系统中的位置。第三列指出了文件系统的类型。第四列是处理文件系统的选项。最后一列是文件系统的标志位。第一个数字是 1 或者 0,指定系统是否应该用 dump(系统备份的一个选项)进行复制。第二个数字是 0、1 或者 2,指定了在引导时检查文件系统的次序。0 表示完全不检查。1 表示要最先检查, root (/) 文件系统需要指定为 1。其他文件系统应该是 2。
在上面列出的 fstab 文件中,root 文件系统位于第一个 IDE 硬盘驱动器的第五个分区中,这个分区是扩展分区的第一个逻辑驱动器。/boot 文件系统位于第一个 IDE 硬盘驱动器的第二个主分区中,其中存放的是内核启动文件。交换分区位于第一个 IDE 硬盘驱动器的第六个分区,也就是扩展分区的第二个逻辑驱动器。列表中的其他文件系统相应的设备是“none”。我们马上就要阐述这一问题。现在我们先来关注物理磁盘。
(注:什么都是文件在 Linux 中,文件系统由类似于文件的名称来表示。在 /dev 目录下的所有文件都是称为 nodes 的特殊文件,它们通过设备驱动程序链接到物理设备。这就使得您可以做一些有趣的事情。例如,为制作一张 CD 的 ISO 映像,您可以使用 cp (copy) 命令:
|
这样复制的是一个二进制映像而不是 CD 的文件结构。以文件为中心的方法还允许您可以为设备名称指定有意义的别名。例如,通常有一个叫做 /dev/cdrom 的别名,指向物理 CDROM 设备,而这个设备通常是 /dev/hdc。 一旦创建了别名,您就可以通过 /dev/cdrom 访问那个设备,这样更好记。别名技术还允许您标准化脚本,使这些脚本可以在物理配置不同的系统上使用。)
第四列中的选项将随文件系统类型而不同。在上面的例子中,/ 和 /boot 的装载选项为“default”。也就是说,它们使用异步 I/O 以可读写方式自动装载。只有 root 可以装载或者缷载设备,但是用户可以执行二进制文件和使用“sticky bit”(稍后介绍)。文件系统将被作为块字符设备来处理。然而,对 /mnt/cdrom 来说,选项就不同了。它不会被自动装载,并且将会作为只读文件系统装载。用户将可以在该文件系统中执行脚本和程序。
添加文件系统
在 /etc/fstab 文件中添加新的一行,您就可以将文件系统添加到 /etc/fstab。作为一个实际的例子,我有一个 RAID 设备,存储的是部门所用到的文件资源。这个设备中只有数据文件,并且保持与操作系统分离,这样在出现硬件故障时可以将它转移到另一个系统。RAID 已经配置好,在 Linux 中识别为 /dev/sdc,即第三个 SCSI 设备。在第一个分区上创建了带日志的 ext3 文件系统,这样我们通过 /dev/sdc1 就可以访问它。我希望在计算机引导时自动将这个 RAID 装载到文件系统中。我在 /etc/fstab 中添加了如下一行:
|
这样在引导时 RAID 就会像 / 和 /boot 系统一样被装载。现在我只要再创建一个目录作为指定的装载点:
|
一旦创建了这个空目录,我们可以将文件系统装载到它:
|
RAID 现在关联到了 /data。如果系统被重新引导,/data 将自动装载。
分区
在 Linux 中分区与 Windows 中本质上相同。控制台命令 fdisk 可以创建和管理分区。当您使用 fdisk 时,您必须指明它要操作哪个设备。可使用命令 fdisk -l 来查看可用设备。
清单 2. 使用 fdisk
|
上面的清单来自于一台膝上型电脑,所以它显示的结构与服务器有些不同。它显示了一个有若干个分区的 IDE 硬盘驱动器。如果有其他设备,同样也将会被列出。例如,第二个 IDE 硬盘驱动器可能会显示为 /dev/hdb。指定一个设备再次运行 fdisk,您会得到一个简短的提示。
清单 3. 对一个设备运行 fdisk
|
输入“m”可以查看命令菜单。您可以使用“p”来显示当前的分区表。您可以创建、删除和修改现有分区的类型。“l”将为您列出可用分区类型的完全列表。用“w”将您的修改写入到分区表并退出程序,或者使用“q”不保存修改而退出。一些修改会立即生效。有一些修改需要系统重新引导方能生效。Linux 下的分区规则与 Windows 中相同。您可以使用 4 个主分区,每个都可以成为扩展分区。
文件系统类型
Linux 可以处理内核所能识别的任何文件系统类型。相当多的类型是默认编译到内核中的,并且可以再添加新的文件系统。下面是一些重要的文件系统类型:
·ext2:标准 Linux 文件系统
·ext3:带日志的标准 Linux 文件系统
·vfat:Microsoft 的 Fat32 文件系统
·jfs:IBM 的日志文件系统
·reiserfs:另一个流行的日志文件系统
(注:日志节约时间,保全数据 日志文件系统有助于在非正常关闭时保护数据。如果一个卷没有缷载就被关闭,可能还遗留下未完成的工作,以及处于 in-between 状态的文件。在典型的文件系统中,需要对这个卷进行全面的检查,对较大的卷来说这需要比较长的时间。日志文件系统会对磁盘的每一个写操作的事务记录保持一段时间(比如 5 秒)。当这个卷没有被完全地缷载时,文件系统只需要回滚到最后一个已知的正常状态。原来恢复一个卷需要 20 分钟时间,现在只需要几秒!)
格式化分区
分区创建完成后,用适当版本的 mkfs 命令对其进行格式化。文件系统将有其自己版本的 mkfs ,比如 mkfs.ext2 或者 mkfs.ext3。这些助手脚本让您可以只需要指定分区就可以创建一个文件系统。下面是一些例子:
清单 4. 使用 mkfs
|
有一些高级的参数会影响分区如何格式化,但是对通常的用途来说,使用默认的参数就可以了。一旦分区经过了格式化,它就可以装载到 / 文件系统中。一个文件系统必须在被缷载后才可以重新格式化。
其他文件系统工具
让我们来看一看其他有用的工具。
控制台工具 有几个工具可以查看磁盘和文件系统的状态。
df df 表示“disk free”。它会报告装载的文件系统上已用的和可用的磁盘空间的大小。有用的开关:
检查磁盘空间
du du 表示“disk usage”。它会报告特定的文件和每个子目录 (参数中指定的目录) 所使用的磁盘空间大小。有用的开关:
检查磁盘使用情况
fsck 这个程序用来检查和修复文件系统,相当于 Windows 中的 chkdsk。如同 mkfs 一样,对应不同的文件系统类型它有不同的版本。 fsck 必须运行于已缷载的卷上,虽然除非是在文件系统没有缷载完全的时候,否则很少会用到它。 man fsck 和 info fsck,以及本文最后的 参考资料 中都提供了详细的资料。
Webmin Webmin 有一些工具用于管理文件系统和分区。
图 1. Webmin 分区工具
硬件、本地磁盘上的分区 每一个磁盘和分区以及它们的使用情况都被显示出来。点击一个文件系统可以查看详细信息。对于已卸载的分区,可以编辑它的类型,以及格式化它的文件系统。
系统、磁盘和网络文件系统 装载的和卸载的文件系统都在 /etc/fstab 中列出。普通文件系统类型有一个用于创建条目的向导。没有识别出的文件系统类型可以在这里装载和缷载,但是只能手工编辑 /etc/fstab。大多数服务器文件系统在这里都可以很好地处理。
完整的体系是分区的总和
虽然在 Linux 中对分区和文件系统的管理与 Windows 中有很多类似之处,但是从驱动器字母过渡到完全的分层树可能还需要作一些调整。因此,有一些健壮的控制台工具可以使用这些功能及 /etc 目录下的配置文件。Webmin 等基于浏览器的前端提供了一些有用的工具。