GPFS 中文件查找高级技巧

IBM General Parallel File System(GPFS) 是高性能、可扩展、并行文件系统。通过它,可以构建一个高可用、高性能的大型 Linux 计算机集群。从 3.1 版本开始,其为信息生命周期提供了基于策略的数据管理功能。管理员可以使用该功能来方便灵活的管理 GPFS 上的数据。本文介绍如何使用 GPFS 基于策略的数据管理功能来高速浏览 GPFS 集群中的文件的方法。与 Linux 传统 find 命令相比,该方法能够快速高效的遍历文件系统;特别是在海量文件系统中,能够极大的缩短定位单个文件或者文件集的时间。而且,它还提供了文件数量统计、文件批量处理等进阶功能,使得文件操作更加便捷。

李 尚忠, 软件工程师, IBM

李尚忠,IBM 软件工程师,国家软件系统分析师。现在 IBM 中国软件开发中心长期从事存储软件的相关工作。具有丰富的存储技术经验。



帅 炜, 软件工程师, IBM

帅炜, IBM 软件工程师。2008 年加入 IBM,现在 IBM 中国软件开发中心从事 IBM 存储软件产品的测试工作;兴趣在存储、文件系统等领域。



毛 伟, 软件工程师, IBM

毛伟, IBM 软件工程师,现在 IBM 中国软件开发中心从事 IBM Tivoli 企业级 IT 系统监控和企业级存储软件的测试工作;对数据存储、Linux 系统等领域都很感兴趣。



2010 年 1 月 14 日

引言

GPFS( 通用并行文件系统 ) 是 IBM 公司的高性能、可扩展、共享磁盘的的并行文件系统。被普遍应用于 IBM 大规模 Linux 或 AIX 集群系统中,能够为并行应用程序提供高性能的 I / O 存取访问。其起源于 IBM Almaden's Tiger Shark 文件系统。Tiger Shark 原来是为了大规模的多媒体应用开发的,后来慢慢的发展,加入了并行计算的要求。GPFS 已经有多年的成功应用,是一个十分成熟、稳定的并行文件系统,同时在性能上有良好的可扩展性,支持数 PB 的存储管理。

GPFS 可以通过所有的集群节点来共享文件。GPFS 可以充分利用 IBM Linux 集群系统中的“虚拟”共享磁盘,使得在多节点上运行的多个应用程序可以同时读写同一文件;它包含了 IBM 可扩展集群系统技术(RSCT),可将存储内容自动恢复到活节点;在发生故障时,记录(日志)能够快速恢复数据,并恢复数据的一致性;具有文件访问的单一镜像,可以从任意节点访问文件,而无需改变应用程序。GPFS 提供了许多标准的 UNIX 文件系统接口,允许应用不需修改或者重新编辑就可以在其上运行。 GPFS 也支持 UNIX 文件系统的工具,即:用户可以像使用普通文件系统一样使用基于 GPFS 的文件系统,唯一不同的在于管理 GPFS 文件系统的命令。

GPFS 具有基于策略(policy-based)的数据管理功能。它能够对数据进行管理,从其产生位置,到根据需要而移动至存储层的位置,再到其因灾害恢复或文档保留而到被复制或被删除的位置。GPFS 这种由策略驱动的 ILM 功能利用文件虚拟化技术来分析和识别数据,它能够在数小时内完成数十亿文件上的基于策略的文件操作。


GPFS 的基于策略的数据管理功能

GPFS 的基于策略的数据管理功能主要是用于信息生命周期管理。在实际应用中,可以灵活地运用它,从而帮助管理员完成许多工作。

因为,使用 GPFS 的基于策略的数据管理功能会涉及存储池、文件集、策略和规则等概念。为了便于理解后面的文件查找技巧,在这里先进行基本概念的介绍。

存储池

存储池从物理意义上来说是一系列的 RAID 阵列。在 GPFS 里面有两种类型的存储池,内部存储池和外部存储池。

