您当前位置:闸机网 >> 相关资源 >> 嵌入式 >> 浏览文章      |关键词: linux

Linux 管理员手册(4)

2011-7-13 0:45:33 互联网 admin 【字体:

    本章说明标准 Linux 目录树的重要部分 基于 FSSTND 文件系统标准 概述根据不同
的目的和给定的要求将目录树分为若干分离的文件系统的一般方法 也说明一些其他方法
背景
    本章松散地基于 Linux 文件系统标准 FSSTND 版本 1.2(见参考书目[Qui95]) 它意图建
立一个如何组织 Linux 系统目录树的标准 这样一个标准具有易于写或 port(移植?)Linux 软
件 管理 Linux 系统的优点 因为所有东西都将在他们的一般地方 此标准没有强制所有人
遵从的权威 但它有最多的 Linux distributions 的支持 如果没有什么特殊的理由 不遵从
FSSTND 不是个好主意 FSSTND 意图遵从 Unix 传统和当前趋势 使熟悉其他 Unix 系统
的人对 Linux 系统更容易接受(反之亦然)
    本章并非如FSSTND那么详细 一个系统管理员应该阅读FSSTND以得到全部的理解
    本章不详细解释所有文件 其意图并非说明每个文件 而是从文件系统的视角给出系统
的一个概览 每个文件的更多的信息在本手册或 man 页的其他地方
    有意将全目录树可以分为小的部分 每个部分可以在自己的磁盘或分区上 以能为磁盘
容量所容纳 并易于备份及其他系统管理 主要部分是根 /usr  /var  和 /home  文件系
统 每个部分有不同的目的 目录树已被设计成能在 Linux 机器的网络中很好地工作 可以
通过只读设备(如 CDROM)或 NFS 网络共享文件系统的一些部分
    下面说明目录树不同部分的任务
    每台机器都有根文件系统(一般在本地盘中 当然也可以在 RAM 盘或网络盘中) 它包
含系统引导和使其他文件系统得以 mount 所必要的文件 根文件系统应该有单用户状态所
必须的足够的内容 还应该包括修复损坏系统 恢复备份等的工具
    /usr  文件系统包含所有命令 库 man 页和其他一般操作中所需的不改变的文件  /
usr  应该没有对给定机器特定的文件 也不应该有一般使用中要修改的文件 这样允许此文
件系统中的文件通过网络共享 这样可以更有效 因为这样节省了磁盘空间(/usr 很容易是
数百兆) 且易于管理(当升级应用时 只有主/usr 需要改变 而无须改变每台机器)  即使此
文件系统在本地盘上 也可以只读 mount 以减少系统崩溃时文件系统的损坏
    /var  文件系统包含会改变的文件 比如 spool 目录(mail news 打印机等用的) log
文件 formatted manual pages 和暂存文件 传统上/var  的所有东西曾在 /usr  下的某个
地方 但这样/usr  就不可能只读安装了
    /home  文件系统包含用户家目录 即系统上的所有实际数据 将家目录分到自己的目
5 录树或文件系统中易于备份 其他部分经常不必备份 至少不必经常备份(它们很少改变)
一个大的/home  可能要分为若干文件系统 需要在/home  下加一级名字 如/home/studen
ts  /home/staff  等
    虽然上面将不同的部分称为文件系统 但它们不必是真的分离的文件系统 如果系统是
小的单用户系统 而用户希望简单化 可以很容易地放在一个文件系统中 根据磁盘容量和
不同目的所需分配的空间 目录树也可以分到不同的文件系统中 重要的是使用标准的名字
即使/var  和/usr 在同一分区上 名字/usr/lib/libc.a  和/var/adm/messages  必须能工作 例
如将/var  下的文件移动到/usr/var  并将/var  作为/usr/var  的符号连接
    Unix 文件结构根据目的来分组文件 即所有的命令在一个地方 所有的数据在另一个
地方 所有的文档又在一个地方 等等 另一个方法是根据属于的程序分组文件 即所有 E
macs 文件在一个目录中 所有 TeX 文件在另一个中 等等 后一种方法的问题是文件难于
共享(程序目录经常同时包含静态可共享的和动态不可共享的文件) 有时难于查找  (例如 m
an 页在极大数量的地方 使 man 程序查找它们极其困难)  
根文件系统
    根文件系统一般应该比较小 因为包括严格的文件和一个小的不经常改变的文件系统不
容易损坏 损坏的根文件系统一般意味着除非用特定的方法(例如从软盘)系统无法引导 所
以不应该冒这个险
    根目录一般不含任何文件 除了可能的标准的系统引导映象 通常叫/vmlinuz  所有
