面向 Windows 系统管理员的 Linux,第 1 部分: 管理和监视扩展文件系统

使用您的 Windows 技能深入了解 Linux 最流行的磁盘文件系统

Windows 和 Linux 使用不同的文件系统架构。幸运的是,您的 Windows 经验可让您快速习惯 Linux 扩展文件系统的管理和监视。本文将帮助您了解 Linux 上的扩展磁盘文件系统家族。

Tracy Bost, 顾问及培训师, 自由职业

作者照片 - Tracy BostTracy Bost 是一名经验丰富的软件开发人员和系统工程师。他的专长是企业应用程序集成。他过去曾担任过抵押行业标准维护组织 (Mortgage Industry Standards Maintenance Organization, MISMO) 业务规则工作组的联合主席和 RuleML2010 行业标准的委员会联合主席。他曾在多个行业任职,这些行业包括抵押贷款、房地产和非营利行业。



2012 年 3 月 05 日

关于本系列

本系列文章以您在 Windows 环境中工作的知识为基础,提高您的 Linux 系统管理熟悉程度和技能。要充分掌握本系列文章的内容,则需要拥有使用 Windows® 环境中的 NTFS 文件系统的经验,并了解 GNU/Linux® shell 环境的基本知识。如果有一台能够有效运行的 Linux 计算机来探索这些文章中的概念和示例,那么这会对您很有帮助。

与 Linux 的许多方面一样,您也可以选择文件系统类型。最有可能的是,您将使用通过一个扩展文件系统所设计的 Linux 分区,因为它们在各种 Linux 发行版中得到了统一的支持,提供了一个现成的强大解决方案。

扩展文件系统可追溯到 Linux 的早期时代。此文件系统消除了最初的 2GB 限制,但也容易产生大量碎片。因此,在第一个扩展文件系统版本发行不久,就开发出了第二个扩展文件系统 (ext2) 来弥补一些限制,比如将大小增加到 4TB。Ext2 很快成为了 Linux 文件系统的事实标准。因为 Linux 已经演化,所以它的文件系统也发展成为我们现在所用的版本:第三代扩展文件系统 (ext3) 和第四代扩展文件系统 (ext4)。

Ext3 和 ext4

磁盘文件系统与扩展文件系统

本文主要探讨如何使用 Linux 上的扩展文件系统家族。Linux 支持许多磁盘文件系统类型,比如 XFS、ReiserFS、B 树文件系统(B-tree file system,Btrfs)和 IBM 日志文件系统(Journaled File System 和 JFS)等。您可能会发现其中一个文件系统比扩展文件系统更适合,具体情况取决于您的环境和系统用途。但是了解扩展文件系统是一个不错的开端,因为大部分 Linux 发行版默认情况下都使用了 ext3 或 ext4。

Ext3 是较老的 ext2 的下一个演化版本,至今仍被广泛使用。相对于 ext2,它的一个主要优势是日志记录功能。Ext3 向后兼容 ext2,所以您无需重新分区即可将 ext2 安装转换为 ext3。使用具有根特权的帐户并键入 tune2fs -j 通常就可以完成此项工作。例如,如果 ext2 文件系统位于第一个硬盘的第二个分区,那么可以键入 tune2fs -j /dev/sda2 来转换它。

除了日志记录功能,ext3 还在 ext2 基础上进行了一些改进,比如更快的写入速度和健壮性。没有日志记录功能,在意外断电或系统崩溃时,ext2 会遇到不干净的系统关闭。完成引导之后,必须检查每个 ext2 系统之后才能挂载它们。对于如今的大型文件系统,一致性检查所花的时间在许多环境中都是让人无法接受的,因为它严重限制了可用性。如果使用日志记录功能(NTFS 文件系统具有日志记录功能),则会将写入到磁盘的数据标记为完整或不完整数据。如果发生不干净的系统关闭,那么只会检查标记为不完整的文件,这样就消除了检查整个文件系统的需要。使用 ext3,您可以选择以下 3 种日志模式之一:

  • 日志。执行完整数据日志记录。所有数据(不仅仅是元数据)会首先写入到日志(最慢的模式)。
  • 顺序。在技术上讲,只记录元数据,但可通过首先写入到数据块来帮助解决写回出错问题。
  • 写回。没有数据记录功能,仅记录元数据(最快的模式)。