内部存储池是由 GPFS 来管理的。外部存储池通常是由存储管理软件比如 TSM (Tivoli Storage Manager) 来管理的。对于外部存储池来说,GPFS 提供了一些工具来帮助外部的存储软件比如 TSM 来访问你的数据。GPFS 不直接管理存储在外部存储池里的数据,只管理进出外部存储池数据的移动。内部存储池物理上属于哪块盘是通过 GPFS 中一个属性值来设定的。GPFS 每个文件系统最多允许八个内部存储池。这八个存储池当中有一块需要被系统存储池来使用,另外七个可以被用来做用户存储池。

存储池允许以组的方式来管理文件系统的存储。用户可以根据不同的需求(如:性能、位置、可用性等)来划分不同的存储池。文件就可以根据事先定义好的策略来存放到指定的存储池。

文件集

在大多数文件系统中,文件层次一般是由一系列目录组成由树形结构来表示。每个文件系统有一个名字,代表了这个树形结构中的一个节点。在 GPFS 中,又增加了一个文件集的概念。一个文件集就好比是文件系统这个树形结构中的一棵子树。文件集在很多方面就好比一个独立的文件系统。我们可以直接对文件集分区而不需要对整个文件系统分区。在 GPFS 中一个文件系统中最多可以有 1000 个文件集。当一个文件系统创建时只有一个根文件集 (root fileset) 。

文件集不直接和存储池相关,文件集和存储池直接是多对多的关系。文件集中的文件可以存在不同的存储池中。同一个存储池也可以包含许多个文件集中的文件。但是一个文件数据只能存在一个存储池里。

文件集提供了一种对文件系统命名空间的划分方法。它使得可以执行比对整个文件系统更细粒度的文件管理操作。例如:文件集可以在策略文件中被指定,从而用于定位和迁移文件数据。

策略和规则

GPFS 提供了策略和规则来实现对文件管理的自动化,通过这种方法管理文件可以减少消耗的存储资源。

策略是一系列描述用户数据生命周期的规则集合。每个规则对应一个操作,比如迁移到存储池和复制一个文件等等。规则主要有三个作用:1) 文件放置 2) 文件管理 3) 恢复文件数据。当创建文件或恢复文件时,放置策略决定文件数据放的位置和被分配的存储池。文件根据这个策略被放到相应的存储池。管理策略决定文件的相关管理操作,比如迁移和删除等等。需要迁移和删除文件时,你必须使用 mmapplypolicy 命令来触发。

规则是一系列的 SQL 命令。它主要用来告诉 GPFS 符合什么条件的文件需要在某个存储池里做什么操作。规则可以应用在文件集中的任何文件。当规则中描述的条件符合的时候,就会把这个规则应用到文件中。

当有一系列规则时,GPFS 按顺序从上往下应用。比如有一系列规则的情况下,当扫描到有一个规则符合条件后,GPFS 就停止扫描,把相应文件根据规则分配到对应的存储池。规则文件是具有一定格式的文件。

mmapplypolicy 及相关命令简介

GPFS 中规则和策略的应用就需要一个很重要的命令 mmapplypolicy。每一个 mmapplypolicy 命令的操作称之为一个作业。一个 mmapplypolicy 作业包含三个主要的阶段。

第一阶段 选择符合条件的文件

第二阶段 筛选第一阶段的文件并定好要做的动作

第三阶段 迁移和删除文件

在下面介绍的 GPFS 文件查找方法也是首先制定好策略规则,然后用 mmapplypolicy 来执行具体的文件查找操作。另外,执行 mmapplypolicy 命令之前也可以通过运行带参数 --I test 的 mmchpolicy 命令来检查策略文件是否正确。

Linux 下 find 命令简介

find 命令是 Linux 操作系统中功能最强大和最有用的命令之一。它用于扫描并处理各种文件,甚至整个文件系统。而且,find 命令在 GPFS 文件系统中同样有效。由于 find 命令通常用于大量文件的处理,所以非常消耗资源且花费很长的时间。因此,人们往往把它放在后台执行。

虽然 find 命令对大量文件处理效率比较低,但是,其有简洁易用的特点。所以,要根据具体情况来区别对待。正所谓,尺有所长,寸有所短。当处理大量数据文件时可以用本文中提供的方法,当处理少量文件时可以用 find 命令。从而,做到各尽所能,物尽所用。