其他文件在根文件系统的子目录中
/bin
引导启动所需的命令或普通用户可能用的命令(可能在引导启动后)
/sbin
类似/bin  但不给普通用户使用 虽然如果必要且允许时可以使用
/etc
特定机器的配置文件
/root
root 用户的家目录
/lib
根文件系统上的程序所需的共享库
/lib/modules
核心可加载模块 特别是那些恢复损坏系统时引导所需的(例如网络和文件系统驱动)
/dev
设备文件
6 /tmp
临时文件 引导启动后运行的程序应该使用/var/tmp  而不是/tmp  因为前者可能在一个
拥有更多空间的磁盘上
/boot
引导加载器(bootstrap loader)使用的文件 如 LILO 核心映象也经常在这里 而不是在根
目录 如果有许多核心映象 这个目录可能变得很大 这时可能使用单独的文件系统更好
另一个理由是要确保核心映象必须在 IDE 硬盘的前 1024 柱面内
/mnt
系统管理员临时 mount 的安装点 程序并不自动支持安装到/mnt /mnt 可以分为子目录
(例如/mnt/dosa  可能是使用 MSDOS 文件系统的软驱 而/mnt/exta  可能是使用 ext2 文件
系统的软驱)
/proc , /usr , /var , /home
其他文件系统的安装点
/etc 目录
/etc  目录包含很多文件 下面说明其中的一些 其他的你应该知道它们属于哪个程序 并
阅读该程序的 man 页 许多网络配置文件也在/etc  中 它们在 网络管理指南 中说明
/etc/rc or /etc/rc.d or /etc/rc.d
启动 或改变运行级时运行的 scripts 或 scripts 的目录 更详细的信息见关于 init  的章
/etc/passwd
用户数据库 其中的域给出了用户名 真实姓名 家目录 加密的口令和用户的其他信息
格式见 passwd  的 man 页
/etc/fdprm
软盘参数表 说明不同的软盘格式 用 setfdprm  设置 更多的信息见 setfdprm  的 man 页
/etc/fstab
启动时 mount -a 命令(在/etc/rc 或等效的启动文件中)自动 mount 的文件系统列表 Linux
下 也包括用 swapon -a 启用的 swap 区的信息 见 4.8.5 节和 mount  的 man 页
/etc/group
类似/etc/passwd  但说明的不是用户而是组 见 group  的 man 页
/etc/inittab
init  的配置文件
/etc/issue
getty 在登录提示符前的输出信息 通常包括系统的一段短说明或欢迎信息 内容由系统管
7 理员确定
/etc/magic
file  的配置文件 包含不同文件格式的说明 file  基于它猜测文件类型 见 magic  和 file
的 man 页
/etc/motd
Message Of The Day 成功登录后自动输出 内容由系统管理员确定 经常用于通告信
息 如计划关机时间的警告
/etc/mtab
当前安装的文件系统列表 由 scripts 初始化 并由 mount  命令自动更新 需要一个当前安
装的文件系统的列表时使用 例如 df  命令
/etc/shadow
在安装了影子口令软件的系统上的影子口令文件 影子口令文件将/etc/passwd  文件中的加
密口令移动到/etc/shadow  中 而后者只对 root 可读 这使破译口令更困难
/etc/login.defs
login  命令的配置文件
/etc/printcap
类似/etc/termcap  但针对打印机 语法不同
/etc/profile , /etc/csh.login , /etc/csh.cshrc
登录或启动时 Bourne 或 C shells 执行的文件 这允许系统管理员为所有用户建立全局缺省
环境 各 shell 见 man 页
/etc/securetty
确认安全终端 即哪个终端允许 root 登录 一般只列出虚拟控制台 这样就不可能(至少很
困难)通过 modem 或网络闯入系统并得到超级用户特权
/etc/shells
列出可信任的 shell chsh  命令允许用户在本文件指定范围内改变登录 shell 提供一台机
器 FTP 服务的服务进程 ftpd  检查用户 shell 是否列在 /etc/shells  文件中 如果不是将不允
许该用户登录
/etc/termcap
终端性能数据库 说明不同的终端用什么"转义序列"控制 写程序时不直接输出转义序列(这
样只能工作于特定品牌的终端) 而是从/etc/termcap  中查找要做的工作的正确序列 这样
多数的程序可以在多数终端上运行 见 termcap  curs_termcap  和 terminfo  的 man 页
/dev 目录
/dev  目录包括所有设备的设备文件 设备文件用特定的约定命名 这在设备列表中说明  (见
8 [Anv]) 设备文件在安装是产生 以后可以用 /dev/MAKEDEV 描述 /dev/MAKEDEV.loc
al  是系统管理员为本地设备文件(或连接)写的描述文稿  (即如一些非标准设备驱动不是标
准 MAKEDEV  的一部分)
/usr 文件系统
/usr  文件系统经常很大 因为所有程序安装在这里 /usr  里的所有文件一般来自 Linux di
stribution 本地安装的程序和其他东西在/usr/local  下 这样可能在升级新版系统或新 dist
ribution 时无须重新安装全部程序 /usr 的有些子目录在下面列出(一些不太重要的目录省
略了 更多信息见 FSSTND)
/usr/X11R6
X Window 系统的所有文件 为简化 X 的开发和安装 X 的文件没有集成到系统中  X 自
己在/usr/X11R6  下类似/usr
/usr/X386
类似/usr/X11R6  但是给 X11 Release 5 的
/usr/bin
几乎所有用户命令 有些命令在/bin  或/usr/local/bin  中
/usr/sbin
根文件系统不必要的系统管理命令 例如多数服务程序
/usr/man , /usr/info , /usr/doc
手册页 GNU 信息文档和各种其他文档文件
/usr/include
C 编程语言的头文件 为了一致性这实际上应该在/usr/lib  下 但传统上支持这个名字
/usr/lib
程序或子系统的不变的数据文件 包括一些 site-wide 配置文件 名字 lib 来源于库(library);
编程的原始库存在/usr/lib  里
/usr/local
本地安装的软件和其他文件放在这里
/var 文件系统
/var  包括系统一般运行时要改变的数据 每个系统是特定的 即不通过网络与其他计算机
共享
/var/catman
当要求格式化时的 man 页的 cache man 页的源文件一般存在/usr/man/man*  中 有些 m
an 页可能有预格式化的版本 存在/usr/man/cat*  中 而其他的 man 页在第一次看时需要
格式化 格式化完的版本存在/var/man  中 这样其他人再看相同的页时就无须等待格式化
9 了 (/var/catman  经常被清除 就象清除临时目录一样 )
/var/lib
系统正常运行时要改变的文件
/var/local
/usr/local  中安装的程序的可变数据(即系统管理员安装的程序) 注意 如果必要 即使本
地安装的程序也会使用其他/var  目录 例如/var/lock
/var/lock
锁定文件 许多程序遵循在/var/lock  中产生一个锁定文件的约定 以支持他们正在使用某
个特定的设备或文件 其他程序注意到这个锁定文件 将不试图使用这个设备或文件
/var/log
各种程序的 Log 文件 特别是 login (/var/log/wtmp log 所有到系统的登录和注销)  和 sysl
og (/var/log/messages  里存储所有核心和系统程序信息 /var/log  里的文件经常不确定地
增长 应该定期清除
/var/run
保存到下次引导前有效的关于系统的信息文件 例如 /var/run/utmp  包含当前登录的用户
的信息
/var/spool
mail, news,  打印队列和其他队列工作的目录 每个不同的 spool 在/var/spool  下有自己的
子目录 例如 用户的邮箱在/var/spool/mail  中
/var/tmp
比/tmp  允许的大或需要存在较长时间的临时文件  (虽然系统管理员可能不允许/var/tmp
有很旧的文件 )
/proc 文件系统
/proc  文件系统是一个假的文件系统 它不存在在磁盘某个磁盘上 而是由核心在内存中产
生 用于提供关于系统的信息(originally about processes, hence the name) 下面说明
一些最重要的文件和目录 /proc  文件系统在 proc man 页中有更详细的说明
/proc/1
关于进程 1 的信息目录 每个进程在/proc  下有一个名为其进程号的目录
/proc/cpuinfo
处理器信息 如类型 制造商 型号和性能
/proc/devices
当前运行的核心配置的设备驱动的列表
10 /proc/dma
显示当前使用的 DMA 通道
/proc/filesystems
核心配置的文件系统
/proc/interrupts
显示使用的中断 and how many of each there have been.
/proc/ioports
当前使用的 I/O 端口
/proc/kcore
系统物理内存映象 与物理内存大小完全一样 但不实际占用这么多内存 it is generated
 on the fly  as programs access it. (记住 除非你把它拷贝到什么地方 /proc  下没有任
何东西占用任何磁盘空间 )
/proc/kmsg
核心输出的消息 也被送到 syslog
/proc/ksyms
核心符号表
/proc/loadavg
系统"平均负载" 3 个没有意义的指示器指出系统当前的工作量
/proc/meminfo
存储器使用信息 包括物理内存和 swap
/proc/modules
当前加载了哪些核心模块
/proc/net
网络协议状态信息
/proc/self
到查看/proc 的程序的进程目录的符号连接 当 2 个进程查看/proc 时 是不同的连接 这
主要便于程序得到它自己的进程目录
/proc/stat
系统的不同状态 such as the number of page faults since the system was booted.
/proc/uptime
系统启动的时间长度
11/proc/version
核心版本
    注意所有上述文件给出易读的文本文件 有时可能是不易读的格式 有许多命令做了些
格式化以更容易读 例如 free  程序读/proc/meminfo  并将给出的字节数转换为千字节(并
增加了一些信息)
Linux  管理员手册(3)--磁盘和其他存贮介质的使用
安装和升级系统时 需要对硬盘做很多工作 必须在硬盘上做文件系统 使文件能存在其
上 并为系统不同的部分保留空间
    本章说明所有这些初始化工作 通常 一旦你建立了系统 就不必再做这些工作(除了
使用软盘) 如果你要增加一个新硬盘或更好地调整你的硬盘的使用 那么可能回到这一章
管理磁盘的基本任务有
    格式化磁盘 这为磁盘进入使用做一些工作 比如检查坏扇区 (现在多数硬盘无须格
式化 )
    给硬盘分区 如果想用于互相不干扰的几件事 分区的一个原因是要在一个硬盘上存不
同的操作系统 另一个原因是将用户文件和系统文件分开 以简化备份并在系统崩溃时有助
于保护系统文件
    在每个磁盘或分区上建立合适类型的文件系统 然后文件就可以在其上产生和存取 在
你建立文件系统前 磁盘对 Linux 没有意义
    将不同的文件系统安装起来形成一个单独的树结构 按需要可以自动或手工完成  (手
工安装的文件系统通常还要手工 unmount)
    5 章包括虚拟内存和磁盘 cache 的信息 使用磁盘应该知道这些
    本章说明对硬盘 软盘 CDROM 和磁带机应该知道什么
2 种设备
    UNIX 及 Linux 识别 2 类设备 随机存取的块设备(如磁盘)和字符设备(如磁带和串行
线) 有些是串行的 有些是随机存取的 文件系统支持的每种看来是个设备文件 当读写
设备文件时 数据与设备联系 这样没有必要为存取设备编制特别的程序(程序不直接获取
中断或读取串口) 例如 发送文件到打印机 只需
    $ cat filename > /dev/lp1
$
12     文件内容就被打印了(当然 文件必须是打印机能理解的格式) 当然 因为不应该让多
人同时 cat 文件到同一打印机 一般用特定的程序发送文件去打印(通常是 lpr ) 这个程序
能确保同时只有一个文件被打印 并自动在完成后发送下一个 多数设备有类似需要 实际
上 根本很少需要关心设备文件
    因为设备被视为文件系统中的文件(在/dev  目录中) 很容易看到存在哪些设备文件
使用 ls 或其他的适当的命令即可 在 ls -l  的输出中 第一列包含文件类型和权限 例如
查看我系统上的一个串行设备
    $ ls -l /dev/cua0
crw-rw-rw- 1 root uucp 5, 64 Nov 30 1993 /dev/cua0
$
第一列第一个字符 即 crw-rw-rw-中的 c 告诉用户文件的种类 这是一个字符设备 一
般文件的第一个字符是"-" 目录是"d" 块设备是"b" 更多的信息见 ls man 页
    注意即使设备没有安装 一般所有设备文件都存在 因此有/dev/sda  文件并不意味着
你真的有个 SCSI 硬盘 有所有的设备文件使安装程序更简单 也易于增加新硬件(无须再
为产生新设备的设备文件找出正确的参数)  
硬盘
    本节介绍有关硬盘的术语 如果你已经知道这些项目和内容 可以跳过本节
    硬盘包括一到数片盘片 platters 其一个或两个面 surfaces 涂有磁性材料用于记录数
据 每面有一个读写头 read-write head 用于读写数据 盘片有一个共同的轴 典型的旋转
速度是每分钟 3600 转 高性能的硬盘转速可能更高 磁头可沿着盘片的半径移动 磁头移
动加上盘片旋转可以使词头存取磁盘表面的任何一个位置
    处理器(CPU)和实际磁盘通过磁盘控制器 disk controller 通讯 这使计算机其他部分不
必知道如何使用驱动器 因为不同磁盘的控制器可以做成对计算机其他部分相同的接口 这
样 计算机只要说"嗨 磁盘 给我我要的东西" 而不是用一串长而复杂的电信号来移动磁
头到正确的位置 并等正确的位置到了磁头下后再做那些不愉快的工作  (实际上 到控制
器的接口仍然很复杂 但比没有好多了 )  控制器还可以做一些其他的事 比如缓冲 或自
动坏扇区替换等 用电信号控制操作机械部件
    以上只是理解硬件所需的 还有其他好多工作 比如马达旋转磁盘 移动磁头 但这都
与理解硬盘工作原理无关
    磁盘表面通常被分为同心圆环 叫磁道 tracks 磁道又被分为扇区 sectors 用这样分
来将磁盘定位 用于为文件定位磁盘空间 要在硬盘上找到给定的位置 可能?quot;3 面 5
道 7 扇区" 通常所有磁道有相同的扇区数 但也有硬盘在外圈磁道放较多的扇区(所有扇区
用同样大小的物理空间 这样在较长的外圈磁道可以容纳更多的数据) 一般一个扇区容纳
512 字节数据 磁盘不能处理比一个扇区更小的数据量
13     每个面以相同的方式分为磁道和扇区 这意味着当一个磁头在某个磁道时 其他磁头也
在相应的位置 所有相同位置的磁道组成柱面 cylinder 磁头从一个磁道(柱面)移动到另一
个需要花时间 所以将经常要在一起存取的数据(如一个文件)放在一个柱面里 这改善了性
能 当然不可能完全作到 文件被放在几个相分离的位置叫碎片 fragmented
    磁盘的面(或头 实际是一样的) 柱面 扇区数各不相同 硬盘这些数目叫硬盘参数 g