Ext4 是扩展文件系统目前的演化版本,它向后兼容 ext2 和 ext3。Ext4 主要在 ext3 的基础之上改进了健壮性和速度。Ext4 自 Linux 内核版本 2.6.28 推出时就是可用的。

表 1 给出了最流行的 Linux 文件系统的一些主要特征。如果计划设计分区模式或转换现有分区,理解这些特征会有所帮助。

表 1. 扩展文件系统的演化
文件系统
扩展文件系统(约 1991 年推出)最早的 Linux 文件系统,会产生大量碎片
Ext2(约 1993 年推出)非常健壮,但没有日志记录功能;在系统崩溃或意外关闭后,会在整个文件系统上运行 fsck
Ext3(约 2001 年推出)可包含最多 32,000 个子目录;引入了日志记录功能;向后兼容 ext2
Ext4(约 2008 年推出)可包含最多 64,000 个子目录;在现有的 ext3 上进行了改进,可以选择完全关闭日志;向后兼容 ext3 和 ext2

理解数据的存储方式

Linux 文件系统存储两种类型的数据。一种是用户数据,这是用户(包括您自己)使用的正常文件和目录。文件可能具有 4 种类型:常规文件、链接、FIFO(即管道)和套接字。

您可能听说过 “Linux 中一切都是文件或进程。” 这句话道出了 Linux 中没有注册表概念的事实。相反,所有内容都存储在一种文件类型中。文件系统存储的另一种数据类型为元数据,这是索引节点,通常称为 inode。inode 是 Linux 对文件属性建立索引的方式。每个文件有一个 inode,这些 inode 通常包含有关文件的信息,比如:

标准用户帐户和根特权命令

对于本文中的清单,需要注意的是,每个命令都以 $# 开头。在 Linux shell 中,这些符号具有特殊的含义。shell 提示符下的 $ 符号表明用户具有标准帐户特权,而 # 表示根用户(管理员)特权。当执行清单中具有 # 的命令时,需要使用 sudo 访问特权或直接访问根用户帐户来执行该命令。

  • 文件大小
  • 用户和组所有者
  • 文件权限
  • 硬链接和软链接数量
  • 文件访问和修改时间
  • 访问控制列表 (ACL) 信息
  • 定义的任何其他文件属性,比如不可变性。

stat 命令可提供这些 inode 信息,如清单 1 所示。