文件查找实例

本章中,我们通过三类实例(根据文件名查找根据文件大小查找根据文件时间查找)来详细介绍如何在 GPFS 中查找文件。同时,给出了相应的 find 命令查找方法。

根据文件名查找

最常用的查找方式就是根据文件名来查询。假设在 /gpfs/data 目录下查找后缀名为 txt 的文件。

首先创建规则文件 r1a.txt 如下:

 RULE EXTERNAL LIST 'r1a_list' EXEC ''
 RULE 'scan_rule' LIST 'r1a_list' FOR FILESET('data') WHERE NAME LIKE '%.txt'

其中 % 是通配符。

然后用 mmapplypolicy 命令执行如下所示的命令:

 # mmapplypolicy /gpfs/data -P r1a.txt -L 3|grep '^/gpfs/data'|cut -f 1

其中 P 对应的参数是规则文件,L 对应的参数是指定信息显示的级别。

由于 mmapplypolicy 命令的输出结果包括文件名以外的其它信息,所以后面要加上 grep 和 cut 命令来对输出结果过滤。

如果采用 find 命令,可以执行如下所示的命令:

 # find /gpfs/data -name '*.txt'

其中 * 是通配符。

采用 mmapplypolicy 命令也可以实现不区分大小写的文件查找。

首先创建规则文件 r1b.txt 如下:

 RULE EXTERNAL LIST 'r1b_list' EXEC ''
 RULE 'scan_rule' LIST 'r1b_list' FOR FILESET('data') WHERE LOWER(NAME) LIKE '%.txt'

其中 LOWER 函数实现将文件名转化为小写的功能。

然后再用 mmapplypolicy 命令执行如下所示的命令,即可。

 # mmapplypolicy /gpfs/data -P r1b.txt -L 3|grep '^/gpfs/data'|cut -f 1

如果采用 find 命令,可以执行如下所示的命令:

 # find /gpfs/data -iname '*.txt'

其中采用 iname 开关来覆盖区分大小写的匹配。

根据文件大小查找

查找特定大小的文件也是 Linux 系统管理员经常做的一件事情。例如:搜索系统中字节数为 0 的文件,或者查找 100MB 以上的文件等等。

下面介绍在 /gpfs/data 目录下查找字节数为 0 的文件的方法。

首先创建规则文件 r2a.txt 如下:

 RULE EXTERNAL LIST 'r2a_list' EXEC ''
 RULE 'scan_rule' LIST 'r2a_list' FOR FILESET('data') WHERE FILE_SIZE=0

其中 FILE_SIZE 是指文件大小,单位是字节。

然后用 mmapplypolicy 命令执行如下所示的命令:

 # mmapplypolicy /gpfs/data -P r1a.txt -L 3|grep '^/gpfs/data'|cut -f 1

如果采用 find 命令,可以执行如下所示的命令:

 # find /gpfs/data -size 0 -type f -print

其中 size 是指文件大小。

或者执行如下所示的命令也可以列出所有长度为零的文件。

 # find /gpfs/data -empty

下面介绍在 /gpfs/data 目录下查找 100MB 以上的文件的方法。

首先创建规则文件 r2b.txt 如下:

 RULE EXTERNAL LIST 'r2b_list' EXEC ''
 RULE 'scan_rule' LIST 'r2b_list' FOR FILESET('data') WHERE FILE_SIZE>100*1024*1024

因为 FILE_SIZE 的单位是字节,所以 100MB 对应是 100*1024*1024。本例中用大于号。如果是要查找小于指定大小的文件,就要用小于号。

然后用 mmapplypolicy 命令执行如下所示的命令:

 # mmapplypolicy /gpfs/data -P r2b.txt -L 3|grep '^/gpfs/data'|cut -f 1

如果采用 find 命令,可以执行如下所示的命令:

 # find /gpfs/data -size +100M -type f -print

其中加号是指超过指定大小。