eometry 硬盘参数通常存在一个特定的 由电池供电的存储区中 叫 CMOS RAM 操作
系统在引导启动或驱动器初始化时可以从那里得到硬盘参数
    不幸的是 BIOS 有一个设计限制 就是不能在 CMOS RAM 中定义大于 1024 的磁道
数 这对大硬盘来说就太小了 为了克服这个问题 硬盘控制器在磁盘参数上做了一个欺骗
用地址转换 translates the addresses 使计算机接受 例如 一个硬盘可能有 8 个磁头 2
048 个磁道 每磁道 35 个扇区 其控制器可以对计算机谎称它有 16 个磁头 1024 个磁道
每磁道 35 个扇区 这样就没有超过磁道数的限制 地址转换将磁头数减半 磁道数加倍后
传给硬盘 实际的算法可能更复杂 因为数量可能不象我们在这里假设的这么好(但这不影
响我们理解原理) 这个转换在操作系统来看产生了错觉 并可能影响操作系统对把所有数
据存在相同柱面的企图受到影响
    转换只是 IDE 硬盘的问题 SCSI 硬盘使用连续的扇区号(即控制器将连续的扇区好转
换成磁头 柱面 扇区的三参数组),对 CPU 与控制器的通信使用完全不同的方法 因此不
会有这个问题 注意 计算机可能根本不知道一个 SCSI 硬盘的实际参数
    由于 Linux 经常不知道一个硬盘的真正参数 其文件系统也不试图将文件存在一个柱面