清单 1. 使用 stat 命令
$ stat /etc/services  
File: `/etc/services'
Size: 362031    	Blocks: 728        IO Block: 4096   regular file
Device: fd00h/64768d	Inode: 1638437     Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2011-12-19 00:01:25.000000000 -0600
Modify: 2006-02-23 07:09:23.000000000 -0600
Change: 2011-09-18 17:29:37.000000000 -0500

清单 1 在 /etc/services 文件上使用 stat 命令。所有 inode 信息和文件属性都以某种适用的格式提供。

目录

当从 Linux 中的命令行工作时,会看到文件夹常常被称为目录。在 Windows 或 Linux 的图形用户界面 (GUI) 环境中,目录与文件夹具有相同的作用。但实际上,目录只是空文件,它们可对文件或者甚至其他目录进行分类。

所有目录都分类在一个分层结构中,根 (/) 目录位于分层结构的顶部。这实际上是一种逻辑分类,因为并不是所有目录都位于相同的分区或文件系统中。事实上,即使挂载一个网络文件系统,比如 NFS,挂载点也将位于分层结构中根目录下的某个位置。这是 Linux 与 Windows 的一个重大区别,您可能已习惯于驱动器 C 中通常包含磁盘文件系统,而顺序文件系统(比如网络映射、CD-ROM 和 USB)挂载在它们自己的驱动器上,比如 D、E、F 或 G。

超级块

在文件系统的最高级别上,超级块包含与文件系统本身相关的信息。尽管使用超级块可能不是很有趣,但可以使用 dump2fs 命令理解这一概念,这可以帮助您了解文件系统的存储概念。

清单 2 中的命令包含 /dev/sda1 上的一个分区的信息,在本例中该分区为一个 /boot 分区。grep -i superblock 命令以一种不区分大小写的方式使用 grep,仅输出与字符串 superblock 相关的信息。

清单 2. 使用 dumpe2fs 获取超级块信息
# dumpe2fs  /dev/sda1 | grep -i superblock 
  Primary superblock at 1, Group descriptors at 2-2
  Backup superblock at 8193, Group descriptors at 8194-8194
  Backup superblock at 24577, Group descriptors at 24578-24578
  Backup superblock at 40961, Group descriptors at 40962-40962
  Backup superblock at 57345, Group descriptors at 57346-57346
  Backup superblock at 73729, Group descriptors at 73730-73730

查看文件系统状态

通常,您希望为文件系统的增长分配、安全检查点和性能预期建立一种基准。GNU 库包含许多用于处理文件系统的工具。流行的工具包括 dfdufsckfdisk。一些有用但不常见的工具包括 iostatsar

du 和 df 命令

可以使用 dfdu 命令了解磁盘使用情况和空闲空间。du -csh /var 命令显示 /var 文件系统上的目录大小信息。如果您希望获取位于 /var 中的子目录的文件大小,那么使用 du -h 命令就足够了。

# du -csh  /var 
73M	/var
73M total

df -h 命令以人类可读的 (- h) 格式报告 Linux 计算机上各个挂载点的磁盘文件系统使用情况:

# df -h 
 File System            Size  Used Avail Use% Mounted on
 /dev/mapper/VolGroup00-LogVol00    37G  3.2G   32G  10% /
/dev/sda1              99M   12M   82M  13% /boot
tmpfs                 506M     0  506M   0% /dev/shm

fsck 命令

要检查(以及可能修复)文件系统中的错误,可以使用 fsck 命令。例如,如果想检查位于 /dev/sda2 上的分区中的错误,可以键入命令 fsck /dev/sda

# umount  /var
# fsck /var
fsck from util-linux-ng 2.17.2
e2fsck 1.41.12 (17-May-2010)
/dev/sda3: clean, 702/192000 files, 52661/768000 blocks

备注:在没有挂载的文件系统上使用此命令。

在上面的例子中,磁盘在单用户模式下执行。位于 /dev/sda3 的 /var 分区首先挂载。fsck 命令没有找到错误,但是,如果找到错误,它会尝试修复它们。

iostat 命令

iostat 可提供磁盘输入/输出活动:

$ iostat
Linux 2.6.18-164.el5 (DemoServer) 	12/19/2011

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.25    1.74    1.26    2.89    0.00   93.86

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sda              10.69       351.52       227.60    1759192    1139038
sda1              0.06         0.45         0.00       2254         22
sda2             10.62       351.01       227.60    1756658    1139016
dm-0             40.06       350.72       227.60    1755178    1139016
dm-1              0.02         0.18         0.00        920          0
hdc                0.00         0.03         0.00        144          0
fd0               	 0.00         0.00         0.00         16           0

此示例证明了 iostat 命令对提供读/写和整体系统使用信息非常有用。请注意,默认情况下,该命令返回所有磁盘上的读/写使用情况,在顶行上返回累积使用快照。

sar 命令

sar 可提供系统计数器信息,类似于 Windows 性能监视器。可以使用 sar 显示过去的计数器,或者可以使用它显示实时计数器:

$ sar 4 5
Linux 2.6.18-164.el5 (DemoServer) 	12/19/2011

12:20:20 AM       CPU     %user     %nice   %system   %iowait    %steal     %idle
12:20:24 AM       all      0.00      0.00      0.00      0.00      0.00    100.00
12:20:28 AM       all      0.00      0.00      1.01      0.00      0.00     98.99
12:20:32 AM       all      0.00      0.00      0.50      0.00      0.00     99.50
12:20:36 AM       all      0.00      0.00      0.00      0.00      0.00    100.00
12:20:40 AM       all      0.25      0.00      1.01      0.00      0.00     98.74
Average:          all      0.05      0.00      0.50      0.00      0.00     99.45

本示例中的 sar 命令对计数器信息每 4 秒采样一次,共采样 5 次。


优化和调节文件系统

作为系统管理员,一个主要职责是确保能够在符合要求的时间范围内访问用户的数据。像 Windows 一样,监视 Linux 服务器上的系统性能是一项主要任务。除了网络性能外,文件系统读/写性能也可能成为瓶颈,是可能的调节和优化的候选项目。

调节文件系统的方式包括:

  • 使用 tune2fs 工具
  • 更改 /etc/fstab 文件中的挂载选项
  • 更改内核参数

使用 tune2fs 进行调节

使用命令行工具 tune2fs 调节硬盘上的卷参数。例如,如果在一个 ext3 分区上有大型目录,那么可以使用哈希 B 树来提高查找速度,这可使用 tune2fs dir_index 开关来完成:

# tune2fs  -O dir_index  /dev/sda5

应该以根特权运行 tune2fs 命令。-O 开关指定所指分区的选项。

使用特殊选项进行挂载

使一个文件系统可用的过程称为挂载 文件系统。事实上,有一个 mount 命令可完成此任务。在打开 Linux 计算机时,该命令需要知道如何挂载可用的文件系统。/etc/fstab 文件用于此用途。与 Linux 中的所有配置文件一样,可以使用 vivim 等文本编辑器来编辑此文件。在此文件中,可以看到各种文件系统的挂载点。当调节挂载选项时,可以使用一个挂载的每行中的第四列。例如,可以添加 noatime 来消除对某个特定文件系统上最后访问的时间戳的审核,这可能会改善性能。如果有一个针对归档文件(举例而言)的文件系统,而用户不应写入数据,那么可以将一个分区挂载为 ro(只读)。

要在 /etc/fstab 中更改挂载选项,可以使用以下命令行:

UUID=97ee2cc4-8a26-41e9-9da1	/archives	ext4	 defaults,ro,noatime	1 2

对 /etc/fstab 文件所做的任何更改都不会立即生效。要使更改生效而不重新引导,可以使用 mount 命令来卸载更改的文件系统,然后重新挂载它:

# mount -o remount  /archives

如果有一个可在当前工作环境中卸载的分区,那么 mount -o remount 命令对在修改 /etc/fstab 文件后避免重新引导非常有用。

调节内核参数

可以使用 sysctl 命令查看和更改正在运行的内核参数。要获取文件系统相关参数及其当前值的清单,可以键入命令 sysclt -a | grep fs,如清单 3 所示。

清单 3. 查看文件系统相关的内核参数
# sysctl -a | grep fs. | less 
....
fs.quota.warnings = 1
fs.quota.syncs = 23
fs.quota.free_dquots = 0
fs.quota.allocated_dquots = 0
fs.quota.cache_hits = 0
fs.quota.writes = 0
fs.quota.reads = 0
fs.quota.drops = 0
fs.quota.lookups = 0
fs.suid_dumpable = 0
fs.inotify.max_queued_events = 16384
fs.inotify.max_user_watches = 8192
fs.inotify.max_user_instances = 128
fs.aio-max-nr = 65536
fs.aio-nr = 0
fs.lease-break-time = 45
fs.dir-notify-enable = 1
fs.leases-enable = 1
fs.overflowgid = 65534
fs.overflowuid = 65534
fs.dentry-state = 26674	23765	45	0	0	0
fs.file-max = 102263
.........

清单 3 给出了内核的文件系统相关参数的部分清单,使用了 grep 命令来过滤与文件系统相关的参数。可以使用 sysclt -w 命令更改这些参数。例如,如果服务器要处理大量小文件,并且您获得越来越多有关 “文件句柄不足” 的错误消息,可以使用 sysclt -w file-max=xxxxxx 命令增加打开的文件描述符的最大数量,其中 xxxxxx 为想获得的文件句柄最大数量。与对默认参数进行任何更改一样,这样做既有利又有弊,所以请确保计算机分配了内存来处理增加的文件句柄负载。

使用 sysctl 所做的所有更改都不会保持到重新引导之后。要将这些更改保持到重新引导之后,则需要在文本编辑器中打开 /etc/sysconf 文件并进行相应更改。不是所有可能的内核参数都已在此文件中列出,所以如果进行更改并看到已经列出了该参数,那么可以将它添加到该文件中,并使用想要的值。

碎片

通常,在操作系统上的碎片量大于或等于 20% 时,您将希望进行 “碎片整理”。当创建扩展文件系统时,它保留了大约 5% 的磁盘空间,供系统用于避免碎片整理问题。所以简言之,在正常情形中,不应该担忧碎片整理。但是,这并不意味着每一代扩展文件系统完全对碎片免疫。如果怀疑一个文件碎片化了,可以使用 filefrag 命令检查它。-v 开关可以提供更详细的信息。


使用虚拟内存

Linux 中的虚拟内存概念与 Windows 中的虚拟内存没有太大区别。Windows 操作系统在 RAM 硬件扩展时使用页面文件。虚拟内存在 RAM 可能不足时以相对廉价的方式提高性能。

Linux 交换

Linux 的虚拟内存分配空间位于交换 “文件系统” 中。该磁盘文件系统需要时 swap 类型。多个命令行(以及图形)工具可用于提供系统的交换空间使用信息:

  • free
  • top
  • vmstat
  • sar

free -m 命令可提供一个内存利用率视图,包括交换空间。top 命令提供进程、CPU 和内存利用率的实时视图,而 vmstat 命令提供系统内存和 CPU 活动,增加了块输入/输出的优势。但是,我发现 sar 工具类似于 Windows 性能监视器,它会分析交换空间在服务器上的使用情况:

$ sar  -w
$ sar  -B

在本示例中,sar -w 可提供交换活动的输出,而 sar -d 命令可提供有关交换分区的读和写的信息。请查阅 sar 文档,了解 sar 的配置。

创建新交换空间

如果需要更多交换空间,有两种选择:创建一个交换分区,或者在现有分区中为交换空间创建一个文件。如果拥有分区空间,建议采用的方法是:在一个专用的交换分区上分配交换空间。但是,可以在现有的工作分区(比如 ext3)上创建一个与所需交换空间大小相同的文件。

如果创建了一个新交换区域,比如通过调整分区大小或者甚至添加一个新硬盘,那么应该使用 mkswap 命令创建交换文件系统类型。创建新交换空间的步骤顺序如下所示:

  1. 使用 fdisk 创建分区,将类型设置为 82(Linux 交换)。
  2. 使用 mkswap 创建交换卷。
  3. 使用 swapon -a 命令打开交换空间。
  4. 向 /etc/fstab 文件添加新交换文件系统挂载点。
  5. 重新引导,使用 swapon -s 命令验证新交换空间是否可用。

修改文件系统

资源量使用会不断增加,这正是管理系统的原因。无论改增加是正常的组织增长过程中的数据增长的结果,还是由合并所导致的数据激增的结果,您都可以调整、甚至是更改现有分区的文件系统类型。当然,这些任务具有它们的风险,应该小心计划并进行备份。

fdiskparted 和它的 GUI “堂兄” GNOME 分区编辑器 (GParted) 是用于修改分区的常见 Linux 工具。但是,只要您修改现有分区,就需要提前计划,因为数据丢失的风险确实存在。如果使用逻辑卷管理器 (LVM) 设计分区,任务应该比传统方法更加顺利,因为 LVM 允许修改分区,且没有丢失数据的风险。


结束语

本文介绍了 ext2、ext3 和 ext4 的功能和管理选项,还介绍了监视文件系统使用情况的工具。如果没有 Windows 性能监视器,那么本文中所介绍的工具可提供有效管理各种硬件平台上的 Linux 文件系统所需的统计数据。

参考资料

学习

获得产品和技术

讨论

  • 加入 developerWorks 中文社区,developerWorks 社区是一个面向全球 IT 专业人员,可以提供博客、书签、wiki、群组、联系、共享和协作等社区功能的专业社交网络社区。

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Linux
ArticleID=800480
ArticleTitle=面向 Windows 系统管理员的 Linux,第 1 部分: 管理和监视扩展文件系统
publish-date=03052012