字符 M 表明这个要查找的文件的大小是以 MB 为单位。另外,字符 c 表明这个要查找的文件的大小是以 bytes 为单位,字符 k 表明这个要查找的文件的大小是以 bytes 为单位。

在 GPFS 系统中还存在着一种被迁移到磁带的文件。这种文件用 Linux 的 ls 命令看到的文件大小是其原始文件的大小。而实际上,这种文件已经释放了所占用的文件空间,在文件系统中只是保留了一个元数据文件。对于这种文件,用 find 命令是很难查找的。而采用 mmapplypolicy 命令可以很快速的查找。

首先创建规则文件 r2c.txt 如下:

RULE EXTERNAL LIST 'r2c_list' EXEC ''
RULE 'scan_rule' LIST 'r2c_list' FOR FILESET('data') WHERE KB_ALLOCATED=0 AND FILE_SIZE>0

其中 KB_ALLOCATED 指定的是文件系统分配文件所占用的磁盘空间。

在这里使用 AND 来把两个查找选项链接起来组合成一个混合的查找方式。

因为对于字节为 0 的文件,文件系统分配文件所占用的磁盘空间也为 0。所以,为了排除这些文件,要加上 FILE_SIZE>0 的条件。

然后用 mmapplypolicy 命令执行如下所示的命令:

 # mmapplypolicy /gpfs/data -P r2c.txt -L 3|grep '^/gpfs/data'|cut -f 1

根据时间查找

按照文件的最后访问时间、最后更改时间以及最后改变状态的时间来查找文件,同样是 Linux 系统管理员经常要做的一件事情。那么,在 GPFS 文件系统中运用 mmapplypolicy 命令可以非常快速、灵活地搜索。因为 GPFS 中,除了文件中有最后访问时间 ACCESS_TIME 、最后更改时间 MODIFICATION_TIME 以及最后改变状态的时间 CHANGE_TIME 等文件属性以外,还提供了许多日期和时间处理函数,如:YEAR、MONTH、WEEK、DAY、HOUR、MINUTE、SECOND 等等。具体函数内容可以查看《 GPFS 高级管理指南》一书。

下面介绍在 /gpfs/data 目录下查找最后访问时间在某一指定日期以前的文件的方法。

首先创建规则文件 r3a.txt 如下:

 RULE EXTERNAL LIST 'r3a_list' EXEC ''
 RULE 'scan_rule' LIST 'r3a_list' FOR FILESET('data') WHERE ACCESS_TIME < 
              TIMESTAMP(deadline)

其中 deadline 是指自定义的变量。因为 GPFS 通过调用 m4 宏处理程序来处理策略文件,所以它允许在策略文件中定义简单的参数化的宏

然后用 mmapplypolicy 命令执行如下所示的命令:

# mmapplypolicy /gpfs/data -P r3a.txt -M "deadline=\'2009-01-01\'" -L 3|grep '^/gpfs/data'

其中,-M 参数是 mmapplypolicy 命令针对 m4 宏定义提供的一个参数。.

在这里,通过 deadline 指定了是查找最后访问时间在 2009-01-01 以前的文件。

如果要采用 find 命令,可以采用如下方案:

先创建一个指定日期的文件,然后用带 anewer 参数的 find 命令来查找文件。

具体命令如下所示:

 # touch -t 0901010000

这样,可以生成一个存取时间为 2009-01-01 的文件,如下:

 # ls -l --time=atime file.090101 
 -rw-r--r-- 1 root root 0 Jan  1  2009 file.090101

最后,执行 find 命令如下:

 #find /gpfs/data ! -anewer file.090101 -type f -print

其中,! 表示相反的意思,anewer 参数是指查存取时间更近。

下面介绍在 /gpfs/data 目录下查找最近几天内被修改过的文件的方法。

首先创建规则文件 r3b.txt 如下:

 RULE EXTERNAL LIST 'r3b_list' EXEC ''
 RULE 'scan_rule' LIST 'r3b_list' FOR FILESET('data') 
 WHERE DAYS(CURRENT_TIMESTAMP) - DAYS(MODIFICATION_TIME) <= days