里 而是争取给一个文件分配连续编号的山区 这样能得到类似的性能 对于控制器上有 c
ashe 或控制器能自动预取的硬盘 情况将更复杂
    每个硬盘表现为一个单独的设备文件 通常只能有 2-4 个 IDE 硬盘 这就是 /dev/hda ,
 /dev/hdb , /dev/hdc ,  和 /dev/hdd  SCSI 是 /dev/sda , /dev/sdb ,  等等 其他硬盘
类型有类似的命名约定 更多的信息见[Anv] 注意硬盘的设备文件给出整个硬盘的存取
而不是分区(下面讨论的) 因此如果不小心可能搞乱分区或数据 硬盘的设备文件只在存取
主引导扇(也将在下面讨论)时使用
软盘
    软盘的一面或两面涂有和硬盘类似的磁性介质 软盘自己没有读写头 读写头在驱动器
上 软盘相当于硬盘的一张盘片 但可移动 一个驱动器可以存取不同的软盘 而硬盘则是
一个独立的单元
    如同硬盘 一张软盘也分为磁道和扇区(软盘 2 面上的相同的磁道组成柱面) 但数量要
比硬盘少得多
    软驱通常可以使用几中不同的盘片 例如 一个 3.5'软驱可以使用 720KB 和 1.44MB
