Linux 系统管理
将额外的磁盘驱动器添加到微型计算机系统所需的步骤比大型系统所需的步骤稍微繁琐。 大部分复杂性来自于微型计算机上不同的操作系统可以共享磁盘这一事实。
与磁盘分区相关的术语在 UNIX 和其他微型计算机操作系统之间略有不同。 例如,DOS 区分主分区(主要的、可启动的 DOS 分区)和同一硬盘上的其他扩展分区; UNIX 磁盘分区只是磁盘上一个单独可访问的部分。 DOS 允许每个磁盘最多有四个物理分区。 在 DOS 下,一个物理磁盘分区可以进一步细分为多个部分,称为逻辑驱动器。 向微型计算机系统添加磁盘的第一步是决定如何在 DOS 和 UNIX 之间拆分驱动器(如果适用)。 fdisk 实用程序用于在微型计算机系统上创建物理磁盘分区(DOS 也提供 fdisk 实用程序)。 cfdisk 实用程序是 fdisk 的屏幕版本,也可在 Linux 下使用。 以下注意事项适用于您可能遇到的无数 fdisk 版本
传统的观点是使用 fdisk 的本机版本来创建和操作每个操作系统的磁盘分区。 换句话说,DOS 分区使用 DOS 版本,UNIX 分区使用 UNIX 版本。 在实践中,您通常可以使用不同的版本。 通常情况下,一切都运行良好,除非出现问题。
记录您拥有的每个 fdisk 版本显示的每个磁盘分区表的分区号、起始和结束块、总大小、分区类型和其他数据。 一种简单的方法是从每个版本打印分区表。 如果表格损坏(这种情况确实会不时发生),您可能需要这些信息来重新创建它并恢复您的数据。 拥有所有版本的数据可确保您可以按照各种操作系统最初创建分区时观察到的相同对齐模式和要求重新定义分区。
我们将详细了解将新 SCSI 磁盘连接到 Linux 系统的过程。 该过程对于其他磁盘类型(例如,IDE)是相同的,尽管用于访问设备的特殊文件会有所不同(例如,/dev/hdb)。
将磁盘连接到系统后,应在系统启动时检测到它。 如果您使用的是 sysvinit 工具,则可以使用 dmesg 命令显示启动消息或检查 /etc/boot.log
scsi0 : at 0x0388 irq 10 options CAN_QUEUE=32 ... scsi0 : Pro Audio Spectrum-16 SCSI scsi : 1 host. Detected scsi disk sda at scsi0, id 2, lun 0 scsi : detected 1 SCSI disk total.
如有必要,为磁盘创建设备特殊文件(仅当您有很多磁盘时才需要)。 例如,此命令创建用于访问第五个 SCSI 磁盘的特殊文件
# cd /dev; MAKEDEV sde
另请注意,磁盘排序发生在启动时,因此添加 SCSI ID 低于现有磁盘的新 SCSI 磁盘将导致特殊文件被重新分配,并可能破坏您的 /etc/fstab 设置。
假设我们的特殊文件都井然有序,我们将使用 fdisk 或 cfdisk(面向屏幕的版本)将磁盘划分为分区(我们将为 DOS 分区保留大约三分之一的磁盘)。 以下命令将为第一个 SCSI 磁盘启动这些实用程序
# fdisk /dev/sda # cfdisk /dev/sda
我们将需要以下子命令
cfdisk 更方便使用,因为分区表是连续显示的。 cfdisk 子命令始终对当前分区(突出显示)进行操作。 因此,为了创建新分区,请将突出显示移动到与“可用空间”对应的行,然后输入 n。 cfdisk 将提示输入分区信息
Primary or logical [pl]: p Size (in MB): 110
如果您希望以不同的单位集输入大小,请使用 u 子命令(在 MB、扇区和柱面之间循环)。
我们使用相同的步骤创建第二个分区,然后使用 b 子命令激活第一个分区。 然后,我们使用 t 子命令更改两个分区的分区类型。 最常用的类型代码是 DOS 的 6、Linux 交换分区的 82 和常规 Linux 分区的 83。
这是最终的分区表(输出已简化): 请勿在下面的破折号之间放置任何发丝空格,否则它们会爆炸。 它们不必看起来是分开的。
cfdisk 0.8 BETA Disk Drive: /dev/sda Heads: 16 Sectors per Track: 63 Cylinders: 1023 Name Flags Part Type FS Type Size (MB) /dev/sda1 Boot Primary Linux 110.0 /dev/sda2 Primary DOS 52.5 Pri/Log Free Space 0.5
如果您更改了磁盘的分区布局(换句话说,除了更改分配给各个分区的类型之外,还做了其他任何操作),请在此处重新启动系统。
接下来,使用 mkfs 命令在 Linux 分区上创建文件系统。 mkfs 在 Linux 版本中已得到简化,只需要少量输入
# mkfs -t ext2 /dev/sda1
此命令创建一个 ext2 类型的文件系统。 如果您想自定义 mkfs 的操作,以下选项可能很有用
-b: 设置文件系统块大小(以字节为单位)(默认值为 1024)。
-f: 设置文件系统碎片大小(以字节为单位)(默认值为 1024)。
-c: 在创建文件系统之前检查磁盘分区是否有坏块。
-i: 指定字节/inode 值:为每个此字节数的块创建一个 inode。 默认值 4096 通常会创建比您需要的更多的 inode,但可能不值得更改。
-m: 指定要保留的文件系统空间百分比(仅 root 用户可访问)。 默认值为 5%(其他 UNIX 系统上典型值的一半)。 在如今千兆字节磁盘的时代,即使这个百分比也可能值得重新考虑。
构建文件系统后,运行 fsck
# fsck -f -y /dev/sda1
即使文件系统是干净的,-f 选项也是强制 fsck 运行所必需的。 现在可以挂载新的文件系统并将其输入到 /etc/fstab 中,这是下一节的主题。
以下是 Linux 系统中 /etc/fstab 中的一些示例条目
# device mount type options dump fsck /dev/hda2 / ext2 defaults 1 1 /dev/hdb1 /aux msdos noauto 1 2 /dev/hda1 none swap sw 0 0 /dev/sda1 /chem ext2 defaults 1 1
条目的一般格式是
special-file loc type opts dump-freq pass-number
这些字段具有以下含义
special-file:文件系统所在的特殊文件的名称。 这必须是块设备名称。
loc:要挂载文件系统的目录。 如果分区将用于交换,请在此字段中使用 none。
type:条目引用的分区类型。 Linux 下本地文件系统的值为 ext2。 其他常见的类型值包括通过 NFS 远程挂载的卷的 nfs,以及用于交换分区和 ignore 的 swap,它告诉 mount 忽略该条目。
opts:此字段由一个或多个选项组成,以逗号分隔。 上面的 type 字段确定允许用于任何给定类型的文件系统的选项。 对于 ignore 类型条目,此字段将被忽略。 对于本地文件系统,options 字段可能包含以下关键字,以逗号分隔
rw | 读写文件系统 |
ro | 只读文件系统 |
suid | 允许 SUID 访问模式(默认) |
nosuid | 不允许 SUID 访问模式 |
noauto | 不要自动挂载此文件系统 |
usrquota | 用户配额可能会生效 |
grpquota | 组配额可能会生效 |
多个选项以逗号分隔,中间没有空格。 在许多系统中,如果不需要任何选项,则可以将关键字 defaults 放入此字段中。
如果文件系统类型为 nfs,则支持更多选项(请参阅第 13 章)。
dump-freq:一个十进制数字,指示 dump 实用程序备份此文件系统的频率。 dump 实用程序正在进行 alpha 测试,并且在大多数 Linux 系统上不可用,因此除非您使用 dump,否则可以忽略此字段。
pass-number:一个十进制数字,指示 fsck 应检查文件系统的顺序。 pass-number 为 1 表示应首先检查文件系统,2 表示应其次检查文件系统,依此类推。 根文件系统的 pass-number 必须为 1。 所有其他文件系统应具有相同或更高的 pass-number。 为了获得最佳性能,同一磁盘驱动器上的两个文件系统应具有不同的 pass-number; 但是,不同驱动器上的文件系统可能具有相同的 pass-number,从而使 fsck 并行检查两个文件系统。 如果在同一遍中检查的所有文件系统的大小大致相同,则 fsck 通常是最快的。 对于交换设备,此字段应为 0(0 禁用 fsck 的检查)。
tune2fs 命令可用于列出和更改 ext2 文件系统超级块中的字段。 以下是其显示模式输出的示例
# tune2fs -l /dev/hdb1 Filesystem magic number: 0xEF53 Filesystem state: clean Errors behavior: Continue Inode count: 13104 Block count: 52208 Reserved block count: 2610 Free blocks: 50528 Free inodes: 13093 First block: 1 Block size: 1024 Fragment size: 1024 Blocks per group: 8192 Fragments per group: 8192 Inodes per group: 1872 Last mount time: Wed Dec 31 19:00:00 1969 Last write time: Thu Mar 2 04:19:16 1995 Mount count: 6 Maximum mount count: 20 Last checked: Thu Mar 7 15:27:34 1996 Check interval: 2592000 Next check after: Fri Apr 5 16:27:34 1996
列表中的最后一项涉及 fsck 何时检查文件系统,即使文件系统是干净的。 Linux 版本的 fsck for ext2 文件系统将在以下情况下检查文件系统:未检查的最大挂载次数已超过,或者检查之间的最大时间间隔已过期(在前面的输出中为 20 次和 30 天;检查间隔以秒为单位给出)。
tune2fs 的 -i 选项可用于指定检查之间以天为单位的最大时间间隔,而 -c 选项可用于指定检查之间的最大挂载次数。 例如,以下命令禁用检查之间的时间间隔功能,并将最大挂载次数设置为 25
# tune2fs -i 0 -c 25 /dev/hdb1 Setting maximal mount count to 25 Setting interval between check 0 seconds
tune2fs 的另一个有用选项是 -m,它允许您动态更改保留的文件系统空间百分比。
为微型计算机设计的 UNIX 版本倾向于假设此类系统具有单个磁盘,该磁盘足够大,可以容纳它将使用的所有文件系统。 如果您实际拥有的是两个磁盘上每个磁盘的空间都较小,但任何一个磁盘上的空间都不足以容纳所有 UNIX,那么通常没有内置的方法来安装操作系统。 但是,像下面这样的过程通常会成功
在第一个磁盘上的分区上安装最小操作系统。
将第二个磁盘中的分区添加到系统。
一般策略是创建指向第二个磁盘上的分区的符号链接,以允许操作系统在它们之间拆分。 这可能意味着在安装后将一些目录复制到第二个磁盘,然后在原始位置创建链接,如本例所示(/d2 是来自第二个磁盘的分区的挂载点
# cd /d2 # tar -cvf - -C /usr/lib terminfo | tar -xvpf - # rm -rf /usr/lib/terminfo # ln -s /d2/terminfo /usr/lib/terminfo
或者,如果您在安装操作系统组件之前知道或可以确定其位置,则可以预先设置符号链接,然后安装该组件,文件将从一开始就写入正确的位置。 例如,以下命令将导致手册页写入第二个磁盘
# mkdir /d2/man # chown bin /d2/man; chgrp bin /d2/man # chmod 755 /d2/man # ln -s /d2/man /usr/man
选择要移动的组件时,请避免将启动系统所需的任何内容放在第二个磁盘上。
继续此过程,直到安装完所有您想要的内容。
经 O'Reilly and Associates, Inc. 许可,略作修改后转载自 Essential System Administration ---第二版,版权 (C) 1995。 如需订购和信息,请致电 800-998-9938 或 707-829-0515。
Æleen Frisch 管理着由 Linux 和其他 UNIX 系统以及 PC 组成的非常异构的网络。 在终于完成第二版 Essential System Administration 之后,她回到了她的人生真谛,为她的猫 Daphne 和 Sarah 拉绳子。 您可以通过电子邮件 aefrisch@lorentzian.com 与她联系。