然后用 mmapplypolicy 命令执行如下所示的命令:

 # mmapplypolicy /gpfs/data -P r3b.txt -M "days='5'" -L 3|grep '^/gpfs/data'|cut -f 1

在这里,通过 days 指定了是查找最近 5 天内被改动过的文件。

如果要采用 find 命令,可以执行如下所示的命令:

 # find /gpfs/data -mtime -5 -type f

其中,+/- 数字 表示执行之前或之后的几天。

注意:由于 mmapplypolicy 命令用的策略文件是先将时间转化为日期以后相减得出的天数,所以,其查找的时间范围比用 find 命令查找的要宽一些。

例如,如果是要查找 5 天以内的文件。mmapplypolicy 命令查找的是文件是从 5 天前的零点开始;而 find 命令是从 5 天前的当前小时、当前分钟、当前秒开始。

如果要使 mmapplypolicy 命令查找文件的时间范围与 find 命令完全一致。可以使用如下的策略文件:

清单 1. 策略文件
 RULE EXTERNAL LIST 'r3c_list' EXEC '' 
 RULE 'scan_rule' LIST 'r3c_list' FOR FILESET('data') 
 WHERE (( HOUR(CURRENT_TIMESTAMP)*60*60+MINUTE(CURRENT_TIMESTAMP)*60+
                      SECOND(CURRENT_TIMESTAMP) 
 < HOUR(MODIFICATION_TIME)*60*60+MINUTE(MODIFICATION_TIME)*60+SECOND(MODIFICATION_TIME) ) 
 AND DAYS(CURRENT_TIMESTAMP) - DAYS(MODIFICATION_TIME) = days)  OR 
                            ( DAYS(CURRENT_TIMESTAMP) 
 - DAYS(MODIFICATION_TIME) < days )

通过,上面的介绍可见运用 GPFS 中的 mmapplypolicy 命令来查找文件比较复杂。首先,需要创建策略文件;然后,再执行 mmapplypolicy 命令;最后,要运用 grep 和 cut 命令来解析前面命令的输出结果。从而,得出符合条件的文件的名称。相反,做同样的事情,find 命令很简洁。只需要一条语句就可以。

因此,要根据具体情况来决定是否采用 GPFS 中的 mmapplypolicy 命令来查找文件。如果要在上万的文件中搜索,推荐使用 mmapplypolicy 命令。否则,还是运用 find 命令。


对特定文件进行个数统计实例

做为 Linux 管理员,有时需要对某一类文件个数进行统计,而不需要具体的文件名称。这时,利用 GPFS 的 mmapplypolicy 命令进行文件个数统计比 find 命令要快得多。因为在 GPFS 文件系统中可以直接读取文件的元数据,而得出结果;而 find 命令却首先要先找到符合条件的文件,然后再进行个数统计。在 GPFS 中,可以十分多钟就扫描 100 万的文件并得出统计数目,而 find 命令如果要做同样的事情,要近一整天的时间。

下面先介绍统计 /gpfs/data 目录下文件所有文件个数的方法:

首先创建规则文件 rule3a.txt 如下:

 RULE EXTERNAL LIST 'rule3a_list' EXEC ''
 RULE 'scan_rule' LIST 'rule3a_list' FOR FILESET('data')

注意,这里没有用 WHERE 条件,所以是查找所有文件。

然后用 mmapplypolicy 命令执行如下所示的命令:

 # mmapplypolicy /gpfs/data -P rule3a.txt|sed -n '/Hit_Cnt/{n;p;}'|cut -f 2

在这里,mmapplypolicy 命令不必跟 L 参数。因为,我们只需要统计文件个数,不必得到具体的符合条件的文件名称。然后,通过 sed 和 cut 命令对 mmapplypolicy 命令的输出结果进行解析,从而获取符合条件的文件个数的值。

如果要采用 find 命令,可以执行如下所示的命令:

 # find /gpfs/data |wc -l

这时,首先是用 find 命令查找出所有符合条件的文件。然后,通过 wc 命令来统计符合条件的文件个数。wc 跟的 l 参数是表示统计输出的行数。这里就是统计前面 find 命令输出的文件名称个数。

