设置 UNIX 文件系统
Unix® 操作系统允许把磁盘数据划分为多个卷。但是,仅仅掌握这种方法是不够的;要想有效地使用这种功能,必须了解文件在 UNIX 系统上的组织方式以及采用这种组织方式的原因。本文讨论为什么应该使用多个卷。
创建分区、逻辑卷和文件系统
在不同的 UNIX 变体版本上,创建分区和逻辑卷的具体方法差异很大,所以您应该参考系统的文档。但是,大多数 x86 系统使用主引导记录 (MBR) 分区,这个分区通常是用 fdisk 程序创建的。GNU Parted 程序是一种用于创建分区的更灵活的工具(见 参考资料 中的链接);它支持调整分区大小等高级特性,它还可以使用比大多数 fdisk 程序新的方案创建分区。
在 Linux® 等系统上,逻辑卷是在普通分区之上创建的,因此大大增加了复杂性。可能需要创建一个或多个分区,用这些分区创建逻辑卷,最后在逻辑卷中创建文件系统。
在不同的 UNIX 变体版本上,创建文件系统的方法各不相同,但是最常用的工具是 mkfs 和 newfs。通常,需要向程序传递要在其中创建文件系统的卷的名称,比如:
mkfs /dev/sda3
或
newfs /dev/da0s4e
UNIX 文件系统树
UNIX 使用一个统一的目录树。根目录是这个树的根,由前向斜杠 (/) 表示。每个子目录都是树的分支。尽管在不同的 UNIX 变体之间有差异,但是 UNIX 目录树最重要的特性是相似的,见 表 1。
表 1. 常见的 UNIX 目录
目录用途/etc存储系统配置文件。/bin这个目录保存必须在任何时候都可以访问的二进制代码,以及一般用户经常运行的程序。 /sbin这个目录与 /bin 相似,但是这些二进制代码只供系统管理员使用。 /lib这里保存重要的库文件。/boot这个目录保存系统引导文件。这些文件可能包括内核、引导装载器和相似的文件。 /usr这个目录树包含扩展的系统文件,包括它自己的 /usr/bin、/usr/sbin 和 /usr/lib 目录。基本的系统操作不需要这些文件,但是包含对于用户很重要的程序,比如文字处理程序、Web 浏览器、图形程序、服务器程序等等。 /usr/local这个目录树把本地编译的程序集中在一个目录中,这可以防止包管理工具或系统重新安装过程破坏这些程序。 /opt第三方商业应用程序通常保存在这个目录中。/var这里保存短期存在或经常变化的系统文件,比如日志文件、邮件队列和数据库。 /home 或 /users每个用户在这个目录中拥有一个子目录,这个子目录作为用户的主目录。 /root这个目录是根用户的主目录。/tmp这个目录是所有用户使用的临时空间。/mnt 或 /media这些目录或它们的子目录包含可移除的媒体,比如 DVD-ROM 或 Flash 磁盘,但是一些系统把可移除媒体放在其他地方。 /devUNIX 设备文件放在这个目录中,程序可以通过设备文件访问硬件设备。
表 1 并不全面,但是涵盖了大多数 UNIX 系统上最重要的目录。其中一些目录可以放在它们自己的卷中。但是,一些目录不应该放在单独的卷中,尤其是 /etc、/bin、/sbin、/lib 和 /dev。UNIX 系统要依赖这些目录的内容执行关键任务,包括挂装其他卷。例如,mount 命令很可能放在 /bin 中,而 /dev 包含挂装卷所需的设备文件。(一些 UNIX 变体创建动态的 /dev 文件系统,所以它可以是单独的文件系统,但不能是单独的卷)。
表 1 中的其他目录可以放在自己的卷中。但是,这并不意味着对于每个目录都有必要这样做。下面讨论在哪些情况下设置单独的卷是最有意义的。
通过创建卷提高性能
创建单独的卷的原因之一是为了提高系统性能。这里说的性能 可以是系统速度、存储空间的使用效率或其他因素。卷可以在几个方面提高性能:
一些文件系统比其他文件系统快得多,但是性能因任务而异。例如,一个文件系统在访问少量大文件时速度是最快的,但是对于访问大量小文件,性能可能不是最好的。
文件系统在空间的使用效率方面有差异。要兼顾总体文件系统开销和与各个文件相关的存储效率问题。
所有文件系统都有大小限制。尽管一些文件系统具有几 TB 的分区和文件大小限制,但是其他文件系统的限额比较低。如果必须使用这样的文件系统,可能有必要使用多个卷。
许多比较老的文件系统缺少日志,这常常意味着在系统崩溃之后需要长时间的磁盘检查。比较新的日志文件系统简化了系统重新启动时的磁盘检查过程。如果可能的话,应该只使用日志文件系统。如果对于任何卷需要使用非日志文件系统,那么这个卷应该尽可能小。
如果您的计算机要引导多个操作系统,可能需要创建一个用于在操作系统之间交换数据的卷,或者支持从一个操作系统访问另一个操作系统的文件。
如果计算机有多个物理硬盘,可能必须为每个磁盘创建至少一个卷。(但是,一些独立磁盘冗余阵列 [RAID] 和 LVM 实现允许创建跨多个磁盘的卷)。如果磁盘在大小或速度方面有差异,可以通过设置卷尽可能利用磁盘的特性,比如把不经常访问的数据放在比较慢的物理磁盘上。
这些因素会相互影响,找到最佳的卷配置可能很困难。应该先对可用的低层文件系统的性质做一些基本研究。然后考虑这些性质对要存储的数据有什么影响。是否有存储大量小文件的目录?是否有存储大型顺序访问的文件(比如 MPEG 视频文件)的目录?是否需要频繁地访问某些文件(比如数据库),或者对时间的要求很严格?是否能够把不经常使用的文件存储在比较慢的物理磁盘上。
通过创建卷提高安全性
安全性是创建多个卷的另一个主要原因。这里说的文件系统安全性有两方面的意义:防止更广泛的系统问题破坏文件系统,以及防止计算机受到由文件系统造成的问题的影响。
有几种系统问题可能影响文件系统,使用多个卷有助于缓解它们的影响:
如果操作系统缺陷、磁盘坏扇区或某些超级用户失误会破坏文件系统,使用多个卷可以把破坏的范围限制在一个卷。丢失一个卷的数据总比丢失计算机上的所有数据好。
如果通过创建多个卷把不需要经常写的目录放在它们自己的卷上,就可以把这些卷挂装为只读的,这可以降低意外损坏这些文件的风险。例如,在大多数 UNIX 实现中,很少需要写 /usr 目录树,所以可以把它挂装为只读的。
在某些极端情况下,可以卸载一个卷以禁止访问它。一些管理员喜欢对 /boot 目录采取这种措施。在引导操作系统之后,通常不再需要访问这些引导文件,所以卸载 /boot 卷可以保护它。
一定要注意一点:这些安全改进并不是完美的。磁盘错误、管理员的失误和其他问题可能会破坏关键的磁盘结构(比如分区表),从而影响一个磁盘上的所有卷。使用卷并不能替代磁盘备份!
卷在安全性方面的另一个优点是,它们有助于限制单一卷上发生的问题对整个系统的影响。例如:
如果某个文件(或一组文件)增长得太大了,就可能破坏整个计算机。使用卷可以降低这种风险。例如,如果用单独的 /home 卷存储用户文件,当这个卷被写满时,计算机写日志文件的功能不会受到影响。
某些文件系统支持高级的安全特性,比如访问控制列表 (ACL)。通过使用这些特性,可以提高卷的安全性。
总之,卷在安全性方面的优势是使用多个卷的重要原因之一。您应该认真考虑如何更好地利用这些特性。在通常情况下,把用户文件与系统的其余部分分隔开是最重要的。您系统的一些具体情况也可能要求设置一个或多个额外的卷,比如用单独的卷存储邮件假脱机文件或数据库。
使用网络卷
到目前为止,我在描述 UNIX 文件存储时都是假设存储设备是本地硬盘。但是,实际情况并非总是如此;所有 UNIX 变体都支持网络磁盘存储。Network File System (NFS) 是传统的 UNIX 文件共享解决方案;但是其他解决方案也很常见,比如 Server Message Block/Common Internet File System (SMB/CIFS) 能够把 Microsoft® Windows® 和 UNIX Samba 服务器联系起来。在大多数情况下,可以把网络卷作为本地卷对待;但是,网络卷有一些独特的特点。
网络卷的最大优点是可以从多台计算机方便地访问相同的文件。例如,可以设置一个 NFS 或 Samba 服务器来存储多位项目团队成员使用的数据文件。甚至可以在这种服务器上存储用户的主目录。
但是,可能需要使用网络卷的不仅仅是用户数据。如果网络包含许多相同或几乎相同的计算机,那么可以从一台计算机导出 /usr 目录(或其部分内容),供所有计算机共享。这能够简化系统维护 — 只需在一台服务器计算机上升级软件,就会自动地更新所有客户机上的软件。但是,这种方法也有一些问题。一个问题是,如果软件升级的影响范围超出导出的文件系统,就需要特别小心,因为仍然需要修补客户机上的软件。另一个问题是访问共享文件系统的速度会降低。这种方法还会产生单一故障点:如果服务器崩溃了,网络上所有依赖于它的计算机也会停止工作。
制定卷计划
掌握了前面提供的信息之后,就可以开始计划新 UNIX 系统的布局方案或调整现有的系统。(重新配置现有的系统很可能非常麻烦,因为这需要备份和恢复数据、把数据传输到新的物理磁盘或者使用工具动态地调整现有的卷或分区)。
创建卷的最佳方式取决于您的需求。建议您考虑哪些数据是最重要的,以及通过使用某些文件系统特性或与系统的其余部分分隔开,是否能够给某些目录带来好处。是否有存储许多非常大或非常小的文件的目录,它们可能能够受益于某种低层文件系统?是否有敏感数据,具有额外安全特性的文件系统可能能够进一步保护它们?在其他目录中存储的文件导致磁盘满错误时,是否应该防止某些目录受到影响?如果出现上述情况,就应该考虑把目录布置在单独的分区上。
常常把用户的主目录 (/home 或 /users) 和 /usr 目录放在它们自己的卷中。经常隔离的其他目录包括 /boot、/tmp、/var 或其子目录、/usr/local 和 /opt。但是,这个列表并不全面;如果有合理的理由,也可以隔离其他目录。
但是,不要创建过多的卷,尤其是在使用分区而不是逻辑卷的情况下。如果创建太多的卷,很可能会有一个或多个卷与需求不匹配(太大或太小),这就需要调整卷的大小,或通过创建符号链接把数据存储在其他卷上。如果您不确定或经验不足,最好只使用比较少的卷;但是,随着经验和信心的增加,卷会成为您的强大工具。
结束语
通过利用 UNIX 处理文件系统和卷的方法可以提高计算机的安全性和性能。可以通过创建单独的卷优化文件系统的选择和选项。创建单独的卷还可以保护数据免受系统问题的损害,以及保护系统免受数据问题的损害。通过添加网络卷,可以提供简便的用户间数据交换或简化相似的连网计算机的维护。充分了解 UNIX 系统在目录中放置数据的方式,有助于为系统制定卷配置计划,从而优化性能和安全性。