的软盘 因为软驱操作有些不同 而操作系统必须知道软盘的容量 所以软驱有许多设备文
14 件 每个都与软驱和软盘种类有关 因此 /dev/fd0H1440  是第一个软驱(fd0) 必须是 3.
5'软驱 使用 3.5'高密度软盘(H) 容量是 1440KB(1440) 即普通的 3.5'HD 软盘 软盘设
备的命名约定见[Anv]
    软驱的名字是复杂的 因此 Linux 有一个特定的软驱设备类型 能自动检测软驱中软盘
的种类 它使用不同的软盘类型试图读取新插入的软盘的第一个扇区 直到找到正确的一个
这自然要求软盘是已经格式化过的 自动设备叫/dev/fd0  /dev/fd1  等
    存取软盘的自动设备的参数可用程序 setfdprm  设定 这可使你使用不是通常容量的软
盘 例如有非标准扇区数的软盘 或自动检测由于某种原因失败或适当的设备文件丢失
    Linux 除了所有标准的 还能处理许多非标准的软盘格式 这有时需要特殊的格式化程
序 我们现在先跳过这些软盘格式 同时你可以查看/etc/fdprm  文件 它定义了 setfdprm
识别的设定
    操作系统必须知道软驱何时换了软盘 例如 以免使用上一张软盘的 cache 数据 不