下面再介绍在 /gpfs/data 目录下统计文件后缀名为 log 的文件个数的方法:

首先创建规则文件 rule3b.txt 如下:

 RULE EXTERNAL LIST 'rule3b_list' EXEC ''
 RULE 'scan_rule' LIST 'rule3b_list' FOR FILESET('data') WHERE NAME LIKE '%.log'

其中 % 是通配符。

然后用 mmapplypolicy 命令执行如下所示的命令:

 # mmapplypolicy /gpfs/data -P rule3b.txt|sed -n '/Hit_Cnt/{n;p;}'|cut -f 2

如果要采用 find 命令,可以执行如下所示的命令:

 # find /gpfs/data -name '*.log'|wc -l

其中 * 是通配符。

运用上述方法,可以方便的统计其它特定文件的个数。只是策略文件有所区别, 具体执行的命令基本一致。


对特定文件进行指定操作实例

除了可以查找和统计文件以外,GPFS 还拥有对特定文件进行指定操作的强大功能。GPFS 可以对符合条件的文件执行迁移、删除,以及外部命令等等操作。GPFS 正是通过该功能从而实现其对文件的信息生命周期的管理。下面分别举对符合条件的文件删除和执行外部命令两个例子,来简单介绍 GPFS 这一强大的功能。

文件删除

通过在策略文件中指定 DELETE 参数,我们可以实现对符合规则文件的删除。

下面先介绍在 /gpfs/data 目录下删除所有文件大小为零的文件,同时迁移所有大于 1MB 文件到另一个存储池 bigpool 的方法:

首先创建规则文件 rule4a.txt 如下:

 RULE 'zerofiles' DELETE WHERE FILE_SIZE=0 
 RULE 'bigfiles' MIGRATE TO POOL 'bigpool' WHERE FILE_SIZE>100*1024*1024

这里,第一行是建立了文件删除规则,第二行是建立了文件迁移规则。

然后用 mmapplypolicy 命令执行如下所示的命令:

 # mmapplypolicy /gpfs/data -P rule4a.txt

对于删除字节为零的文件可以采用 find 命令执行如下所示的命令:

 # find /gpfs/data -size 0 -type f -exec rm {} \;

执行外部命令

通过在策略文件中指定 EXEC 参数,用户调用一个外部脚本或者应用来对文件进行处理,符合规则的文件将被传递给该应用处理。在制定外部脚本或者应用时,必须采用绝对路径来制定。GPFS 策略引擎不解析 EXEC 参数后的具体条件,我们可以通过 OPTS 参数来制定传递给外部脚本或者应用的入口参数。( 由于 GPFS 策略引擎限制,部分脚本和应用不能够被正确调用,具体的脚本和应用支持列表,请参见《 GPFS 高级管理指南》一书 ) 。

下面介绍调用外部脚本修改在 /gpfs/data 目录下所有文件的权限为 755 的方法:

首先创建一个脚本文件 /tmp/mmchmod.sh 如下:

清单 2. 脚本文件 /tmp/mmchmod.sh
 #!/bin/bash 

 dt=`date +%F_%H_%M_%S` 
 results=/tmp/mmchmodReport_${dt} 

 echo $1,$2,$3 
 if [[ $1 == 'TEST' ]];then 
        echo "TEST" >> ${results}         
        echo $1,$2,$3 >> ${results}     
        exit 0 
 fi 
 if [[ $1 == 'LIST' ]];then 
        echo "LIST" >> ${results}         
        echo $1,$2,$3 >> ${results}     
        echo "Candidate File List" >> ${results} 
        echo "--------------------" >> ${results} 
        cat $2|cut -d '-' -f 3 >> ${results} 
        echo "--------------------" >> ${results} 
        echo "Starting to change candidate file mode" >> ${results} 
        cat $2|cut -d '-' -f 3|xargs chmod $3              
        echo "completed to change candidate file mode" >> ${results} 
        echo "--------------------"  
        echo  The file list report has been placed in ${results} 
        echo "--------------------"
 fi