幸的是 当用于此的信号线断了或不好时 当在 MSDOS 中使用时 这并不总有效 如果
你曾遇到过软驱的这种怪异的问题 可能是这个原因 解决这个问题的唯一方法是修理软驱
CD-ROM
    CD-ROM 驱动器使用一个光学可读的塑料涂布的盘片 信息记录在盘片表面 的从中心
的边沿的螺旋型小坑上 驱动器发出一束激光来读盘 当激光射到小坑上 激光以一种方式
反射 当它射到光滑表面上 它以另一种方式反射 这很容易地编码成 bit 组成信息 其
他很容易 不过是机械
    CD-ROM 驱动器比硬盘慢 典型的硬盘的平均寻道(seek)时间小于 15 毫秒 而快速的
CD-ROM 驱动器要花零点几秒 实际数据传输率则相当快 在数百 KB/s 速度慢使 CDR
OM 驱动器不能代替硬盘使用  (有些 Linux distributions 提供"live" CD-ROM 文件系统 使
之不必拷贝文件到硬盘 使安装简单并节约了许多硬盘空间) 虽然是可能的 要安装新软
件 CD-ROM 很好 因为在安装时速度并非最重要的
    有多种方法在 CDROM 上安排数据 最流行的是国际标准化组织定义的 ISO9660 这
个标准定义了一个最小的文件系统 甚至比 MSDOS 更粗糙 这样 由于它是这么小 所
有操作系统都可以将它映射到自己的系统
    不同 UNIX 不能使用 ISO9660 文件系统 因此开发了对这个标准的一个增强 叫 Roc
k Ridge 增强 Rock Ridge 允许长文件名 符号连接和许多其他优点 使 CD-ROM 更象
UNIX 文件系统 同时 Rock Ridge 文件系统仍然是一个有效的 ISO9660 文件系统 使非
UNIX 一样可以使用 Linux 同时支持 ISO9660 和 Rock Ridge 增强 增强被自动识别和
使用
    文件系统只是一部分 许多 CD-ROM 包含的数据需要特定的程序存取 而多数程序不
能运行在 Linux 下  (当然 可能运行在 Linux 的 MSDOS 仿真器 dosemu 下)
15     CD-ROM 驱动器通过相关的设备文件存取 有多种方法将 CDROM 连接到计算机 S
CSI 声卡或 EIDE 要完成这的硬件 hacking 工作超出了本书的范围 但连接方法决定了
设备文件 指导见[Anv]
磁带
    磁带驱动器使用磁带 类似 音乐用的盒带 磁带是串行的 即如果要得到给定部分的
数据 必须经过所有部分 磁盘可以随机存取 即可以直接跳到磁盘上的某个部分 串行存
取的磁带当然慢了
    另外一方面 磁带相当便宜 因为无须快速 也容易做得很长 因此可以容纳大量的数
据 这使磁带很适于如归档 备份等无须高速的 但需要低成本和大容量的事情
格式化
    格式化在磁介质上写用于标记磁道和扇区的标志的过程 磁盘格式化前 其磁表面是完
成的一块 格式化后 混沌变为秩序 建立的磁道 划分了扇区 实际细节并非准确地这样
但重要的是 磁盘不经过格式化是不能使用的
    这里术语有些模糊 MS-DOS 中 格式化(format)这个词还包括了产生文件系统的过程
(下面将讨论的) 这两个过程经常一起使用 尤其是软盘 当必须区分时 真正的格式化被
称为低级格式化 low-level formatting 而建立文件系统被成为高级格式化 high-level forma
tting 在 UNIX 圈中 这两者叫格式画 format 和建立文件系统 make a filesystem 本书中
也这样称
    IDE 硬盘和一些 SCSI 硬盘实际上厂商已经做了格式化 并无须重复 因为多数人无须
关心它 实际上 格式化硬盘可能反而不好 比如因为硬盘可能需要用特定的方法格式化使
坏扇区被自动替换
    磁盘经常需要特定的程序来格式化 因为驱动器的格式化逻辑的接口每个驱动器都不一
样 格式化程序经常在控制器 BIOS 上 或用 MSDOS 程序提供 这都不太容易在 Linux
中使用
    格式化中可能会发现磁盘的坏点 叫坏块 bad blocks or  bad  sectors 这有时由驱动
器自己处理 但有时 如果坏块太多 需要一些工作来避免使用磁盘的这部分 The logi
c to do this is built into the filesystem;  下面将说明如何增加这些信息到文件系统 另
外 产生一个只覆盖这些坏的部分的小分区也是一个办法 如果坏区较大 这可能是个好办
法 因为文件系统有时难以处理大量的坏区
    软盘格式化使用 fdformat  软盘设备使用给定的参数 例如下面的命令在第一个软驱
中格式化一张高密度 3.5'软盘
    $ fdformat /dev/fd0H1440
16     Double-sided, 80 tracks, 18 sec/track. Total capacity 1440 kB.
Formatting ... done
Verifying ... done
$
注意 如果想使用自动检测设备(如/dev/fd0 ) 必须用先 setfdprm  设定参数 要得到
与上面一样的结果 可以这样
    $ setfdprm /dev/fd0 1440/1440
$ fdformat /dev/fd0
Double-sided, 80 tracks, 18 sec/track. Total capacity 1440 kB.
Formatting ... done
Verifying ... done
$
选择与软盘类型相符的正确的设备文件通常更方便 注意 比软盘设计格式化更多的信
息容量是没有意义的
    fdformat 也将验证软盘 例如检查坏块 它在坏块试验几次(你通常能听到 驱动器的
噪声很明显) If the floppy is only marginally  bad (due to dirt on the read/write hea
d, some errors are false signals), fdformat  可能没事 而真正的错误可能退出有效过程
核心把发现的每个 I/O 错误打印 log 信息 送到控制台 或者 如果使用了 syslog  也送
到/usr/adm/messages  文件 fdformat  自己不说明哪里出错(也不必考虑 软盘很便宜 坏
了就扔)
    $ fdformat /dev/fd0H1440
Double-sided, 80 tracks, 18 sec/track. Total capacity 1440 kB.
Formatting ... done
Verifying ... read: Unknown error
$
badblocks  命令可用于查找任何磁盘或分区的坏块(包括软盘) 它不格式化磁盘 因此
可以用于检查存在的文件系统 下面的例子检查出一张 3.5'软盘上的 2 个坏块
    $ badblocks /dev/fd0H1440 1440
718
719
$
badblocks  输出发现的坏块的块号 多数文件系统可以避免这样的坏块 他们维护一个
已知的坏块列表 在文件系统建立时初始化 并可以在以后修改 初始的坏块查找可由 mk
fs  命令完成(它初始化文件系统) 以后可以用 badblocks  来检查 新的块可以用 fsck 加入
后面我们将说明 mkfs  和 fsck
17     许多新型的硬盘自动发现坏块 并企图用一个特定的 保护的好块来代替它 这对操作
系统是不可见的 这种特征应该在硬盘手册的文档中 如果你好奇的话 但即使这样的硬盘
也可能失败 如果坏块数量太大的话 虽然如果这样 那硬盘就基本上不能用了
分区
    一个硬盘可分为几个分区 每个分区好象是单独的硬盘 这样 你如果只有一个硬盘
却想安装 2 个操作系统 你可以把这个硬盘分为 2 个分区 每个操作系统任意使用自己的
分区而不干扰另一个 这种方法 2 个操作系统可以在同一硬盘上和平共处 如果没有分区
你只能为每个操作系统购买一个硬盘
    软盘不分区 这没有技术原因 只因为太小 没有必要 CDROM 一般也不分区 因为
作为一个大盘更易于使用 而且很少有多操作系统的需要
MBR(主引导记录),  启动扇区和分区表
    一个硬盘如何分区的信息存在它的第一个扇区(即第一面第一道第一扇区) 这个第一扇
区是硬盘的主引导记录(MBR) 这是计算机启动时 BIOS 读入和启动的扇区 主引导记录包
括一段小程序 读入分区表 检查哪个分区是活动分区(即启动分区) 并读入活动分区的第
一个扇区 该分区的启动扇区(MBR 也是启动扇区 只不过因为其特殊地位 所以使用特殊
的名字) 这个启动扇区包括另一个小程序 读入这个分区(假设是可启动的)上操作系统的第
一个部分 然后启动它
    这个分区方案不是内置于硬件和 BIOS 的 只是许多操作系统遵循的约定 并非所有的
操作系统都遵循这个约定 也有例外 有些操作系统支持分区 但他们占领硬盘上的一个分
区 然后使用他们自己的内部分区方法管理这个分区 较新的操作系统可以和其他操作系统
和平共处(包括 Linux) 而无需特殊的措施 但不支持分区的操作系统无法在同一硬盘上与
其他操作系统共存
    为安全预防 最好先在纸上写下分区表 这样在错误发生时不会丢失你的文件 (可以
使用 fdisk  修复坏的分区表)  )相关信息可用 fdisk -l  命令给出:
    $ fdisk -l /dev/hda