然后创建规则文件 rule4b.txt 如下:

 RULE EXTERNAL LIST 'rule4b_list' EXEC '/tmp/mmchmod.sh' OPTS '755'
 RULE 'scan_rule' LIST 'rule4b_list' FOR FILESET('data')

这里 OPTS 后跟着的 755 是指定修改后的权限。如果要改为其它权限也可以用相应的字符串代替。

然后用 mmapplypolicy 命令执行如下所示的命令:

 # mmapplypolicy /gpfs/data -P rule4b.txt

通过查看在 /tmp 目录下生成的 mmchmodReport 开头的执行结果文件,可以详细了解对哪些文件执行了 chmod 的操作。

如果采用 find 命令,可以执行如下所示的命令:

 # find /gpfs/data -type f | xargs chmod 755

实践

下面我们用一个实例来说明,目标文件夹 /gpfs/data 是一个包含 8,696 个文件夹、4,351,345 个文件的 GPFS 文件系统。我们分别用 GPFS 策略引擎和 find 命令来查找其中包含的文件名为 f560.blt 的文件。

首先创建规则文件 r1a.txt 如下:

 RULE EXTERNAL LIST 'r1a_list' EXEC ''
 RULE 'scan_rule' LIST 'r1a_list' FOR FILESET('data') WHERE NAME LIKE 'f560.blt'

然后,执行命令如下:

 admin:/home/root/test # date;mmapplypolicy /gpfs/data -P rla.txt -L 3 
 |grep '^/gpfs/data'|wc -l; date 
 Wed Oct 28 08:14:07 UTC 2009 
 4344 
 Wed Oct 28 08:17:13 UTC 2009 
 admin:/home/root/test # mmapplypolicy /gpfs/data -P rla.txt -L 3 
 [I] GPFS Current Data Pool Utilization in KB and % 
 system  224957696       4269798400      5.268579% 
 [I] Loaded policy rules from rla.txt. 
 Evaluating MIGRATE/DELETE/EXCLUDE rules with CURRENT_TIMESTAMP = 2009-10-28@08:17:34 UTC 
 parsed 0 Placement Rules, 0 Restore Rules, 0 Migrate/Delete/Exclude Rules, 
        1 List Rules, 1 External Pool/List Rules 
 RULE EXTERNAL LIST 'r1a_list' EXEC ''
 RULE 'scan_rule' LIST 'r1a_list' FOR FILESET('data') WHERE NAME LIKE 'f560.blt'

 [I] Directories scan: 4351345 files, 8696 directories, 0 other objects, 
 0 'skipped' files and/or errors. 
 /gpfs/data/sec-etp-021a/time_1256146189.6147.dir/test0/f560.blt    
 RULE 'scan_rule' LIST 'r1a_list' WEIGHT(inf) 
 ............. 
 .............

从上面输出中可以看到,GPFS 引擎耗时 3 分 6 秒找到了 4347 个 f560.blt 文件。

 admin:/home/root/test # date;find /gpfs/data -name "f560.blt"|wc -l;date 
 Wed Oct 28 08:19:19 UTC 2009 
 4347 
 Wed Oct 28 08:25:11 UTC 2009

从上面输出中可以看到,find 命令需要 5 分 52 秒来完成相同的任务。相比 GPFS 引擎的结果,GPFS 引擎遍历文件系统的效率提高了 47.2%。而且随着 GPFS 文件系统所包含文件数量的增加,find 命令的遍历效率会呈级数下降,而 GPFS 引擎的搜索用时会呈现线性增长。对于通常应用于海量文件存储的 GPFS 文件系统而言,采用 GPFS 引擎进行文件操作将会体现出极大的优势。


总结

综上所述,使用 GPFS 的基于策略的数据管理功能,可以轻松地浏览通过 GPFS 搭建的 Linux 集群中丰富的内容。很值得花时间来试验该功能,并了解它能为您做些什么。正如本文中所列出的示例,您可以通过许多创造性的方式来使用它,这样可以轻松地浏览和管理 Linux 集群中的文件。

参考资料

条评论

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, AIX and UNIX
ArticleID=461638
ArticleTitle=GPFS 中文件查找高级技巧
publish-date=01142010