Disk /dev/hda: 15 heads, 57 sectors, 790 cylinders
Units = cylinders of 855 * 512 bytes
Device Boot Begin Start End Blocks Id System
    /dev/hda1 1 1 24 10231+ 82 Linux swap
/dev/hda2 25 25 48 10260 83 Linux native
/dev/hda3 49 49 408 153900 83 Linux native
/dev/hda4 409 409 790 163305 5 Extended
/dev/hda5 409 409 744 143611+ 83 Linux native
/dev/hda6 745 745 790 19636+ 83 Linux native
18     $
扩展和逻辑分区
    PC 硬盘的最初的分区方案只允许 4 个分区 实际使用中这太少了 比如有人想装多于
4 个操作系统 (Linux, MS-DOS, OS/2, Minix, FreeBSD, NetBSD, Windows/NT 等),或有
时一个操作系统有多个分区更好 例如由于速度的原因 Linux 的对换区最好单独使用自己
的分区 而不是在主 Linux 分区中(下文详述)
    为克服这个设计问题 发明了扩展分区 这个方法允许将基本分区分为若干子分区 因
而被子分区的基本分区称为扩展分区 而子分区称为逻辑分区 他们的表现类似基本分区
但产生方法不同 他们之间没有速度差别
    硬盘的分区结构可能类似 这个硬盘被分为 3 个基本分区 第二个被分为 2 个逻辑分
区 部分硬盘根本没有分区 硬盘是一个整体 每个基本分区有一个启动扇区
分区种类
    分区表(MBR 和扩展分区里都有)中 对每个分区 有一个字节指出分区种类 这试图
确定使用该分区的操作系统 或用于何操作系统 其目的是避免 2 个操作系统使用同一分
区 可实际上 操作系统并不真的注意分区种类字节 例如 Linux 根本不管它是什么 较
坏的情况是 有些操作系统错误地使用它 例如有些版本的 DR-DOS 忽略了它的最高位(M
SB) 而其他一些系统则不是
    没有一个标准化组织定义分区种类字节每个值的意义 但一些共同接受的值包括在表
4.1 中 相同的列表可以通过 Linux 的 fdisk  命令得到
给硬盘分区
    有许多产生和删除分区的程序 许多操作系统自带 最好使用其自带的 除非要做一些
它不能作到的 许多这种程序叫 fdisk ,  包括 Linux,  或其变种 Linux  fdisk  的使用细节可
见其 Man 手册 cfdisk  命令类似 fdisk ,  但有更好的用户界面(全屏的)
    使用 IDE 硬盘时 启动分区(带可启动核心映象文件的分区)必须全在前 1024 个柱面内
这是因为硬盘通过 BIOS 启动(在系统进入保护模式前) 而 BIOS 不能处理多于 1024 柱面
有时也可能使用部分在前 1024 柱面的启动分区 这要求所有用 BIOS 读入的文件都在前 1
024 柱面内 由于这难与安排 因此这是个很差的主意 你不可能知道什么时候核心升级或
磁盘碎片整理会导致系统无法启动 因此 应该确认你的启动分区完全在前 1024 柱面内
    事实上 一些新版的 BIOS 和 IDE 硬盘可以处理多于 1024 柱面 如果你有这样一个系
统 你可以忘却这个问题 如果你不能确认 还是把启动分区放在前 1024 柱面内
    每个分区拥有一块连续的扇区 因为 Linux 文件系统使用 1 kB 的块 即 2 个扇区 所
以奇数个扇区会导致最后一个扇区不能使用 这不会有什么问题 但不好 有些版本的 fdi
19 sk  会对此给出警告
    改变分区大小一般要求首先备分此分区想保留的所有东西(为防万一 最好备分整个硬
盘) 然后删除此分区 产生新分区 最后回存所有东西到新分区 如果是扩大分区 你可
能需要调整相邻分区的大小(并备分 回存)
    由于改变分区大小是如此痛苦 最好一次就确定 或拥有一个有效而易用的备分系统
如果你通过无须太多人工干预的介质安装(例如 CDROM 而不是软盘) 那么开始可以比较
容易地玩玩各种设置 因为你无须备分什么数据 改几次分区大小不会太过痛苦
    有个 MSDOS 的程序叫 fips ,  可以无须备分和回存地改变 MSDOS 分区的大小,  但对
其他文件系统 备分回存还是必须的
设备文件和分区
    每个分区和扩展分区有自己的设备文件 这些文件的命名规定是在整个盘的名字加分区
号 并约定 1-4 是基本分区(不管真的有几个基本分区) 5-8 是逻辑分区(不管它在哪个基本
分区中) 例如 /dev/hda1  是第一个 IDE 硬盘的第一个基本分区 而/dev/sdb7  是第二个 S
CSI 硬盘的第三个扩展分区 设备列表 [Anv]给出更详细的信息

相关栏目:

网友评论: