信息生命周期管理

IBM Spectrum Scale可以通过强大的策略驱动的自动分层存储管理帮助您实现信息生命周期管理(ILM)的效率。 使用ILM工具包,您可以管理文件集和存储池,并且可以自动管理文件数据。

使用这些工具,GPFS可以自动确定数据的物理存储位置,而无需考虑数据在逻辑目录结构中的位置。 存储池,文件集和用户定义的策略使您能够将存储资源的成本与数据的价值相匹配。

注: IBM Spectrum Scale 标准版或更高版本提供此功能。

GPFS中基于策略的ILM工具允许您:

  • 创建存储池以提供一种方法,将文件系统的存储划分为磁盘集合或具有类似属性的冗余独立磁盘阵列(RAID),这些磁盘作为一个组一起管理。GPFS有三种类型的存储池:

    • (必需存在)system存储池(通过GPFS创建和管理)。
    • (可选)用户存储池(通过GPFS创建和管理)。
    • (可选)使用GPFS策略规则定义的外部存储池(通过IBM Spectrum Protect等外部应用程序管理)
  • 创建文件集以提供一种对文件系统命名空间进行分区的方法,以允许以比整个文件系统更精细的粒度进行管理操作。 请参见“文件集”。

  • 根据数据属性创建策略规则,以确定初始文件数据放置并管理文件整个生命周期中的文件数据放置。 请参阅“文件管理的自动化策略”。

要在GUI中使用ILM,请单击 文件>信息生命周期

使用以下信息在IBM Spectrum Scale中创建和管理信息生命周期管理策略:


存储池

物理上,存储池是磁盘或RAID阵列的集合。 存储池还允许您在文件系统中对多个存储系统进行分组。

使用存储池,您可以通过根据性能,位置或可靠性特征对存储设备进行分组来创建存储层。 例如,一个池可以是托管高性能光纤通道磁盘的企业级存储系统,另一个池可能包含许多托管大量经济型SATA磁盘的磁盘控制器。

GPFS中有两种类型的存储池,内部存储池和外部存储池。 内部存储池在GPFS中进行管理。 外部存储池由外部应用程序(如IBM Spectrum Protect)管理。 对于外部存储池,GPFS提供一些工具,允许您定义外部存储管理器用于访问数据的接口。 GPFS不管理放置在外部存储池中的数据。 相反,GPFS管理与外部存储池之间的数据移动。 存储池允许您执行复杂的操作,例如跨多个存储设备移动、镜像或删除文件,提供存储虚拟化和单个管理上下文。

内部GPFS存储池用于管理在线存储资源。 外部存储池旨在用作近线存储以及归档和备份操作。 但是,这两种类型的存储池都为您提供了一种分区文件系统存储的方法,例如:

  • 通过将存储成本与数据值相匹配来提高性价比

  • 通过以下措施改进性能:

    • 减少高级存储的争用
    • 降低慢速设备的影响
    • 允许您在需要时检索归档数据
  • 通过以下方式提高可靠性:

    • 根据需要复制
    • 更好的故障控制
    • 根据需要创建新的存储池

有关更多信息,请参阅:

  • “内部存储池”
  • “外部存储池”

内部存储池

内部GPFS存储池由GPFS策略和命令控制。 有两种类型的内部GPFS存储池,即必需有的system存储池和最多7个可选的用户存储池。 system存储池包含每个文件的元数据,也可能包含用户数据。 用户存储池只能包含用户数据。

磁盘所属的内部GPFS存储池被指定为GPFS集群中磁盘的属性。 在创建文件系统或将磁盘添加到现有文件系统时,将磁盘属性指定为每个磁盘描述符中的字段。 GPFS允许每个文件系统最多8个内部存储池。 其中一个存储池是必需有的system存储池。 其它7个内部存储池是可选的用户存储池。

在这些情况下,GPFS会将文件数据分配给内部存储池:

  • 最初创建文件时; 存储池由文件创建时生效的文件放置策略确定。
  • 当文件的属性(如文件大小或访问时间)与指示GPFS将数据迁移到其他存储池的策略规则匹配时。

有关更多信息,请参阅:

  • “system存储池”
  • “system.log存储池”
  • “用户存储池”
  • “管理存储池”
system存储池

system存储池包含文件系统控制结构,保留文件,目录,符号链接,特殊设备以及与常规文件关联的元数据,包括间接块,扩展属性等。

system存储池还可以包含用户数据。 每个文件系统只有一个system存储池,并在创建文件系统时自动创建。

要点:建议您为系统存储池使用高可靠的磁盘和复制,因为它包含系统元数据。

将文件添加到系统时,元数据量会增加。 因此,建议您监视system存储池以确保始终有足够的空间来容纳增长。system存储池通常只占GPFS管理的总存储容量的一小部分。 但是,system存储池所需的百分比因环境而异。 您可以使用mmdf命令监视system存储池中的可用空间容量。 如果system存储池中的可用空间开始不足,则可以通过清除文件或将磁盘添加到system存储池来增加可用空间。

system.log存储池

默认情况下,文件系统恢复日志存储在具有文件系统元数据的system存储池中。文件系统恢复日志也可以放在称为system.log池的专用池中。

必须显式创建此存储池。 强烈建议仅使用与系统存储池使用的存储一样快或甚至更快的存储。 此建议是因为对恢复日志进行了大量小型同步数据更新。 system.log池的块大小必须与system池的块大小相同。

文件系统恢复日志仅存储在一个池中。

system.log存储池是可选的专用存储池,仅包含文件系统恢复日志。 如果定义此池,那么IBM Spectrum Scale会将其用于文件系统的所有文件系统恢复日志。 否则,文件系统恢复日志将保留在system存储池中。 system.log池由一个与系统存储池的存储介质一样快或更快的存储介质组成,这是一个很好的做法。 如果存储是非易失性的,则此池可用于高可用写缓存(HAWC)。

用户存储池

根据文件放置规则,文件的所有用户数据都存储在指定的存储池中。

此外,可以根据文件管理策略将文件数据迁移到其它存储池。 有关策略的详细信息,请参阅“文件管理的自动化策略”。

用户存储池仅仅包含构成用户文件的数据块(例如,用户数据).GPFS将描述文件的数据(称为文件元数据)与system存储池中的实际文件数据分开存储。 您可以创建一个或多个用户存储池,然后创建策略规则以指示应存储文件的数据块的位置。

跟踪存储池中的文件访问热度

文件的访问热度是策略的属性,提供了一种优化分层存储的方法。文件热度是相对属性,指示文件是否比其池中的其它文件“更热”或“更冷”。 该策略可用于将较热的文件迁移到较高层,将较冷的文件迁移到较低层。 访问热度是文件访问次数的指数移动平均值。 随着文件的访问,热度升高; 同样当访问停止时,文件冷却。 文件热度旨在优化非易失性存储,而不是内存使用; 因此,不计算缓存命中数。 以类似的方式,仅计算用户访问。

对文件的访问计数作为指数移动平均值进行跟踪。未访问的文件在每个周期都会丢失一定百分比的访问。
损失百分比和周期是通过配置变量fileHeatLossPercententfileHeatperiodmin来设置的。默认情况下,不跟踪文件访问热度。若要在策略中使用访问热度,必须首先启用跟踪。为此,请设置两个配置变量,如下所示:

fileHeatLossPercent

  文件访问热度的百分比(在0到100之间)在fileHeatPeriodMinutes时间内消散。默认值是10。

fileHeatPeriodMinutes

  为重新计算文件访问热度定义的分钟数。 要启用跟踪,必须将fileHeatPeriodMinutes设置为非零值。 默认值为0。

下面的示例将fileHeatPeriodMinutes设置为1440(24小时),fileHeatLossPercent设置为10,这意味着未访问的文件将每24小时损失10%的热度值,或大约每小时损失0.4%(因为这种损失是连续的,并且呈几何级数增长):

mmchconfig fileheatperiodminutes=1440,fileheatlosspercent=10

注意: 如果文件访问时间(Atime)的更新被抑制,或者如果相对atime语义生效,则文件访问热度的正确计算可能会受到不利影响。

基于每个集群跟踪文件访问热度,而不是基于每个文件系统。

使用WEIGHT(FILE_HEAT)和策略MIGRATE规则来按文件热度确定迁移的优先级。 (您可以使用GROUP POOL规则定义要指定为TO POOL目标的组池。)请参阅“文件管理的自动化策略”。

管理存储池

管理存储池包括:

  • “创建存储池”
  • “更改磁盘的存储池分配”
  • “更改文件的存储池分配”
  • “删除存储池”
  • “列出文件系统的存储池”
  • “列出文件的存储池”
  • “列出磁盘和相关统计信息”
  • “重新平衡存储池中的文件”
  • “在存储池中使用复制”

创建存储池:

磁盘所属的存储池是每个磁盘的属性,当使用mmcrfs命令创建文件系统或使用mmadddisk命令将磁盘添加到现有文件系统时,在每个磁盘描述符中将其指定为字段。 在磁盘描述符中添加具有新存储池名称的磁盘会自动创建存储池。

存储池的名字:

  • 必须在文件系统中是唯一的,但不能跨文件系统。

  • 不能超过255个字母数字字符。

  • 区分大小写。 MYpoolmyPool是不同的存储池。

存储池由节stanza键字pool定义; 例如:

pool=dataPoolA

如果未指定存储池,则默认情况下会将磁盘分配给system存储池。

mmcrfs命令上的 –metadata-block-size标志可用于创建与用户池具有不同块大小的系统池。 如果默认块大小大于1 MB,这可能尤其有用。 如果数据和元数据块大小不同,则系统池必须仅包含metadataOnly磁盘。

更改磁盘的存储池分配:

一旦将磁盘分配给存储池,则无法使用mmchdisk命令或mmrpldisk命令更改池分配。但是,您可以更改将哪些磁盘分配给池。

要将磁盘移动到另一个池:

  1. 通过发出mmdeldisk命令从当前池中删除磁盘。 这会将数据移动到存储池中的其余磁盘。
  2. 通过发出mmadddisk命令将磁盘添加到新池。
  3. 通过发出mmrestripefs -P命令,重新平衡新存储池中所有磁盘的数据。

更改文件的存储池分配:

您可以更改分配文件的存储池。

root用户可以通过以下任一方式更改分配文件的存储池:

  • 使用一组适当的策略规则运行mmapplypolicy
  • 发出mmchattr -P命令。

默认情况下,这两个命令都会立即迁移数据(这与使用这些命令的 -I yes选项相同)。 如果需要,可以通过为任一命令指定 -I defer选项来延迟迁移数据。 使用defer选项,在执行 mmrestripefs命令或 mmrestripefile命令之前,现有数据不会移动到新存储池。有关更多信息,请参阅:

  • “策略概述”
  • “重新平衡存储池中的文件”

删除存储池:

system存储池,system.log池和用户存储池具有不同的删除要求。

不允许删除system存储池。 只有在删除文件系统后才能删除system存储池。

您可以通过删除system.log池中的所有磁盘来删除system.log池。 您不需要首先运行策略来清空system.log池,因为system.log池只能包含日志文件,并且这些日志文件会在删除system.log池时会自动迁移到system池。

要删除用户存储池,必须使用mmdeldisk命令删除其所有磁盘。当GPFS从用户存储池中删除最后剩余的磁盘时,也会删除存储池。 要删除存储池,它必须完全为空。 可以使用迁移策略和mmapplypolicy命令来执行此操作。

列出文件系统的存储池:

要列出特定文件系统可用的存储池,请发出mmlsfs -P命令。

例如,此命令:

mmlsfs fs1 -P

产生类似于此的输出:

flag  value            description
----  ---------------- ----------------------------------------------------
-P    system;sp1;sp2   Disk storage pools in file system

对于文件系统fs1,有三个存储池:system存储池和名为sp1sp2的用户存储池。

列出文件的存储池:

要显示分配的存储池以及包含该文件的文件集的名称,请发出mmlsattr -L命令。

例如,此命令:

mmlsattr -L myfile

产生类似于此的输出:

file name: myfile
metadata replication: 2 max 2
data replication: 1 max 2
immutable: no
appendOnly: no
flags:
storage pool name: sp1
fileset name: root
snapshot name:
creation Time: Wed Feb 22 15:16:29 2012
Misc attributes: ARCHIVE

文件myfile被分配给名为sp1的存储池,并且是根文件集的一部分。

列出磁盘和相关统计信息:

要列出属于存储池的磁盘,请发出mmdf -P命令。

例如,此命令:

mmdf fs1 -P sp1

产生类似于此的输出:

disk      disk size failure holds   holds       free KB          free KB
name        in KB    group metadata data    in full blocks  in fragments
-------   ------ --------- ------- ------  --------------  -----------------
Disks in storage pool: sp1 (Maximum disk size allowed is 1.2 TB)
vp4vsdn05 17760256   6      no      yes     11310080 ( 64%)  205200 ( 1%)
vp5vsdn05 17760256   6      no      yes     11311104 ( 64%)  205136 ( 1%)
vp6vsdn05 17760256   6      no      yes     11300352 ( 64%)  206816 ( 1%)
vp7vsdn05 17760256   6      no      yes     11296256 ( 64%)  209872 ( 1%)
vp0vsdn05 17760256   6      no      yes     11293696 ( 64%)  207968 ( 1%)
vp1vsdn05 17760256   6      no      yes     11293184 ( 64%)  206464 ( 1%)
vp2vsdn05 17760256   6      no      yes     11309056 ( 64%)  203248 ( 1%)
vp3vsdn05 17760256   6      no      yes     11269120 ( 63%)  211456 ( 1%)
------------- -------------------- ---------------------------------------
(pool total) 142082048                      90382848 ( 64%) 1656160 ( 1%)

此示例显示文件系统fs1中的存储池sp1由8个磁盘组成,并标识每个磁盘的详细信息,包括:

  • 名称
  • 大小
  • 故障组
  • 数据类型
  • 空闲空间

重新平衡存储池中的文件:

root用户可以通过发出mmrestripefs命令在文件系统中的所有磁盘上重新平衡文件数据。

可选:

  • 指定 -P选项仅重新平衡分配给指定存储池的文件。
  • 指定 -p选项可重新平衡存储池中的文件位置。 对于分配给一个存储池但在另一个池中具有数据的文件(称为错位文件),使用此选项将其数据迁移到正确的池。(在池之间迁移文件期间使用 -I defer选项时,文件会变为“错误放置”。)

在存储池中使用复制:

要在存储池中启用数据复制,必须确保存储池中至少有两个故障组。

这是必要的,因为GPFS维护存储池之间的分离,并在每个存储池中执行文件复制。换句话说,文件及其副本必须在同一个存储池中。这还意味着,如果要复制整个文件系统,文件系统中的每个存储池必须至少有两个故障组。

:根据文件系统的配置,如果尝试在只有一个故障组的存储池中启用文件复制,GPFS将向您发出警告或错误消息。

外部存储池

最初创建文件时,GPFS会将该文件分配给内部存储池。 内部存储池支持各种类型的在线存储。 要将数据从在线存储移动到脱机或近线存储,您可以使用外部存储池。

外部存储池使用由GPFS策略规则驱动的灵活接口,可简化与其它类型存储(如磁带存储)之间的数据迁移。 有关更多信息,请参阅“文件管理的自动化策略”。

您可以使用GPFS策略规则随时定义多个外部存储池。 要将数据移动到外部存储池,GPFS策略引擎会评估确定哪些文件有资格传输到外部池的规则。 根据该信息,GPFS提供候选文件列表并执行定义外部池的规则中指定的脚本。 该可执行脚本是外部应用程序的接口,例如IBM Spectrum Protect,它可以将数据实际迁移到外部池中。 使用外部池接口,GPFS允许您通过以下方式管理信息:

  1. 当文件需求减少时,将文件及其扩展属性移动到低成本的近线或离线存储中。
  2. 每当需要文件时,都将这些文件及其以前的所有访问信息放回在线存储中。
外部池要求

使用外部池,GPFS提供元数据处理和使用扩展文件属性的灵活性。 外部存储管理器负责从GPFS移动文件,并根据访问文件系统的应用程序的请求返回它们。 因此,在使用外部存储池时,必须使用外部文件管理应用程序,例如IBM Spectrum Protect。 外部应用程序负责在文件离开GPFS文件系统后进行维护。 例如,GPFS策略规则会创建符合迁移条件的文件列表。 GPFS将该列表交给IBM Spectrum Protect,后者将文件迁移到磁带,并在文件系统中创建一个引用文件,该文件系统具有指向磁带映像的指针。 请求文件时,会自动从外部存储池中检索该文件并将其放回内部存储池中。 作为替代方法,您可以使用GPFS策略规则在用户请求之前检索数据。

外部存储池的数量仅受外部应用程序功能的限制.GPFS允许您随时通过编写定义池的策略并使GPFS知道该位置来定义外部存储池。 外部存储池由策略规则定义,并由存储阈值或使用mmapplypolicy命令启动。

有关更多信息,请参阅“使用外部存储池”。


文件管理的自动化策略

GPFS提供了一种使用策略和规则自动管理文件的方法。 正确管理文件可以有效地使用和平衡昂贵和较便宜的存储资源。

GPFS支持以下策略:

  • 文件放置策略 用于自动将新创建的文件放在特定存储池中。
  • 快照放置策略用于自动将快照数据放置到特定存储池中。
  • 文件管理策略用于在文件生命周期中管理文件,方法是将文件移动到另一个存储池,将它们移动到近线存储,将它们复制到归档存储,更改其复制状态或删除它们。 它们还可用于将快照数据迁移到其它存储池或更改其复制状态。
  • 透明云分层策略用于将冷数据迁移到云存储层,或在达到特定阈值级别时从云存储层取回数据。

您可以使用命令行界面和GUI创建和管理策略和策略规则。在GUI中,导航到“文件”>“信息生命周期管理”。

策略概述

策略是一组基于文件属性描述用户数据生命周期的规则。每条规则都定义了一个操作或定义,比如“迁移到池并复制文件”。

您可以使用规则执行以下任务:

  • 初始文件放置
  • 快照数据放置
  • 文件管理
  • 恢复文件数据
  • 加密的特殊用途。有关更多信息,请参阅”IBM Spectrum Scale:命令和编程参考“”中的加密主题。
  • 文件压缩和解压缩。 有关更多信息,请参阅“文件压缩”。

创建或还原文件时,放置策略确定文件数据的位置,并将文件分配给存储池。 写入该文件的所有数据都放在指定的存储池中。

同样,如果文件系统具有快照并且写入了文件,则快照放置策略将确定放置快照块的存储池。

定义新创建的文件、快照数据的初始位置的放置策略,以及用于放置还原数据的规则,必须使用mmchpolicy命令安装到GPFS中。如果GPFS文件系统没有安装放置策略,则所有数据都存储在第一个数据存储池中,一次只能安装一个放置策略。如果您从一种放置策略切换到另一种放置策略,或对放置策略进行更改,则该操作对现有文件没有影响。但是,新创建的文件总是根据当前安装的放置策略放置。

管理策略确定文件管理操作,例如迁移,删除和文件压缩或解压缩。

要迁移或删除数据,必须使用mmapplypolicy命令。 要压缩或解压缩数据,可以使用带有MIGRATE规则的mmapplypolicy命令或mmchattr命令。 您可以定义文件管理规则,并将它们与放置规则一起安装在文件系统中。 或者,您可以在单独的文件中定义这些规则,并使用 -P选项将它们显式提供给 mmapplypolicy。 在任何一种情况下,可以混合放置或迁移的策略规则。 在文件的整个生命周期中,可以将数据迁移到不同的存储池,并且可以删除或恢复文件。

:在多集群环境中,mmapplypolicy命令的范围仅限于拥有文件系统的集群中的节点。

:Windows操作系统不支持使用mmapplypolicy命令进行文件压缩或解压缩。

文件管理规则还可用于控制GPFS在线存储池的空间利用率。当在线池的利用率超过指定的高阈值时,可以通过用户出口配置GPFS,以触发可以自动启动mmapplypolicy的事件以降低池的利用率。 使用mmaddcallback命令,您可以指定在发生此类事件时将运行的脚本。 有关更多信息,请参阅“IBM Spectrum Scale:命令和编程参考”中的 “mmaddcallback” 命令主题。

GPFS在以下阶段中对文件放置策略执行错误检查:

  • 安装新策略时,GPFS会检查策略中所有规则的基本语法。
  • GPFS还会检查对存储池的所有引用。 如果策略中的规则引用了不存在的存储池,则不会安装该策略并返回错误。
  • 创建新文件时,将按顺序评估活动策略中的规则。 如果检测到错误,GPFS会记录错误,跳过所有后续规则,并向应用程序返回EINVAL错误代码。
  • 否则,第一个适用的规则用于存储文件数据。

默认文件放置策略:

  首次创建GPFS文件系统时,默认文件放置策略是将所有文件分配给system存储池。 您可以通过运行以下命令返回到默认策略:

mmchpolicy Device DEFAULT

有关使用GPFS命令管理策略的更多信息,请参阅“管理策略”。

策略规则

策略规则是一种类似SQL的语句,它告诉GPFS如果文件符合特定条件,如何处理特定存储池中文件的数据。 规则可以应用于正在创建的任何文件,也可以仅应用于在特定文件集或文件集组中创建的文件。

策略规则指定一个或多个条件,当该条件为真时,将应用该规则。条件可以由SQL表达式指定,其中可以包括SQL函数、变量和文件属性。下面的列表中显示了许多可用的文件属性中的一些。有关更多信息,请参见“SQL表达式中的文件属性”。

  • 评估规则的日期和时间,即当前日期和时间
  • 上次访问文件的日期和时间
  • 上次修改文件的日期和时间
  • 文件集名称
  • 文件名或扩展名
  • 文件大小
  • 用户ID(UID)和组ID(GID)

注:某些文件属性在所有类型的策略规则中都无效。

GPFS按策略规则出现时的先后顺序对策略规则进行评估。匹配的第一条规则决定对该文件执行什么操作。例如,当客户端创建文件时,GPFS会扫描活动文件放置策略中的规则列表,以确定哪条规则适用于该文件。当规则应用于该文件时,GPFS将停止处理该规则,并将该文件分配给适当的存储池。如果没有规则适用,则向应用程序返回EINVAL错误代码。

有九种类型的策略规则允许您定义GPFS将对文件数据实施的特定操作。 每个规则都有控制候选选择的子句,即允许规则匹配文件,匹配哪些文件,匹配文件操作的顺序以及为每个候选文件显示的其它属性。 根据规则的语义,允许在不同规则上使用不同的子句。

策略规则:语法

策略规则可应用于文件放置,快照放置,组池,文件迁移,文件删除,文件排除,文件列表,文件还原,外部存储池定义和外部列表定义。

策略规则及其相应的语法关系图如下所示。有关特定的加密规则的详细信息,请参阅“加密”一章。

  • 文件放置规则

    RULE [’规则名称’]
      SET POOL ’池名称’
        [LIMIT (占用百分比)]
        [REPLICATE (数据复制)]
        [FOR FILESET (’文件集名称’[,’文件集名称’]...)]
        [ACTION (Sql表达式)]
        [WHERE Sql表达式]
    
  • 快照放置规则

    RULE [’规则名称’]
    SET SNAP_POOL ’池名称’
    [LIMIT (占用百分比)]
    [REPLICATE (数据复制)]
    [FOR FILESET (’文件集名称’[,’文件集名称’]...)]
    [ACTION (Sql表达式)]
    [WHERE Sql表达式]
    
  • 组池规则;用于定义一个池列表,这些池可用作另一规则中的FROM POOLTO POOL子句中的伪池源或目标。

    RULE [’规则名称’] GROUP POOL [’组池名称’]
    IS ’池名称’ [LIMIT(占用百分比)]
    THEN ’池名称2’ [LIMIT(n2)]
    THEN ’池-C’ [LIMIT(n3)]
    THEN ...
    
  • 文件迁移规则

    RULE [’规则名称’] [WHEN 时间布尔表达式]
      MIGRATE [COMPRESS ({’yes’ | ’no’ | ’lz4’ | ’z’})]
        [FROM POOL ’源池名称’]
        [THRESHOLD (高百分比[,低百分比[,预迁移百分比]])]
        [WEIGHT (加权表达式)]
      TO POOL ’目标池名称’
        [LIMIT (占用百分比)]
        [REPLICATE (数据复制)]
        [FOR FILESET (’文件集名称’[,’文件集名称’]...)]
        [SHOW ([’字符串’] Sql表达式)]
        [SIZE (数字-sql-表达式)]
        [ACTION (Sql表达式)]
        [WHERE Sql表达式]
    

    有关更多信息,请参阅主题“文件压缩”。

  • 文件删除规则

    RULE [’规则名称’] [WHEN 时间布尔表达式]
      DELETE
        [DIRECTORIES_PLUS]
        [FROM POOL ’源池名称’]
        [THRESHOLD (高百分比[,低百分比])]
        [WEIGHT (权重表达式)]
        [FOR FILESET (’文件集名称’[,’文件集名称’]...)]
        [SHOW ([’字符串’] Sql表达式)]
        [SIZE (数字-sql-表达式)]
        [ACTION (Sql表达式)]
        [WHERE Sql表达式]
    
  • 文件排除规则

    RULE [’规则名称’] [WHEN 时间布尔表达式]
      EXCLUDE
        [DIRECTORIES_PLUS]
        [FROM POOL ’源池名称’]
        [FOR FILESET (’文件集名称’[,’文件集名称’]...)]
        [ACTION (Sql表达式)]
        [WHERE Sql表达式]
    
  • 文件列表规则

    RULE [’规则名称’] [WHEN 时间布尔表达式]
      LIST ’列表名称’
        [EXCLUDE]
        [DIRECTORIES_PLUS]
        [FROM POOL ’源池名称’]
        [THRESHOLD (高百分比[,低百分比])]
        [WEIGHT (加权表达式)]
        [FOR FILESET (’文件集名称’[,’文件集名称’]...)]
        [SHOW ([’字符串’] Sql表达式)]
        [SIZE (数字-sql-表达式)]
        [ACTION (Sql表达式)]
        [WHERE Sql表达式]
    
  • 文件还原规则

    RULE [’规则名称’]
      RESTORE TO POOL ’池名称’
        [LIMIT (占用百分比)]
        [REPLICATE (数据复制)]
        [FOR FILESET (’文件集名称’[,’文件集名称’]...)]
        [ACTION (Sql表达式)]
        [WHERE Sql表达式]
    
  • 外部存储池定义规则

    RULE [’规则名称’]
      EXTERNAL POOL ’池名称’
        EXEC ’接口脚本’
          [OPTS ’选项字符串 ...’]
          [ESCAPE ’%特殊字符’]
          [SIZE sum-number]
    
  • 外部列表定义规则

    RULE [’规则名称’]
      EXTERNAL LIST ’列表名称’
        EXEC ’接口脚本’
          [OPTS ’选项字符串 ...’]
          [ESCAPE ’%特殊字符’]
          [THRESHOLD ’资源类’]
          [SIZE sum-number]
    
策略规则:术语

策略规则的术语指定了选择文件和对文件执行操作的条件。

策略规则中使用以下术语。 某些术语出现在多个规则中:

ACTION (Sql表达式)

  指定仅在满足规则的其它子句时才计算的SQL表达式。SqlExpression的操作已完成,SqlExpression的结果值将被丢弃。在下面的示例中,该规则将以字符“sp”开头的文件的扩展属性“user.action”设置为“set pool s6”值。这些文件分配给system池:

rule ’s6’ set pool ’system’ action(setxattr(’user.action’,’set pool s6’)) where name like ’sp%’

注:加密策略不支持ACTION子句。

[COMPRESS ({‘yes’ | ‘no’ | ‘lz4’ | ‘z’})]

  指示要压缩或解压缩所选的文件。

  :使用z压缩库进行压缩主要用于冷数据,有利于节省空间而不是访问速度。 使用lz4压缩库进行压缩主要用于活动数据,有利于访问速度而不是节省空间。

  yes
      未压缩的文件将使用z压缩库进行压缩。 已压缩的文件不受影响。

  no
      压缩的文件将被解压缩。 已解压缩的文件不受影响。

  z
      未压缩的文件将使用z压缩库进行压缩。 使用lz4库压缩的文件将使用z库重新压缩。 已使用z库压缩的文件不受影响。

  lz4
      未压缩的文件将使用lz4压缩库进行压缩。已经用z库压缩过的文件将用lz4库重新压缩。已经用lz4库压缩的文件不受影响。

 以下规则压缩池datapool中以字符串green%开头的文件。因为策略术语COMPRESS指定yes而不是压缩库,所以使用默认压缩库(即z库)进行压缩 

RULE ’COMPR1’ MIGRATE FROM POOL ’datapool’ COMPRESS(’yes’) WHERE NAME LIKE ’green%’

  有关更多信息,请参阅“IBM Spectrum Scale:管理指南”中的“文件压缩”主题。

DIRECTORIES_PLUS

  指示列表中必须包含非常规文件对象(目录,符号链接和其他项)。 如果未指定,则候选列表中仅包含普通数据文件。

DELETE

  标识文件删除规则。 与此规则匹配的文件将成为删除的候选对象。

ESCAPE ’ %特殊字符

  指定使用基于RFC 3986 URI百分比编码的方案对关联文件列表中的路径名和SHOW(‘字符串’)表达式进行编码。

  比较以下两条规则:

RULE ’xp’ EXTERNAL POOL ’pool-name’ EXEC ’script-name’ ESCAPE ’%’
RULE ’xl’ EXTERNAL LIST ’list-name’ EXEC ’script-name’ ESCAPE ’%/+@#’

  这两条规则都指定,除了集合a-zA-Z0-9 -_.〜中的“未保留”字符外,所有字符都被编码为%XX,其中XX由两个十六进制数字组成。

  但是,GPFS ESCAPE语法会添加到“未保留”字符集中。 在第一个规则中,语法ESCAPE '%'指定严格的RFC3986编码。 根据此规则,路径名称(例如/root/directory/@abc+def#ghi.jkl)将按以下格式显示在文件列表中:

%2Froot%2Fdirectory%2F%40abc%2Bdef%23ghi.jkl

  在第二个规则中,语法ESCAPE '%/+@#'指定set /+@#中的所有字符都不会被转义。 在此规则下,相同的路径名称将以以下格式显示在文件列表中:

/root/directory/@abc+def#ghi.jkl

  如果省略ESCAPE子句,换行符将转义为’\ n’,反斜杠字符将转义为’\’; 所有其它字符按原样显示,无需进一步编码。

EXCLUDE

  标识文件排除规则。

  RULE ’x’ EXCLUDE

    匹配此规则形式的文件将被以下任何MIGRATE或DELETE规则排除在进一步考虑范围之外。

  RULE ‘rule-name’ LIST ’listname-y’ EXCLUDE

    匹配此规则形式的文件将被排除在命名为与listname-y*相同的任何LIST规则的进一步考虑之外。

EXEC '接口脚本

  指定要调用的外部程序,以便将请求传递给外部存储管理应用程序。“接口脚本”必须是用户提供的脚本或程序的完全限定路径名,该脚本或程序支持“用户提供的用于管理外部池的程序”中描述的命令。

EXTERNAL LIST 列表名称

  定义外部列表。此规则不与文件匹配。它提供了使用匹配“列表名称”的常规LIST规则生成的列表与希望以这些列表作为输入运行的外部程序之间的绑定。

EXTERNAL POOL 池名称

  定义外部存储池。 此规则不与文件匹配,但定义了策略语言与实现外部存储的外部存储管理器之间的绑定。

FOR FILESET (‘文件集名称’[,‘文件集名称’]…)

  指定规则仅适用于指定文件集中的文件。

FROM POOL 源池名

  指定要从中迁移文件的源池的名称。

GROUP POOL 池名

  定义组池。 此规则支持在多个GPFS磁盘池上分发数据文件的概念。

  可选地,可以为每个磁盘池指定LIMIT,指定为占用百分比; 如果未指定,则限制默认为99%。 THEN关键字表示在THEN关键字之前指定的磁盘池优先于之后指定的磁盘池。 当GROUP POOL规则定义的池是MIGRATE规则的TO POOL目标时,所选文件将分布在组成池组的磁盘池中。 将最高权重的文件放入最优选的磁盘池中,直到该池的占用限制。 如果必须迁移更多文件,则将它们放入次优选的池中,直到该池的占用限制。 同样,选择最高权重的文件。

  如果指定由FROM POOL子句中的GROUP POOL规则定义的文件,则该子句匹配组池中任何磁盘池中的任何文件。

  您可以按照WEIGHT“重新打包”一个组池。 通过将组池指定为MIGRATE规则的源和目标,将较高权重的文件迁移到首选磁盘池。

rule ’grpdef’ GROUP POOL ’gpool’ IS ’ssd’ LIMIT(90) THEN ’fast’ LIMIT(85) THEN ’sata’
rule ’repack’ MIGRATE FROM POOL ’gpool’ TO POOL ’gpool’ WEIGHT(FILE_HEAT)

请参阅“跟踪存储池中的文件访问热度”。

LIMIT (占用百分比)

  限制在存储池中创建数据。 如果这样做超过池的占用百分比,GPFS不会将文件迁移到池中。 如果未指定池的占用百分比,则默认值为99%。 请参阅“第二阶段:选择和安排文件”

  可以将*“占用百分比*”指定为浮点数,如下面的示例所示:

RULE ’r’ RESTORE to pool ’x’ limit(8.9e1)

  出于测试或计划的目的,并且当您使用 -I defer-I test选项的mmapplypolicy命令时,您可以指定一个大于100%的LIMIT

  当目标TO POOLGROUP POOL时,limit子句不适用。 定义目标GROUP POOL的规则中指定的限制控制MIGRATE规则的操作。

LIST 列表名称

  标识文件列表生成规则。一个文件可以匹配多个列表规则,但只出现在列表中一次。“列表名称”提供对EXTERNAL LIST规则的绑定,该规则指定处理生成的列表时要调用的可执行程序。

MIGRATE

  标识文件迁移规则。 与此规则匹配的文件将成为迁移到TO POOL子句指定的池的候选者。

OPTS '选项字符串 …'

  指定要传递给使用EXEC子句定义的外部程序的可选参数。GPFS策略引擎不会解释“选项字符串”。

REPLICATE (数据复制)

  覆盖默认数据复制系数。 该值必须指定为1,2或3。

RESTORE TO POOL 池名称

  标识文件还原位置的规则。 使用**gpfs_fputattrswithpathname()**子例程还原文件时,可以使用此规则将文件与其保存的属性(而不是当前文件属性)进行匹配。 此规则也适用于使用该子例程的命令,例如IBM Spectrum Protect命令dsmc restore。

RULE [‘规则名称’]

  启动规则声明。 “规则名称”标识规则并用于诊断消息。

SET POOL { 池名称 | EXCLUDE}

  标识初始文件放置规则。

池名称

  指定存放所有符合规则条件的文件的存储池的名称。

EXCLUDE

  指定符合规则标准的文件将被排除在进一步考虑之外,并且不会存储在任何池中。 如果您尝试创建与SET POOL EXCLUDE规则匹配的文件,则文件系统API将返回错误ENOSPC。

SET SNAP_POOL 池名称

  标识初始快照放置规则。 “池名称”指定存储池的名称,其中放置了与规则条件匹配的所有快照文件。

  注: 池仅在将文件数据写入快照时设置,而不是在创建快照时设置。

SHOW ([‘字符串’] SqlExpression )

  将请求的信息(已评估的SQL表达式SqlExpression的字符表示形式)插入到规则在处理外部存储池时创建的候选列表中。 “字符串”是一个回显的文字值。

  此子句对匹配文件没有影响,但可用于定义要与候选文件列表一起导出的其它属性。

SIZE (numeric-sql-expression)

  是用于选择候选文件的任何MIGRATEDELETELIST规则的可选子句。 numeric-sql-expression指定在计算要传递给用户脚本的数据总量时要使用的文件的大小。 默认值为KB_ALLOCATED

SIZE sum-number

  是EXTERNAL POOLEXTERNAL LIST规则的可选子句。 sum-number限制传递给EXEC “脚本”的每个文件列表中命名的所有文件中的总字节数。 如果单个文件大于sum-number,则将其作为“singleton”文件列表中的唯一条目传递给EXEC “脚本”。

  将sum-number指定为数字常量或浮点值。

  注: sum-number的值以KB为单位。

THRESHOLD (高百分比[,低百分比[,预迁移百分比]])

  根据所占分配池存储的百分比控制迁移和删除。

  高百分比

    表示仅当文件的当前池的占用百分比大于或等于 “高百分比” 值时才应用规则。 指定0-100范围内的非负整数。

  低百分比

    指示要应用MIGRATEDELETE规则,直到文件当前池的占用百分比减少到小于或等于“低百分比”值。 指定0-100范围内的非负整数。 默认值为0%。

  预迁移百分比

    定义低于下限“低百分比”的存储池的占用百分比。 位于下限“低百分比”和预迁移限制“预迁移百分比”之间的文件将被复制,并在内部GPFS存储池和指定的外部存储池中成为双驻留。 如果池已满,则此选项允许系统通过删除预迁移的文件来快速释放空间。 指定0到“低百分比”范围内的非负整数。 默认值与“低百分比”的值相同。

    注:

    1. “百分比“值可以指定为数字常量或浮点值。

    2. 此选项仅在迁移到外部存储池时适用。

    3. 当前规则在一个组池上运行时,此选项不适用。

THRESHOLD (ResourceClass)

  指定与“列表名池”关联的容量管理资源的类型。 以下值有效:

  FILESET_QUOTAS

    表示LIST规则必须使用mmlsquotammedquota命令的“硬限制”文件集配额的占用百分比。

  FILESET_QUOTA_SOFT

    表示LIST规则必须使用mmlsquotammedquota命令的“软限制”文件集配额的占用百分比。

  GROUP_QUOTAS

    表示LIST规则必须使用mmlsquotammedquota命令的“硬限制”组配额的占用百分比。

  GROUP_QUOTA_SOFT

    表示LIST规则必须使用mmlsquotammedquota命令的“软限制”组配额的占用百分比。

  POOL_CAPACITIES

    表示LIST规则在应用阈值规则时使用池的占用百分比。 该值是默认值。 如果未在EXTERNAL LIST规则中指定阈值但出现在LIST规则中,则使用此值。

  USER_QUOTAS

    表示LIST规则使用mmlsquotammedquota命令的“硬限制”用户配额的占用百分比。

  USER_QUOTA_SOFT

    表示LIST规则使用mmlsquotammedquota命令的“软限制”用户配额的占用百分比。

  注: 当前规则在一个组池上运行时,此选项不适用。

  有关如何使用THRESHOLD控制文件迁移和删除的更多详细信息,请参阅“第一阶段:选择候选文件”和“使用外部存储池预迁移文件”。

TO POOL 目标池名称

  指定所有与规则条件相匹配的文件都迁移到的存储池的名称。如果指定了COMPRESS关键字,则此短语是可选的。

WEIGHT (权重表达式)

  对匹配的文件建立顺序。 指定具有可以转换为双精度浮点数的数值的SQL表达式。 表达式可以引用任何文件属性,并且可以包含任何常量以及任何可用的SQL运算符或内置函数。

WHEN (TimeBooleanExpression)

  指定计算结果为TRUEFALSE的SQL表达式,具体取决于SQL内置变量CURRENT_TIMESTAMP。 如果存在WHEN子句且TimeBooleanExpression的计算结果为FALSE,则跳过该规则。

  mmapplypolicy命令在开始处理时分配CURRENT_TIMESTAMP。 它使用实际的协调世界时日期和时间或使用**-D**选项指定的日期。

WHERE Sql表达式

  指定可以将文件属性引用为SQL变量、函数和运算符的SQL表达式。有些属性并非对所有规则都可用。将规则中指定的文件属性与创建的文件的属性进行比较。

  “Sql表达式”必须是一个计算结果为TRUEFALSE的表达式,但可以是标准SQL语法表达式的任意组合,包括内置函数。

  完全省略WHERE子句等同于编写WHERE TRUEWHERE子句必须是规则的最后一个子句。

策略规则的SQL表达式

GPFS策略规则中的许多可用子句都使用SQL表达式。

您可以将不同的文件属性引用为SQL变量,并将它们与SQL函数和运算符结合使用。 根据子句的不同,SQL表达式必须计算为TRUEFALSE,数值或字符串。 并非所有规则都可以使用所有文件属性。

SQL表达式中的文件属性:

在某些子句指定的SQL表达式中可以包含文件属性。

可以在使用WHEREWEIGHTSHOW子句指定的SQL表达式中使用以下文件属性:

ACCESS_TIME

  指定上次访问文件的日期和时间的SQL时间戳值(POSIX atime)。参见EXPIRATION_TIME

BLOCKSIZE

  指定文件每个块的大小(以字节为单位)。

CHANGE_TIME

  指定上次更改文件元数据的日期和时间的SQL时间戳值(POSIX ctime)。

CLONE_DEPTH

  指定文件的克隆树的深度。

CLONE_IS_PARENT

  指定文件是否为克隆父文件。

CLONE_PARENT_FILESETID

  指定克隆父级的文件集ID。 仅当CLONE_PARENT_IS_SNAP为非零值时,文件集ID才可用。

CLONE_PARENT_INODE

  指定克隆父级的inode号,如果不是文件克隆,则为NULL

CLONE_PARENT_IS_SNAP

  指定克隆父级是否在快照中。

CLONE_PARENT_SNAP_ID

  指定克隆父级的快照ID。 仅当CLONE_PARENT_IS_SNAP为非零值时,快照ID才可用。

CREATION_TIME

  指定在创建文件时分配的SQL时间戳值。

DEVICE_ID

  指定包含目录条目的设备的ID。

DIRECTORY_HASH

  可用于对同一目录中的文件进行分组。

  DIRECTORY_HASH是一个将每个PATH_NAME映射到一个数字的函数。 同一目录中的所有文件都映射到相同的数字,而较深的路径则分配给较大的数字。

  DIRECTORY_HASH使用以下函数:

  CountSubstr(BigString,LittleString)

    计算并返回BigString中LittleString的出现次数。

  HashToFloat(StringValue)

    是一个返回准随机浮点数≥0且<1的散列函数,其值取决于字符串值。 虽然结果可能看似随机,但**HashToFloat(StringValue)**始终为特定字符串值返回相同的浮点值。

  以下规则列出了三个目录的目录哈希值:

RULE ’y’ LIST ’xl’ SHOW(DIRECTORY_HASH)
LIST ’xl’ /abc/tdir/randy1 SHOW(+3.49449638091027E+000)
LIST ’xl’ /abc/tdir/ax SHOW(+3.49449638091027E+000)
LIST ’xl’ /abc/tdir/mmPolicy.8368.765871DF/mm_tmp/PWL.12 SHOW(+5.21282524359412E+000)
LIST ’xl’ /abc/tdir/mmPolicy.31559.1E018912/mm_tmp/PWL.3 SHOW(+5.10672733094543E+000)
LIST ’xl’ /abc/tdir/mmPolicy.31559.1E018912/mm_tmp/PWL.2 SHOW(+5.10672733094543E+000)

  以下规则会导致同一目录中的文件在删除期间一起进行分组和处理。 对文件进行分组可以提高GPFS目录锁定和缓存的性能。

RULE ’purge’ DELETE WEIGHT(DIRECTORY_HASH) WHERE (deletion-criteria)

EXPIRATION_TIME

  指定文件的过期时间,表示为SQL时间戳值。 如果未设置文件的到期时间,则其到期时间为SQL NULL。 您可以通过检查“EXPIRATION_TIME IS NULL”来检测此类文件。

请记住以下几点:

  • EXPIRATION_TIME独立于ACCESS_TIME进行跟踪,并且为不可变的文件维护这两个值。
  • 过期时间和无限期保留是独立的属性。 您可以更改任何一个的值而不影响另一个的值。

FILE_HEAT

  根据文件访问时间和访问大小指定文件的热度。 有关更多信息,请参阅/usr/lpp/mmfs/samples/ilm/ README。

  FILE_HEAT的计算部分取决于atime文件属性的值。 mmcrfsmmchfs命令的**-S选项控制是否以及何时更新atime**。 您可以使用特定于IBM Spectrum Scale的挂载选项临时覆盖此设置。 有关更多信息,请参阅”IBM Spectrum Scale:命令和编程参考“中的”mmchfs命令和mmcrfs命令“以及*”IBM Spectrum Scale:概念,规划和安装指南*“中的”atime值”。

FILE_SIZE

  指定文件的当前大小或长度(以字节为单位)。

FILESET_NAME

  指定文件的路径名所在或将要创建的文件集。

  注:使用FOR FILESET子句具有相同的效果,并且评估效率更高。

GENERATION

  指定每当重用INODE号时递增的数字。

GROUP_ID

  指定文件组的数字组ID。

GROUP_NAME

  指定与GROUP_ID关联的组名称。

INODE

  指定文件的inode号。

KB_ALLOCATED

  指定为文件数据分配的磁盘空间的KB数量。

MODE

  将文件的类型和权限位显示为10个字符的字符串。 该字符串的格式与UNIX ls -l命令的输出的前10个字符相同。 例如,-rwxr-xr-x是文件的MODE字符串,可由其所有者,其组或任何用户读取或执行,但仅由其所有者写入。

MODE属性的第一个字符显示文件类型。 支持以下值:

  d 目录。

  l 链接。

  c 字符设备。

  b 块设备。

  p 管道。

  s 套接字。

  ? 一些其它属性,或未知。

MISC_ATTRIBUTES

  指定各种杂项文件属性。 该值是一个字符串,定义如下:

  + 文件访问由访问控制列表(ACL)控制。

  a 该文件是仅附加的。

  A 归档。

  c 选择要压缩的文件。

  D 目录。 要匹配所有目录,可以使用%D%作为通配符。

  e 加密。 Microsoft Windows文件属性。 不是指GPFS加密。

  E 该文件具有扩展属性元数据。

  f 相对于文件的文件放置优化器(FPO)属性,文件的某些数据块位置不正确。

  F 常规数据文件。

  H 隐藏。 Microsoft Windows文件属性。

  i 没有内容索引。 Microsoft Windows文件属性。

  I 某些数据块可能放置不当。

  j AFM附加标志。

  J 某些数据块可能无法复制。

  k 存在远程属性。 AFM内部。

  K 某些数据块可能是没有被压缩。

  L 符号链接。

  m 空目录。

  M 共同管理。

  2 数据块是复制的。

  o 脱机。

  O 其它(不是F,D,也不是L)。 例如,设备或命名管道。

  p 修复点。Microsoft Windows文件属性。

  P 活动文件管理(AFM)摘要标志。 表示至少设置了一个特定的AFM标志:jkuvwxyz

  r 有流。 Microsoft Windows文件属性。

  R 只读。

  s 稀疏。 Microsoft Windows文件属性。

  S 系统。 Microsoft Windows文件属性。

  t 临时。 Microsoft Windows文件属性。

  u 文件已缓存。 AFM内部。

  U 该文件是截断管理的。

  v AFM创建标志。

  V 读管理。

  w AFM脏数据标志。

  W 写管理。

  x AFM硬链接的标志。

  X 不可变性。

  y AFM属性更改标志。

  Y 无限期保留。

  z AFM局部标志。

  Z 安全删除。

MODIFICATION_SNAPID

  指定上次更改文件后快照的整数ID。该值通常由内建的**SNAP_ID()**函数派生,该函数将整数值分配给GPFS快照名称,该属性允许策略规则选择在拍摄快照图像后修改的文件。

MODIFICATION_TIME

  指定上次修改文件数据的日期和时间的SQL时间戳值(POSIX mtime)。

NAME

  指定文件的名称。

NLINK

  指定文件的硬链接数。

PATH_NAME

  指定文件的路径; 该路径包含文件的名称。

POOL_NAME

  指定文件数据所在的存储池。

  注:使用FROM POOL子句具有相同的效果,通常更可取。

SNAP_NAME

  指定快照文件所属的快照名称。

  **注:**仅当在快照放置规则中使用此属性时,此属性才有效。

RDEVICE_ID

  指定设备的设备类型。

USER_ID

  指定文件所有者的数字用户标识。 要在USER_NAME返回NULL时返回USER_ID的值,请使用COALESCE(USER_NAME,VARCHAR(USER_ID))。

USER_NAME

  指定与USER_ID关联的用户名。

注:

  1. 在初始放置规则中引用文件属性时,只有以下属性有效:FILESET_NAMEGROUP_IDNAMEUSER_ID。 与所有带子句的规则一样,放置规则也可能引用当前日期和当前时间并使用它们来控制匹配。
  2. 使用文件属性还原文件时,属性对应于备份时的属性,而不是当前还原的文件。
  3. 对于SQL表达式,如果要将这些属性字段中的任何一个显示为字符串(例如,FILE_HEAT),请使用SHOW(’[FILE_HEAT]’)而不是SHOW(‘FILE_HEAT’),因为后者已展开。
  4. 所有日期属性均以协调世界时(时间标准缩写为UTC)进行评估。

使用内置函数:

使用GPFS,您可以在比较谓词、谓词之间、谓词中使用内置函数,比如谓词、数学值表达式、布尔值、字符串和数字文本。

注:在计算机语言的环境下,谓词是指条件表达式的求值返回真或假的过程。

这些函数分为以下几类:

  • “扩展属性函数”
  • “字符串函数”
  • “数值函数”
  • “日期和时间函数”

扩展属性函数:

您可以使用这些函数来支持对文件的扩展属性的访问,并支持将值转换为支持的SQL数据类型。

可以使用以下属性函数:

GetXattrs(pattern,prototype)

  为其键与pattern匹配的所有扩展属性返回文件的扩展属性key=value对。 key=value对以prototype指定的格式返回。

  如果为pattern指定的值为 '*'或为空,则匹配所有键。

  prototype是一个字符串,表示典型key=value对的格式。prototype允许用户指定哪些字符将用于引用值、转义特殊代码点、分隔键和值,以及分离每个key=value对。

  prototype参数的一些示例包括:

key~n=value^n, # 指定转义字符
hexkey=hexvalue, # 将其中一个或两个指定为十六进制值
"key\n"="value\n", # 在其中一个或两个上指定引号
key:"value^n"; # 指定=和,的替代品
k:"v^n"; # 允许键和值缩写
key, # 仅指定键
"value~n"; # 仅指定值
key=’value~n’& # 可选引用字符
key=value # 不要使用“,”分隔符,而应使用空格

  您可以省略最后一个或两个参数。 默认值是有效的

  GetXattrs(’*’,‘key^n=hexvalue,’).

  假如文件的扩展属性包还有同pattern匹配的键,则GetXattrs函数返回一个空字符串。

  mmapplypolicy命令支持GetXattrs函数,但在其他上下文中它可能会返回NULL

SetBGF(BlockGroupFactor)

  指定在磁盘上按顺序排列的文件系统的块数,其行为与单个大块的行为相同。 仅当为数据池设置了 –allow-write-affinity时,此选项才有效。 这仅适用于新的数据块布局; 它不会迁移以前存在的数据块。

SetWAD(WriteAffinityDepth)

  指定要使用的分配策略。 仅当为数据池设置了 –allow-write-affinity时,此选项才有效。 这仅适用于新的数据块布局; 它不会迁移以前存在的数据块。

SetWADFG(“WadfgValueString”)

  指示要写入文件中块的副本的节点范围(在无共享体系结构中)。 您可以使用此参数来确定群集中文件的布局,以便优化应用程序的典型访问模式。 这仅适用于新的数据块布局; 它不会迁移以前存在的数据块。

  “WadfgValueString”是一个以分号分隔的字符串,用以下格式标识一个或多个故障组:

FailureGroup1[;FailureGroup2[;FailureGroup3]]

  其中每个FailureGroupx是一个逗号分隔的字符串,以下列格式标识故障组的机架(或机架范围),位置(或位置范围)和节点(或节点范围):

Rack1{:Rack2{:...{:Rackx}}},Location1{:Location2{:...{:Locationx}}},ExtLg1{:ExtLg2{:...{:ExtLgx}}}

  例如,以下值

1,1,1:2;2,1,1:2;2,0,3:4

  表示第一个故障组位于机架1,位置1,extLg 1或2; 第二个故障组位于机架2,位置1,extLg 1或2; 第三个故障组位于机架2,位置0,extLg 3或4。

  如果缺少故障组字符串的结尾部分,则将其解释为0.例如,以下方式的解释方式相同:

2
2,0
2,0,0

注:

  1. 只能关闭故障组字符串的结尾部分。 缺失的末端部分可以仅是第三个字段,或者它可以是第二个和第三个字段; 但是,如果提供第三个字段,则还必须提供第二个字段。 必须始终提供第一个字段。 换句话说,每个逗号都必须跟在两个数字之间; 因此,以下都无效

    2,0,
    2,
    ,0,0
    0,,0
    ,,0
    
  2. 这些字段支持通配符(*)。

以下是使用setBGF,setWAD和setWADFG的示例:

RULE ’bgf’ SET POOL ’pool1’ WHERE NAME LIKE ’%’ AND setBGF(128) AND setWAD(1) AND setWADFG(1,0,1;2,0,1;3,0,1)

此规则与以下命令具有相同的效果:

mmchattr --block-group-factor 128 --write-affinity-depth 1 --write-affinity-failuregroup "1,0,1;2,0,1;3,0,1" test

安装此策略后,新创建的文件将具有与这三个扩展属性相同的值,如果使用mmchattr设置它们:

(06:29:11) hs22n42:/sncfs # mmlsattr -L test
file name: test
metadata replication: 3 max 3
data replication: 3 max 3
immutable: no
appendOnly: no
flags:
storage pool name: system
fileset name: root
snapshot name:
Block group factor: 128 -----------------gpfs.BGF
Write affinity depth: 1 -----------------gpfs.WAD
Write Affinity Depth Failure Group(FG) Map for copy:1 1,0,1 -----------------gpfs.WADFG
Write Affinity Depth Failure Group(FG) Map for copy:2 2,0,1
Write Affinity Depth Failure Group(FG) Map for copy:3 3,0,1
creation time: Sat Jun 8 06:28:50 2013
Misc attributes: ARCHIVE

SetXattr(‘ExtendedAttributeName’, ‘ExtendedAttributeValue’)

  此函数设置文件的指定扩展属性的值。

  在策略规则中成功评估SetXattr将返回值TRUE,并将指定的扩展属性设置为作为规则的主题或对象的文件的指定值。 此函数对于由mmapplypolicy评估的策略规则(如MIGRATELIST)以及即将创建数据文件时的策略放置规则SET POOL有效。

XATTR(extended-attribute-name [, start [, length]])

  返回扩展属性的子字符串的值,该子字符串由其参数命名为SQL VARCHAR值,其中:

  extended-attribute-name

    指定计算结果为字符串值的任何SQL表达式。如果命名的扩展属性不存在,XATTR将返回特殊的SQL值NULL

    注:在SQL中,表达式为NULL || AnyValue产生NULL。 事实上,除了少数例外,NULL的特殊SQL值在整个SQL表达式中“传播”,以产生NULL。 一个值得注意的例外是(表达式)IS NULL总是产生TRUEFALSE,永远不会产生NULL

    例如,如果您希望在文件的扩展属性值为NULL时显示类似**_NULL_**的字符串,则需要对策略规则文件进行编码,如下所示:

define(DISPLAY_NULL,[COALESCE($1,’_NULL_’)])
rule external list ’a’ exec ’’
rule list ’a’ SHOW(DISPLAY_NULL(xattr(’user.marc’)) || ’ and ’ || DISPLAY_NULL(xattr(’user.eric’)))

    这是一个示例执行,其中两个命名的扩展属性的值中的任何一个或两个可能为NULL

mmapplypolicy /gig/sill -P /ghome/makaplan/policies/display-null.policy -I test -L 2
...
WEIGHT(inf) LIST ’a’ /gg/sll/cc SHOW(_NULL_ and _NULL_)
WEIGHT(inf) LIST ’a’ /gg/sll/mm SHOW(yes-marc and _NULL_)
WEIGHT(inf) LIST ’a’ /gg/sll/bb SHOW(_NULL_ and yes-eric)
WEIGHT(inf) LIST ’a’ /gg/sll/tt SHOW(yes-marc and yes-eric)

    GPFS/Policy/SQL是标准ISO/ANSI SQL的子集,具有额外的扩展和修改以促进GPFS/ILM。 关于NULL值,GPFS/Policy/SQL支持NULL的“未知值”含义。

  start

    是扩展属性值中的可选起始位置。 默认值为1。

  length

    是要返回的扩展属性值的可选长度(以字节为单位)。 默认值是扩展属性字符串从开头到结尾的字节数。

    注: XATTR (name,i,k) == SUBSTR(XATTR(name),i,k).

某些扩展属性值将数字或时间戳表示为十进制或二进制字符串。 使用TIMESTAMPXATTR_FLOATXATTR_INTEGER函数将扩展属性转换为SQL数字或时间戳值:

XATTR_FLOAT(extended-attribute-name [, start [, length, [, conversion_option**]]])**

  返回扩展属性的子字符串的值,该子字符串由其参数命名,并转换为SQL双浮点值,其中:

  extended-attribute-name

    指定计算结果为字符串值的任何SQL表达式。如果命名的扩展属性不存在,XATTR将返回特殊的SQL值NULL

  start

    是扩展属性值中的可选起始位置。 默认值为1。

  length

    是要返回的扩展属性值的可选长度(以字节为单位)。 默认值是扩展属性字符串从开头到结尾的字节数。 您可以将长度指定为-1,以便从扩展属性字符串的开头到结尾进行访问。

  conversion_option

    指定如何将字节转换为浮点值。 支持的选项包括:

  • BIG_ENDIAN_DOUBLE或BD - 带符号的二进制表示,IEEE浮点,符号+11位指数+分数。 这是在“大端”主机操作系统(例如PowerPC®上的AIX)上执行时的默认设置。
  • BIG_ENDIAN_SINGLE或BS - IEEE浮点,符号+ 8位指数+分数。
  • LITTLE_ENDIAN_DOUBLE或LD - 字节反转二进制表示。 这是在“小端”主机操作系统(例如Intel x86上的Linux)上执行时的默认设置。
  • LITTLE_ENDIAN_SINGLE或LS - 按字节反转的二进制表示。
  • DECIMAL - 浮点值的传统SQL字符串表示形式。

    注意:

    1. 可以指定转换名称的任何前缀,而不是拼写整个名称。 使用支持选项列表的第一个匹配; 例如,L匹配LITTLE_ENDIAN_DOUBLE。
    2. 如果扩展属性不存在,则所选子字符串的长度为0,或者所选字节不能转换为浮点值,该函数返回特殊SQL值NULL

XATTR_INTEGER(extended-attribute-name [, start [, length, [, conversion_option**]]])**

  返回由其参数命名的扩展属性(子字符串)的值,该属性转换为SQL LARGEINT值,其中。

  extended-attribute-name

    指定计算结果为字符串值的任何SQL表达式。如果命名的扩展属性不存在,XATTR将返回特殊的SQL值NULL

  start

    是扩展属性值中的可选起始位置。 默认值为1。

  length

    是要返回的扩展属性值的可选长度(以字节为单位)。 默认值是扩展属性字符串从开头到结尾的字节数。 您可以将长度指定为-1,以便从扩展属性字符串的开头到结尾进行访问。

  conversion_option

    指定如何将字节转换为LARGEINT值。 支持的选项包括:

  • BIG_ENDIAN - 带符号的二进制表示,最重要的字节优先。 这是在“大端”主机操作系统(例如PowerPC上的AIX)上执行时的默认设置。
  • LITTLE_ENDIAN - 按字节顺序反转的二进制表示。 这是在“小端”主机操作系统(例如Intel x86上的Linux)上执行时的默认设置。
  • DECIMAL - 整数值的传统SQL字符串表示形式。

    注意:

    1. 可以指定转换名称的任何前缀,而不是拼写出整个名称(例如,B,L或D)。
    2. 如果扩展属性不存在,则所选子字符串的长度为0,或者所选字节不能转换为LARGEINT值,该函数返回特殊SQL值NULL。 例如:

XATTR_INTEGER(’xyz.jim’,5,-1,’DECIMAL’)

字符串函数:

您可以对文件名和文字值使用这些字符串操作函数。

重要提示:

  1. 您必须将字符串括在单引号中。
  2. 通过使用两个单引号,可以在字符串中包含一个单引号。例如,a’b '表示字符串a’b。

CHAR(expr[, length ])

  返回其expr参数的固定长度字符串表示形式,其中:

  expr

    可以是任何数据类型。

  length

    如果存在,则必须是文字整数值。

  结果类型为CHAR或VARCHAR,具体取决于调用的特定函数。

  CHAR返回的字符串用空格填充,以填充字符串的长度。如果未指定length,则默认为取决于参数类型(expr)的值。

  注意:CHAR(固定长度字符串)值的最大长度为255个字节。 评估结果为CHAR类型的SQL表达式的结果可能会被截断为此最大长度。

CONCAT(x,y)

  连接字符串x和y。

HEX(x)

  将整数x转换为十六进制格式。

LENGTH(x)

  确定字符串x的数据类型的长度。

LOWER(x)

  将字符串x转换为小写。

REGEX(String,‘Pattern’)

  如果模式匹配则返回TRUE,否则返回FALSEPattern是Posix扩展的正则表达式。

  注意:策略SQL解析器通常执行M4宏预处理,并将方括号设置为引号字符。 因此,建议您在REGEX模式字符串周围添加一组额外的方括号; 例如:

...WHERE REGEX(name,[’^[a-z]*$’]) /* 只接受小写字母文件名 */

  以下SQL表达式:

NOT REGEX(STRING_VALUE,[’^[^z]*$|^[^y]*$|^[^x]*$|[abc]])

  可用于测试STRING_VALUE是否以任何顺序包含所有字符x、y和z,而不包含字符a、b或c。

REGEXREPLACE(string,pattern,result-prototype-string)

  返回一个字符串作为result-prototype-string,其中出现的\i(其中i是0到9会被)替换为与第i个圆括号匹配的原始字符串的子字符串,该字符串的模式字符串部分以分隔符分隔。例如:

REGEXREPLACE(’speechless’,[’([^aeiou]*)([aeiou]*)(.*)’],[’last=\3. middle=\2. first=\1.’])

  返回以下内容:

’last=chless. middle=ee. first=sp.’

  当patternstring不匹配时,REGEXREPLACE返回值NULL

  当在result-prototype-string中指定**\0**时,它将被匹配整个模式的字符串的子字符串替换。

SUBSTR(x,y,z)

  从位置y开始,提取字符串x的一部分,可选地为z字符(否则为字符串的末尾)。 这是SUBSTRING的缩写形式。 如果y是负数,则从字符串的末尾开始计算起始位置; 例如,SUBSTR(‘ABCDEFGH’, - 3,2)==‘FG’。

  注意:不要将SUBSTRsubstr混淆。 substr是一个m4内置的宏函数。

SUBSTRING(x FROM y FOR z)

  从位置y开始,提取字符串x的一部分,可选地为z字符(否则为字符串的末尾)。

UPPER(x)

  将字符串x转换为大写。

VARCHAR( expr [, length ])

  返回字符串,日期/时间值或数值的变长字符串表示形式,其中:

  expr

    可以是任何数据类型。

  length

    如果存在,则必须是文字整数值。

  结果类型为CHARVARCHAR,具体取决于调用的特定函数。 与CHAR不同,VARCHAR函数返回的字符串不会填充空格。

  注意:VARCHAR(可变长度字符串)值的最大长度为8192个字节。 评估结果为VARCHAR类型的SQL表达式的结果可能会被截断为此最大长度。

数值函数:

您可以使用数值计算函数根据文件名的数字部分,当前日期的数字部分或UNIX客户端用户ID或组ID来放置文件。

这些函数可以与比较谓词和数学中缀运算符结合使用(例如加法,减法,乘法,除法,模除法和取幂)。

INT(x)

  将数字x转换为整数,将.5或更大的分数四舍五入。

INTEGER(x)

  将数字x转换为整数,将.5或更大的分数四舍五入。

MOD(x,y)

  确定采用模y(x%y)的x的值。

日期和时间函数:

您可以使用这些日期操作和时间操作函数根据文件的创建时间和服务于创建文件的目录的GPFS节点的本地时间来放置文件。

CURRENT_DATE

  确定GPFS服务器上的当前日期。

CURRENT_TIMESTAMP

  确定GPFS服务器上的当前日期和时间。

DAYOFWEEK(x)

  确定日期或时间戳x中的星期几。 一周中的一天是1到7(星期日是1)。

DAYOFYEAR(x)

  确定从日期x开始的一年中的某一天。 一年中的一天是从1到366的数字。

DAY(x)

  确定从日期或时间戳x开始的月中的某天。

DAYS(x)

  确定日期或时间戳x和0001-01-01之间的天数。

DAYSINMONTH(x)

  确定日期x所在的月份中的天数。

DAYSINYEAR(x)

  确定日期x所在年的天数。

HOUR(x)

  确定时间戳x的一天中的小时(0到23之间的值)。

MINUTE(x)

  确定时间戳x的分钟。

MONTH(x)

  确定从日期或时间戳x开始的年份中的月份。

QUARTER(x)

  确定从日期x开始的季度。 季度值是1到4的数字。例如,1月,2月和3月是第1季度。

SECOND(x)

  返回时间戳x的秒部分。

TIMESTAMP(sql-numeric-value) or TIMESTAMP(sql-character-string-value)

  接受任何数值。 数值被解释为自1970年1月1日(标准UNIX纪元)以来的秒数,并转换为SQL TIMESTAMP值。

  支持有符号的64位LARGEINT参数值。 负参数值会导致TIMESTAMP将这些值转换为表示UNIX纪元之前年份的时间戳。

  此函数还接受YYYY-MM-DD HH:MM:SS形式的字符串。 可能会出现连字符( - )或符号(@),而不是日期和时间之间的空白。 时间可以省略。 省略的时间默认为00:00:00。 :SS字段可以省略,默认为00。

WEEK(x)

  确定日期x在一年中的周数。

YEAR(x)

  确定日期或时间戳x的年份。

  所有日期和时间函数都使用通用时间(UT)。

策略规则文件的示例

/*
Sample GPFS policy rules file
*/
rule ’vip’ set pool ’pool0’ where USER_ID <= 100
RULE ’m1’ SET POOL ’pool1’ WHERE LOWER(NAME) LIKE ’%marc%’
RULE SET POOL ’pool1’ REPLICATE (2) WHERE UPPER(NAME) = ’%IBM%’
RULE ’r2’ SET POOL ’pool2’ WHERE UPPER(SUBSTRING(NAME FROM 1 FOR 4)) = ’GPFS’
RULE ’r3’ SET POOL ’pool3’ WHERE LOWER(SUBSTR(NAME,1,5)) = ’roger’
RULE SET POOL ’pool4’ WHERE LENGTH(NAME) = 7
RULE SET POOL ’pool5’ WHERE name like ’xyz%’ AND name like ’%qed’ OR name like ’%.tmp%’
RULE SET POOL ’pool6’ WHERE name like ’abc%’ OR name like ’%xyz’ AND name like ’x%’
RULE ’restore’ RESTORE TO POOL ’pool0’ where USER_ID <= 100
/* If none of the rules matches put those files in system pool */
rule ’default’ SET POOL ’system’

其它SQL函数:

可以使用以下其它SQL函数。

SNAP_ID([‘FilesetName’,] ‘SnapshotName’)

  给定(可选)文件集/inode空间名称和快照名称,此函数返回给定inode空间内给定快照的数字快照ID。

GetEnv(‘EnvironmentVariableName’)

  此函数获取指定环境变量的值。

GetMMconfig(‘GPFSConfigurationParameter’)

  此函数获取指定GPFS配置参数的值。

mmapplypolicy命令和策略规则

mmapplypolicy命令具有基于不同阶段的 1特征的策略规则。

在每次调用mmapplypolicy命令期间,任何给定文件都是最多一个MIGRATEDELETE操作的潜在候选者。 单个调用mmapplypolicy命令称为作业(job)

mmapplypolicy命令设置SQL内置变量CURRENT_TIMESTAMP,并在作业开始时收集池占用率统计信息。

mmapplypolicy作业包括三个主要阶段:

  1. “第一阶段:挑选候选文件”
  2. “第二阶段:选择和调度文件”
  3. “第三阶段:迁移和删除文件”
第一阶段:挑选候选文件

mmapplypolicy作业的第一个阶段,将扫描指定GPFS文件系统设备中或输入路径名称下的所有文件。 从文件的GPFS inode结构中读取每个文件的属性。

注意:mmapplypolicy直接从元数据磁盘块读取数据,因此可能会落后于文件系统的posix状态。为了确保MODIFICATION_TIME和其它时间戳是最新的,您可以使用以下挂起和恢复序列来强制对磁盘进行最近的更改:

mmfsctl fs-name suspend; mmfsctl fs-name resume;

mmfsctl命令简介:

使用mmfsctl命令向特定GPFS文件系统发出控制请求。 该命令用于临时暂停所有应用程序I/O请求的处理,然后恢复它们,以及在灾难恢复环境中同步对等集群之间的文件系统配置状态。

使用mmfsctl suspend和mmfsctl resume

在创建文件系统的FlashCopy®映像之前,用户必须运行mmfsctl suspend以暂时停止所有文件系统活动并刷新安装此文件系统的所有节点上的内部缓冲区。 磁盘上的元数据将处于一致状态,从而提供FlashCopy快照的完整性。 如果在调用此命令后应用程序发出了对文件系统的请求,GPFS将无限期地暂停此请求,或者直到用户发出mmfsctl resume

拍摄FlashCopy映像后,可以发出mmfsctl resume命令以恢复正常操作并完成任何挂起的I/O请求。

对于每个文件,策略规则按顺序从第一个规则到最后一个规则进行考虑:

  • 如果规则具有计算为FALSEWHEN子句,则跳过该规则。

  • 如果规则具有FROM POOL子句,并且命名的池与文件的POOL_NAME属性不匹配,则跳过该规则。 如果组池中的任何池名称与文件的POOL_NAME属性匹配,则指定组池名称的FROM POOL子句与文件匹配。

  • 如果存在THRESHOLD子句且文件的当前池的占用百分比小于THRESHOLD子句的HighPercentage参数,则跳过该规则。

  • 如果规则具有FOR FILESET子句,但没有任何命名的文件集与文件的FILESET_NAME属性匹配,则跳过该规则。

  • 如果规则具有计算结果为FALSEWHERE子句,则跳过该规则。 否则,该规则适用。

  • 如果适用的规则是LIST “listname-y”规则,则该文件将成为指定列表中的候选项,除非存在EXCLUDE关键字,在这种情况下,该文件将不是候选项;主题文件也不会考虑以下LIST “listname-y”。但是,该文件受命名为其它列表名称的LIST规则约束。

  • 如果适用的规则是EXCLUDE规则,则既不会迁移也不会删除该文件。 与EXCLUDE规则匹配的文件不适用于任何MIGRATEDELETE规则。

    注意:在可能与要排除的文件匹配的任何其它规则之前指定EXCLUDE规则。 例如:

    RULE ’Exclude root’s file’ EXCLUDE where USER_ID = 0
    RULE ’Migrate all but root’s files’ MIGRATE TO POOL ’pool1’
    

    将迁移非root拥有的所有文件。 如果在EXCLUDE规则之前将MIGRATE规则放在策略文件中,则将迁移所有文件,因为策略引擎将从头到尾评估规则,并且root的文件必须与MIGRATE规则匹配。

若要将文件排除于匹配LIST规则,必须使用EXCLUDE子句创建单独的LIST规则,并将其放在LIST规则之前。

  • 如果适用的规则是MIGRATE规则,则该文件将成为迁移到TO POOL子句指定的池的候选者

    当组池是MIGRATE规则的TO POOL目标时,所选文件将分布在包含组池的磁盘池中,权重最高的文件将转到最优选的磁盘池,直至该池的占用限制。 如果还有更多要迁移的文件,那些文件将转到次优选的池,直到该池的占用限制(再次从剩余的所选文件中选择最高权重文件); 对于后续优选的池,依此类推,直到所有选定的文件都已迁移,或者直到组池的所有磁盘池都已填充到各自的限制。

  • 如果适用的规则是DELETE规则,则该文件将成为删除的候选者

  • 如果没有适用的规则,则该文件不是迁移或删除的候选者。

  • 每个候选文件(用于迁移或删除)还与LowPercentage占用百分比值相关联,该值取自适用规则的THRESHOLD子句。 如果未指定,则LowPercentage值默认为0%。

  • 每个候选文件还与一个数值权重相关联,可以从适用规则的WeightExpression计算得到,也可以使用以下规则指定默认值:

    - 如果在适用规则的THRESHOLD子句中指定了LowPercentage,则候选者的权重将被视为候选文件的KB_ALLOCATED属性。

    - 如果在适用规则的THRESHOLD子句中未指定LowPercentage,则候选者的权重将被视为**+infinity**。

第二阶段:选择和调度文件

mmapplypolicy作业的第二阶段,选择部分或全部候选文件。

考虑到“第一阶段:挑选候选文件”中确定的权重和阈值以及实际池占用百分比,调度选择要迁移或删除的文件。 通常,在权重较低的候选者之前选择具有较高权重的候选者。

在仅涉及GPFS磁盘池的迁移和删除之前,要完成与外部池之间的文件迁移。

不针对组池的文件迁移是在文件迁移到组池之前完成的。

完成以组池为目标的文件迁移,以便将具有较高权重的候选文件迁移到组池中更优选的GPFS磁盘池,但要遵守组池定义中指定的LIMIT

以下两个选项可用于调整候选文件的选择方法:

–choice-algorithm {best | exact | fast}

在选择候选文件时要使用的策略引擎可以指定为以下类型的算法之一:

best

根据其余输入参数选择最佳方法。

exact

按权重完全排序所有候选文件,然后从最高权重到最低权重连续考虑每个文件,根据任何适用的规则LIMIT和当前存储池占用率选择可行的候选者进行迁移,删除或列出。 这是默认值。

fast

与并行化的 -g/share -tmp -N节点-列表选择方法一起工作。fast选择法不完全按照权重对候选文件进行排序。它使用统计,启发式和并行计算方法相结合来支持较高权重的候选文件而不是较低权重的候选文件,但选择候选文件的集合可能是与exact方法稍有不同,候选文件迁移,删除,或列出的顺序更随机。fast方法使用了在策略评估阶段收集的统计数据。当收集到的统计数据表明所有候选文件或没有候选文件是可行的时,fast选择方法特别快。

–split-margin n.n

一个浮点数,指定允许fast选择算法偏离策略规则指定的LIMITTHRESHOLD目标的百分比。 例如,如果您指定的THRESHOLD数字为80%且split-margin值为0.2,则fast选择算法可以在达到80.2%时完成选择文件,或者可以选择将占用率降至79.8%的文件。 当存在许多小文件时,分割余量的非零值可以极大地加速fast选择算法的执行。 默认值为0.2。

文件分组和SIZE子句

在调度文件时,mmapplypolicy只是默认将下一个100个文件组合在一起,或者使用 -B选项显式设置的文件数。

但是,您可以设置mmapplypolicy来调度文件,以便每次调用InterfaceScript时都能获得大约相同数量的文件数据来处理。为此,使用某些策略规则的SIZE子句指定调度基于文件大小的总和。SIZE子句可以应用于以下规则(详细信息请参阅“策略规则”):

  • DELETE
  • EXTERNAL LIST
  • EXTERNAL POOL
  • LIST
  • MIGRATE

管理员指定的自定义文件分组或聚合

除了使用SIZE子句控制传递给InterfaceScript的每次调用的工作*量(amount)之外,还可以指定在调度阶段将具有相似属性( similar attributes)*的文件分组或聚合在一起。 为此,请使用聚合器程序获取所选候选文件的列表,根据特定属性对其进行排序,并生成可作为输入传递给用户脚本的重新排序文件列表。

您可以通过以下步骤完成此操作:

  1. 使用 -I prepare选项运行mmapplypolicy以生成所选候选文件的列表,但不将列表传递给InterfaceScript。

  2. 使用聚合器程序将所选候选文件列表排序为具有相似属性的组,并将每个组写入新的单独文件列表。

  3. 使用 -r选项运行mmapplypolicy,指定要读取的一组文件列表文件。 使用 -r选项调用时,mmapplypolicy不会选择候选文件; 相反,它将指定的文件列表作为InterfaceScript的输入传递。

注意:您还可以使用-q选项指定从输入文件列表中以循环方式获取小组文件(例如,从x.list.A获取一小组文件,然后从 x.list.B,然后从x.list.C,然后回到x.list.A,依此类推,直到所有文件都被处理完毕)。

要防止mmapplypolicy根据大小重新分发已分组的文件,请在相应的策略规则中省略SIZE子句,并将 -B选项的bunching参数设置为非常大的值。

候选文件不被选中删除或迁移的原因

通常,当池占用率低于LowPercentage值时,不会从池中删除或从池中迁移候选对象。此外,当目标池达到LIMIT子句指定的占用率时(如果适用规则没有明确指定占用率,则为99%),将不会选择候选文件迁移到目标池。

当目标TO POOL是组池时,limit子句不适用; 定义目标组池的规则中指定的限制管理MIGRATE规则的操作。 如果LIMIT子句出现在目标池为组池的规则中,则策略解释程序(例如,mmapplypolicy)可能会发出警告。

第三阶段:迁移和删除文件

mmapplypolicy作业的第三阶段,将根据其适用规则迁移或删除第二阶段选择和调度的候选文件。

对于迁移,如果适用的规则具有REPLICATE子句,则还会相应地调整复制因子。 有效的FROM POOL和TO POOL是可以接受的,因为mmapplypolicy命令可用于调整文件的复制因子,而无需将它们从一个池移动到另一个池。

在第三阶段执行的迁移可能涉及大量数据移动。 因此,您可能需要考虑使用mmapplypolicy命令的 -I defer选项,然后使用 mmrestripefs -p命令执行数据移动。

策略规则:示例和提示

在编写和应用策略之前,请考虑以下建议。

通过使用 -I test选项和 -L 3或更高选项运行mmapplypolicy命令来测试策略规则是个好主意。 测试可帮助您了解哪些文件被选为候选文件以及选择哪些文件进行处理。

除非您确信规则正确表达了您的意图,否则请勿将策略应用于重要文件的整个文件系统。 要测试规则,请选择包含少量文件的目录,其中一些文件您希望通过SQL策略规则选择,其中一些文件可能会被跳过。

mmapplypolicy /TestSubdirectory -L 6 -I test

输出显示扫描的文件以及匹配规则或没有规则的文件。 如果问题不明显,可以在规则中添加SHOW()子句以查看文件属性或SQL表达式的值。 要查看多个值,请输入如下命令:

SHOW(’x1=|| varchar(Expression1) || ’ x2=|| varchar(Expression2) || ... )

其中ExpressionX是您怀疑或不理解的SQL变量或函数表达式。 请注意,如果任何表达式求值为SQL NULL,则按照SQL规则整个show子句为NULL。 显示null与非null值的一种方法是定义宏并按以下示例调用它:

define(DISPLAY_NULL,[CASE WHEN ($1) IS NULL THEN ’_NULL_’ ELSE varchar($1) END])
rule list a SHOW( ’x1=’ || DISPLAY_NULL(xattr(’user.marc’)) || ’ and x2=’ || DISPLAY_NULL(xattr(’user.eric’)))

注意:有关-L标志的示例和更多信息,请参阅“IBM Spectrum Scale:问题确定指南”中的mmapplypolicy -L命令主题。

以下示例说明了一些有用的策略规则技术:

  1. 从名为pool_1的存储池中删除过去30天内未访问过的文件,这些文件的名称类似于临时文件,或者出现在任何名为tmp的目录中:
RULE ’del1’ DELETE FROM POOL ’pool_1’
  WHERE (DAYS(CURRENT_TIMESTAMP) – DAYS(ACCESS_TIME) > 30)
    AND (lower(NAME) LIKE ’%.tmp’ OR PATH_NAME LIKE ’%/tmp/%’)
  1. 使用SQL LIKE谓词测试文件名和路径名:

    RULE ’*/_*’ DELETE WHERE PATH_NAME LIKE ’%/x_%’ ESCAPE ’x’
    RULE ’*XYZ*’ DELETE WHERE NAME LIKE ’%XYZ%’
    RULE ’12_45’ DELETE WHERE NAME LIKE ’12x_45’ ESCAPE ’x’
    RULE ’12%45’ DELETE WHERE NAME LIKE ’12x%45’ ESCAPE ’x’
    RULE ’12?45’ DELETE WHERE NAME LIKE ’12_45’
    RULE ’12*45’ DELETE WHERE NAME LIKE ’12%45’
    RULE ’*_*’ DELETE WHERE NAME LIKE ’%x_%’ ESCAPE ’x’
    

    其中:

    • 名称中的百分号%通配符表示零个或多个字符。
    • 名称中的下划线(_)通配符表示1个字节。

    当您需要完全匹配“_”或“%”时,使用可选的ESCAPE子句来建立转义字符。

  2. 在测试名称时使用SQL UPPERLOWER函数忽略大小写:

    RULE ’UPPER’ DELETE WHERE upper(PATH_NAME) LIKE ’%/TMP/OLD/%’
    RULE ’lower’ DELETE WHERE lower(PATH_NAME) LIKE ’%/tmp/old/%’
    
  3. 使用SQL SUBSTR或SUBSTRING函数来测试名称的子字符串:

RULE ’s1’ DELETE WHERE SUBSTRING(NAME FROM 1 FOR 5)=’XXXX-’
RULE ’s2’ DELETE WHERE SUBSTR(NAME,1,5)=’YYYY-’
  1. 使用SQL SUBSTRLENGTH函数来测试名称的后缀:

    RULE ’sfx’ DELETE WHERE SUBSTR(NAME,LENGTH(NAME)-3)=’.tmp’
    
  2. 使用WHEN子句将规则适用性限制为一周中的特定日期:

    RULE ’D_SUN’ WHEN (DayOfWeek(CURRENT_DATE)=1) /* Sunday */
      DELETE WHERE PATH_NAME LIKE ’%/tmp/%
    

    CURRENT_DATE是一个内置SQL的操作数,它返回CURRENT_TIMESTAMP值的日期部分。

  3. 使用SQL IN运算符测试几种可能性:

    RULE ’D_WEEKEND’ WHEN (DayOfWeek(CURRENT_DATE) IN (7,1)) /* 周六或周日 */
      DELETE WHERE PATH_NAME LIKE ’%/tmp/%’
    

    有关如何使用宏处理器(如m4)更轻松地读取和写入策略规则的信息,请参阅“将宏处理实用程序与策略规则一起使用”。

  4. 使用FILESET子句将规则限制为特定文件集中的文件:

    RULE ’fsrule1’ MIGRATE TO POOL ’pool_2’
      FOR FILESET(’root’,’fset1’)
    

    在此示例中,没有FROM POOL子句,因此无论其当前存储池放置如何,来自指定文件集的所有文件都将迁移到存储池pool_2

注意:要将迁移规则应用于快照文件,必须指定mmapplypolicy fs -S snap1选项,其中snap1是文件所在的快照的名称。

  1. 使用EXCLUDE规则从所有后续规则中排除一组文件:

    RULE ’Xsuper’ EXCLUDE WHERE USER_ID=0
    RULE ’mpg’ DELETE WHERE lower(NAME) LIKE ’%.mpg’ AND FILE_SIZE>20123456
    

    注意:

    a. 在可能匹配被排除的文件的规则之前指定EXCLUDE规则。

    b. 您无法在单个规则中定义列表以及从列表中排除的内容。 您必须定义两个LIST语句,一个指定列表中的文件,另一个指定列表中要排除的内容。 例如,要从LIST规则allfiles中排除包含单词test的文件,请定义以下规则:

    RULE EXTERNAL LIST ’allfiles’ EXEC ’/u/brownap/policy/CHE/exec.list’
    RULE ’exclude_allfiles’ LIST ’allfiles’ EXCLUDE where name like ’%test%’
    RULE ’all’ LIST ’allfiles’ SHOW(’misc_attr =|| MISC_ATTRIBUTES || HEX(MISC_ATTRIBUTES)) \
    where name like ’%’
    
  2. 使用带有关键字的SQL NOT运算符,以及ANDOR

    RULE ’D_WEEKDAY’ WHEN (DayOfWeek(CURRENT_DATE) NOT IN (7,1)) /*工作日*/
      DELETE WHERE (PATH_NAME LIKE ’%/tmp/%’ OR NAME LIKE ’%.tmp’)
        AND (KB_ALLOCATED > 9999 AND NOT USER_ID=0)
    
  3. 要仅迁移分配了数据块的快照文件,请使用以下规则:

    RULE "migrate snap data" MIGRATE FROM POOL X TO POOL Y WHERE KB_ALLOCATED > 0
    
  4. 使用REPLICATE子句可以增加所选文件的可用性:

    RULE ’R2’ MIGRATE FROM POOL ’ypooly’ TO POOL ’ypooly’
      REPLICATE(2) WHERE USER_ID=0
    

    在增加任何文件的数据复制因子之前,必须将文件系统配置为支持数据复制。

  5. 可以将两个SQL Timestamp值的差异与SQL Interval值进行比较:

    rule ’a’ migrate to pool ’A’ where CURRENT_TIMESTAMP - MODIFICATION_TIME > INTERVAL ’10’ DAYS
    rule ’b’ migrate to pool ’B’ where CURRENT_TIMESTAMP - MODIFICATION_TIME > INTERVAL ’10’ HOURS
    rule ’c’ migrate to pool ’C’ where CURRENT_TIMESTAMP - MODIFICATION_TIME > INTERVAL ’10’ MINUTES
    rule ’d’ migrate to pool ’D’ where CURRENT_TIMESTAMP - MODIFICATION_TIME > INTERVAL ’10’ SECONDS
    

    为获得最佳精度,请使用INTERVAL … SECONDS构造。

  6. 通过仔细分配权重和阈值,管理员可以正式表达如下规则:

    如果名为pool_X的存储池现在占用百分比大于90%,请将名为pool_X的存储池的占用百分比降低到80%,方法是将三个月或更早的文件迁移到名为pool_ZZ的存储池。 但是,如果你能找到足够多年的文件来将占用率降低到50%,那么也可以这样做。

    RULE ’year-old’ MIGRATE FROM POOL ’pool_X’
      THRESHOLD(90,50) WEIGHT(weight_expression)
      TO POOL ’pool_ZZ’
      WHERE DAYS(CURRENT_TIMESTAMP) – DAYS(ACCESS_TIME) > 365
    RULE ’3month-old’ MIGRATE FROM POOL ’pool_X’
      THRESHOLD(90,80) WEIGHT(weight_expression)
      TO POOL ’pool_ZZ’
      WHERE DAYS(CURRENT_TIMESTAMP) – DAYS(ACCESS_TIME) > 90
    

    有关权重的更多信息,请参见下一个示例。

    mmapplypolicy作业的目标是尽可能将FROM POOL的占用百分比降低到THRESHOLD子句中指定的低占用百分比。 mmapplypolicy作业不会迁移或删除多于生成此占用百分比所需的文件。任务包括以下步骤:

    a.为每个候选文件分配权重。

    b.所有候选文件都按权重排序。

    c.选择最高权重文件进行MIGRATEDELETE,直到达到低占用率,或者没有更多候选文件。

编写规则的管理员必须确保计算的权重符合预期,并且比较是有意义的。 这类似于IBM Spectrum Protect约定,其中每个文件的加权函数由以下等式确定:

X * access_age + Y * file_size

其中:

access_age是DAYS(CURRENT_TIMESTAMP) - DAYS(ACCESS_TIME)

file_size是FILE_SIZEKB_ALLOCATED

X和Y是系统管理员选择的权重因子。

  1. WEIGHT子句可以用来表达如下的思想(非正式地陈述):

    IF access_age > 365 days THEN weight = 100000 + access_age
    ELSE IF access_age < 30 days THEN weight = 0
    ELSE weight= KB_ALLOCATED
    

    该规则意味着:

    • 对超过一年的任何文件赋予非常大的权重偏差。
    • 强制任何30天以下的文件的权重为0。
    • 根据占用的千字节数为所有其它文件分配权重。

    以下代码块显示了正式的SQL语法:

    CASE
      WHEN DAYS(CURRENT_TIMESTAMP) – DAYS(ACCESS_TIME) > 365
        THEN 100000 + DAYS(CURRENT_TIMESTAMP) – DAYS(ACCESS_TIME)
      WHEN DAYS(CURRENT_TIMESTAMP) – DAYS(ACCESS_TIME) < 30
        THEN 0
      ELSE
        KB_ALLOCATED
    END
    
  2. SHOW子句对匹配文件没有影响,但可用于定义要随候选文件列表导出的其它属性。 它可以用于任何目的,但主要用于支持文件聚合。

    若要支持聚合,可以使用SHOW子句为规则选择的每个文件输出聚合值。然后,可以将这些值输出到文件列表,并将该列表输入到将文件分组为聚合的外部程序中。

  3. 如果您有大量要测试的文件集,请使用FILESET_NAME变量,如以下示例所示:

    RULE ’x’ SET POOL ’gold’ WHERE FILESET_NAME LIKE ’xyz.%.xyz’
    

    但是,如果您只针对几个文件集进行测试,则可以使用FOR FILESET(‘xyz1’,‘xyz2’)表单。

  4. 您可以使用SQL强制语法将时间间隔值转换为秒数,如以下示例所示:

    define([toSeconds],[(($1) SECONDS(12,6))])
    define([toUnixSeconds],[toSeconds($1 - ’1970-1-1@0:00’)])
    RULE external list b
    RULE list b SHOW(’sinceNow=’ toSeconds(current_timestamp-modification_time) )
    RULE external list c
    RULE list c SHOW(’sinceUnixEpoch=’ toUnixSeconds(modification_time) )
    

    还支持以下方法:

    define(access_age_in_days,( INTEGER(( (CURRENT_TIMESTAMP - ACCESS_TIME) SECONDS)) /(24*3600.0) ) )
    RULE external list w exec ’’
    RULE list w weight(access_age_in_days) show(access_age_in_days)
    
  5. 您可以创建一个策略,列出在指定时间戳之后创建,访问或修改的文件。 时间戳必须从本机格式转换为UTC格式。 以下示例策略列出了在时间戳2017-02-21 04:56 IST之后创建的所有文件:

    # cat policy
    RULE ’filesRule’ LIST ’files’
      SHOW(varchar(kb_allocated) || ’ ’ || varchar(file_size))
      WHERE (CREATION_TIME > TIMESTAMP(’LAST_CREATE’))
    

    要实施此策略,请输入以下命令。 第三行将时间戳转换为UTC格式。

    LC=’2017-02-21 04:56 IST’
    echo $LC
    LCU=$(date +"%Y-%m-%d %H:%M" -d "$LC" -u)
    echo $LCU
    mmapplypolicy gpfs0 -P policy -I defer -f /tmp -M LAST_CREATE="$LCU"
    

    /tmp/list.files文件包含所选文件的列表。

    您可以修改SHOW子句以列出任何文件属性。 有关更多信息,请参阅“SQL表达式中的文件属性”

使用具有策略规则的宏处理实用程序

在评估策略规则之前,GPFS调用m4宏处理器来处理策略文件。

这种处理允许您将一些传统的m4工具合并到策略文件中,并定义简单的和参数化的宏,有条件地包括文本、执行条件求值、执行简单的字符串操作、执行简单的整数运算等等。

注意:GPFS使用m4内置的changequote宏将引号对更改为[],并使用changecom宏将注释对更改为/ * * /(如在C编程语言中)。

利用m4作为前端处理器简化了编写策略并生成易于理解和维护的策略。 以下是使用几个m4样式宏定义编写的“策略规则:示例和提示”中的示例15:

define(access_age,(DAYS(CURRENT_TIMESTAMP) - DAYS(ACCESS_TIME)))
define(weight_expression,
      CASE
      WHEN access_age > 365
        THEN 100000 + access_age
      WHEN access_age < 30
        THEN 0
      ELSE
        KB_ALLOCATED
      END
)

RULE year-old MIGRATE FROM POOL pool_X
  THRESHOLD(90,50) WEIGHT(weight_expression)
  TO POOL pool_ZZ
  WHERE access_age > 365
  
RULE 3month-old MIGRATE FROM POOL pool_X
  THRESHOLD(90,80) WEIGHT(weight_expression)
  TO POOL pool_ZZ
  WHERE access_age > 90

如果希望使用MB或GB而不是KB来表示文件大小,以及使用SUNDAY, MONDAY等而不是1、2等来表示一周中的几天,则可以使用如下所示的宏和规则:

define(MB_ALLOCATED,(KB_ALLOCATED/1024.0))
define(GB_ALLOCATED,(KB_ALLOCATED/1048576.0))
define(SATURDAY,7)
define(SUNDAY,1)
define(MONDAY,2)
define(DAY_OF_WEEK, DayOfWeek(CURRENT_DATE))

RULE ’gb1’ WHEN(DAY_OF_WEEK IN (SATURDAY,SUNDAY))
   MIGRATE TO POOL ’ypooly’ WHERE GB_ALLOCATED >= .015
RULE ’mb4’ MIGRATE TO POOL ’zpoolz’ WHERE MB_ALLOCATED >= 4

mmapplypolicy命令提供 -M选项,可用于在调用命令时指定m4宏定义。 策略规则可以包括变量标识符,其值可以使用mmapplypolicy命令上的一个或多个 -M选项进行设置。 然后,策略规则可以将文件属性与宏定义变量当前提供的值进行比较。

除此之外,这允许您创建单个策略文件并将其重新用于增量备份,而无需为每个备份编辑文件。 例如,如果您的策略文件包含以下规则:

RULE EXTERNAL POOL ’archive’ EXEC ’/opts/hpss/archiveScript’ OPTS ’-server archive_server’
RULE ’mig1’ MIGRATE TO POOL ’dead’ WHERE ACCESS_TIME < TIMESTAMP(deadline)
RULE ’bak1’ MIGRATE TO POOL ’archive’ WHERE MODIFICATION_SNAPID > last_snapid

然后,如果您调用具有这些选项的mmapplypolicy

mmapplypolicy ... -M "deadline=’2006-11-30’" -M "last_snapid=SNAPID(’2006_DEC’)" \
-M archive_server="archive.abc.com"

“mig1”规则将自2006/11/30以来未访问的旧文件迁移到名为“dead”的联机池。 “bak1”规则将自2006_DEC快照以来已更改的文件迁移到名为“archive”的外部池。 调用外部脚本/opts/hpss/archiveScript时,其参数将包含“-server archive.abc.com”。

管理策略

策略和它们所包含的规则用于将文件分配给特定的存储池。

存储池通常包含一组卷,这些卷为特定用途提供特定的服务质量,例如存储特定应用程序或特定业务部门的所有文件。

管理策略包括:

  • “创建策略”
  • “安装策略”
  • “更改活动的策略”
  • “列出策略”
  • “验证策略”
  • “删除策略”
创建策略

按照这些指导原则为策略创建一个文本文件。

  • 策略必须至少包含一个规则。
  • 策略文件的大小限制为1 MB。
  • 将文件放置策略应用于文件时,策略引擎会从顶部开始按顺序扫描策略中的规则列表,以确定应用于该文件的规则。 当策略引擎找到适用于该文件的规则时,它将停止处理规则并将该文件分配给相应的存储池。 如果不适用规则,则策略引擎会向应用程序返回EINVAL错误代码。

    **注意:**策略规则列表的最后一个放置规则应采用以下格式,以便在未应用其他放置规则时将文件分配给默认池:

    RULE 'DEFAULT' SET POOL 'default-data-pool'
    

对于升级到V4.1.1或更高版本的文件系统:如果mmchpolicy没有为文件系统安装SET POOL策略规则,则系统就像单个规则SET POOL 'first-data-pool’生效一样, 其中first-data-pool是可用于文件数据存储的第一个非系统池,如果这样的非系统池可用。 (“Firstmost”是根据所有池的内部索引的第一个。)但是,如果没有安装策略规则且没有非系统池,则系统就像SET POOL “system”生效一样。

对于升级到V4.1.1的文件系统:在升级文件系统之前,如果文件系统不存在SET POOL规则(由mmchpolicy设置),则所有数据都存储在 ‘system’ 池中。

  • 策略中的注释必须以/*开头,并以*/结尾:
/* This is a comment */

有关更多信息,请参阅“策略规则”主题。

安装策略

按照以下准则安装策略。

要安装策略:

  1. 创建包含所需策略规则的文本文件。
  2. 发出mmchpolicy命令。
使用阈值在池之间迁移数据

任何一个在线存储池中的耗尽空间都会生成NO_SPACE事件,即使其他在线存储池中可能存在空间。 要创建可用空间,可以将文件数据移动到其它在线存储池,删除或移动到外部存储池。

分层存储解决方案可以通过监视文件系统空间使用情况以及在系统超出指定阈值时将数据迁移到其它存储池来避免NO_SPACE事件。 通过使用策略中的THRESHOLD关键字以及高水位线和低水位线,策略可用于使用阈值监控空间使用情况。 可以使用mmchpolicy命令将阈值策略应用于文件系统。

如果文件系统空间不足,则会生成NO_SPACE事件。 lowDiskSpace事件需要阈值。 如果指定了阈值,则会生成lowDiskSpace事件。

GPFS为NO_SPACE和lowDiskSpace事件提供用户出口。 使用mmaddcallback命令,可以指定在发生这些事件之一时运行的脚本。 有关更多信息,请参阅IBM Spectrum Scale:命令和编程参考中的mmaddcallback命令主题。

具有被mmapplypolicy使用的策略规则的文件是当前安装在文件系统中的文件。 HSM用户最好定义迁移或删除规则,以减少每个在线存储池的使用情况。 使用高和低THRESHOLD定义的迁移规则确定用于发信号通知该池的lowDiskSpace事件的阈值。 由于可以定义多个迁移规则,因此池的阈值是该池规则设置的高阈值的最小值。 每个池都有自己的阈值。 没有迁移规则的池不会发出lowDiskSpace事件的信号。

为了启用策略所需的低空间事件,必须将enableLowspaceEvents全局参数设置为“yes”。 要查看此设置的当前状态,请运行mmlsconfigmmchconfig enableLowspaceEvents=yes以在必要时进行设置。

注意:必须在所有节点上重新启动GPFS才能使此设置生效。 必须添加回调,以便在生成低空间事件时触发策略运行。 添加回调的一种简单方法是使用mmstartpolicy命令。

要添加回调,请运行此命令。 以下命令在一行中:

mmaddcallback MIGRATION --command /usr/lpp/mmfs/bin/mmstartpolicy --event lowDiskSpace --parms "%eventName %fsName --single-instance"

需要使用 –single-instance标志来避免同时在文件系统上运行多个迁移。

更改活动的策略

当您准备具有新的或更改的策略规则的文件时,请发出mmchpolicy命令。

mmchpolicy命令激活以下事件序列:

  1. 策略文件被读入内存,信息将传递到当前文件系统管理器节点。
  2. 策略规则由文件系统管理器验证。
  3. 如果策略文件包含不正确的规则,则不会进行任何更新并返回错误。
  4. 如果未检测到错误,则新策略规则将安装在内部文件中。

策略更改会立即在已挂载的受影响的文件系统的所有节点上生效。 对于未安装文件系统的节点,策略更改将在下一次挂载文件系统时生效。

列出策略

使用mmlspolicy命令列出策略时,请遵循以下准则。

mmlspolicy命令显示给定文件系统的策略信息。 显示的信息是:

  • 安装策略文件的时间。
  • 安装策略文件的用户。
  • 原始策略文件的首行。

mmlspolicy -L命令返回已安装(原始)的策略文件。 这将显示安装时在策略文件中的所有规则和注释。 如果要更改策略规则,这非常有用 - 只需使用mmlspolicy -L命令检索原始策略文件并进行编辑即可。

验证策略

验证策略文件时,请遵循此准则。

mmchpolicy -I test命令验证但不安装策略文件。

删除策略

删除当前策略规则并恢复文件放置策略时,请遵循此准则。

要删除当前策略规则并恢复默认GPFS文件放置策略,请在mmchpolicy命令中将DEFAULT指定为策略文件的名称。 这相当于只使用一个规则安装策略文件:

RULE ’DEFAULT’ SET POOL ’system’
使用–sort-command参数提高性能

要提高mmapplypolicy命令的性能,请遵循以下准则。

提高mmapplypolicy命令性能的一种可能方法是指定要使用的备用排序命令,而不是操作系统提供的默认排序命令。 为此,请发出mmapplypolicy --sort-command SortCommand,指定备用命令的可执行路径。

例如,在AIX上,可以在AIX Toolbox for Linux Applications的coreutils包中免费获得的GNU sort程序通常可以比标准的AIX排序命令更快地执行大型排序任务。 如果要指定GNU排序程序,可以使用以下命令:mmapplypolicy --sort-command /opt/freeware/bin/sort

在对大量文件发出mmapplypolicy —sort-command之前,首先对少量文件执行备用排序命令和默认排序命令之间的性能比较,以确定备用命令实际上是否更快。

如果指定备用排序命令,建议您将其安装在所有群集节点上。

在非常大的文件系统中提高性能

了解如何在非常大的文件系统中提高mmapplypolicy命令的性能。

以下操作可以提高性能:

  • system池放在最快的可用存储上,可以是固态存储,也可以是硬盘。在这两种情况下,将系统池分散到多个存储设备上,以便它们可以并行地、彼此独立地进行查找。验证逻辑磁盘不映射到同一物理磁盘。

    策略引擎需要对文件系统元数据进行许多I/O操作。 在尽可能快的存储上存储元数据可以提高策略执行的性能。

  • mmapplypolicy命令行中包含 -N参数和 -g参数。

    • -N参数指定运行策略代码的并行实例的节点列表。
    • -g参数指定可由 -N参数指定的节点访问的全局工作目录。
    • 当指定 -N-g时,mmapplypolicy在执行期间使用高性能和容错协议。
  • 如果处理文件的确切顺序并不重要,请考虑指定 –choice-algorithm fast算法,该算法使用 -N-g选项进行并行处理。

  • 如果处理文件的顺序根本不重要,请在MIGRATELISTDELETE策略规则中指定WEIGHT(0)

  • 将文件系统格式更新为格式级别13.01(GPFS 3.5.0.1)或更高版本。 此级别的文件系统可以支持以下两个功能:

    • 在inode中存储小目录和小文件。
    • 快速扩展属性。 对于此功能,还必须通过运行mmmigratefs来更新文件系统。

这两个功能可以提高mmapplypolicy命令的性能。 请参阅以下链接:

“IBM Spectrum Scale版本之间的文件系统格式更改”。
在“IBM Spectrum Scale:管理指南”中“完成向IBM Spectrum Scale的新级别的迁移”

文件集

在大多数文件系统中,文件层次结构表示为一系列树状结构形式的目录。每个目录包含其它目录,文件或其它文件系统对象(如符号链接和硬链接)。 每个文件系统对象都有一个与之关联的名称,并且在命名空间中表示为树的节点。

另外,GPFS使用称为文件集的文件系统对象。 文件集是文件系统命名空间的一个子树,在许多方面它的行为与独立文件系统类似。 文件集提供了一种对文件系统进行分区的方法,以允许比整个文件系统更精细的管理操作:

  • 文件集可用于定义数据块和索引的配额。
  • 拥有的文件集是每个文件的属性,可以在策略中指定,以控制文件数据的初始数据放置,迁移和复制。 请参阅“自动管理文件的策略”
  • 可以创建文件集快照,而不是创建整个文件系统的快照。

GPFS支持独立和从属文件集。 独立文件集是一个具有自己的inode空间的文件集。 inode空间是为独立文件集保留的inode编号范围的集合。 inode空间可实现更高效的每个文件集功能,例如文件集快照。 从属文件集共享现有独立文件集的inode空间。 从属文件集中创建的文件的索引是从独立文件集保留的 inode 编号范围的同一集合中分配的。

在创建文件系统时,只存在一个称为文件集的文件集。 根文件集是不能删除的独立文件集。 它包含根目录以及任何系统文件(如配额文件)。 新文件和目录被创建后,它们自动成为父目录文件集的一部分。 文件所属的文件集对于普通文件访问而言基本上是透明的,但可以使用mmlsattr -L命令将包含的文件集与每个文件的其他属性一起显示。

GPFS文件系统的根目录也是根文件集的根目录。

文件集命名空间

新建的文件集由文件集根目录的空目录组成,并且最初未链接到文件系统的命名空间。 一个新建的文件集在用户通过发出mmlinkfileset命令连接到命名空间之前对用户是不可见的。

文件集通过称为链接的特殊链接连接到命名空间。 链接是一种特殊的目录条目,非常类似于POSIX硬链接,它将一个文件集(源)的目录中的名称连接到另一个文件集(目标)的根目录。 文件集可能只是一个链接点的目标,因此文件集在命名空间中具有唯一的位置,并且具有到其任何目录的唯一路径。 结点的目标称为子文件集,并且文件集可以包含任意数量的子项。 从用户的角度来看,结点始终显示为一个目录,但不允许用户在结点上发出unlinkrmdir命令。

一旦创建了文件集并将其链接到命名空间中,管理员就可以通过发出mmunlinkfileset命令来将文件集与命名空间断开连接。 这使得文件集内的所有文件和目录都无法访问。 如果其它文件集链接在其下面,则其它文件集变得不可访问,但它们保持链接,并且当文件集重新链接时将再次可访问。 如果存在打开的文件,则取消链接文件集(如卸载文件系统)将失败。 mmunlinkfileset命令有一个强制选项来关闭文件并强制取消链接。 如果文件集中存在打开的文件,并且文件集与强制选项未关联,将来对这些文件的引用将导致ESTALE错误。 一旦文件集被取消链接,它可以重新链接到命名空间的原始位置或任何其他位置(因为在未链接父文件集时它们不是命名空间的一部分, 因此无法将其链接到它的子命名空间中)。

文件集中的命名空间仅限于单个连接的子树。换言之, 文件集只有一个根目录, 并且没有其他入口点(例如来自其它文件集目录的硬链接)。文件集始终连接在根目录下, 只有链接才会连接。因此, 硬链接不能跨越文件集边界。当然, 符号链接可用于提供命名空间中任何文件系统对象的快捷方式。

根文件集是一个例外。 根文件集使用标准mount命令连接到本地名称空间。 无法使用GPFS文件集命令创建,链接,取消链接或删除它。

请参阅“管理文件集” 。

文件集和配额

GPFS配额命令支持文件集块和inode分配的-j选项。

文件集中块和inode的配额限制与特定用户或用户组的限制无关。 请参阅“IBM Spectrum Scale:命令和编程参考”中的以下命令:

  • mmdefedquota

  • mmdefedquotaon

  • mmdefedquotaoff

  • mmedquota

  • mmlsquota

  • mmquotaoff

  • mmquotaon

  • mmrepquota

另外,请参阅以下命令的**–perfileset-quota**参数的说明:

  • mmchfs
  • mmcrfs
  • mmlsfs

文件集和存储池

虽然文件集中的每个文件都物理地驻留在存储池中的块中,但文件集与存储池没有特别的关系。 这种关系是多对多的; 文件集中的每个文件都可以存储在不同的用户存储池中。

存储池可以包含来自许多文件集的文件。 但是,特定文件的所有数据完全包含在一个存储池中。

使用文件放置策略, 可以指定在特定文件集中创建的所有文件都将存储在特定的存储池中。使用文件管理策略, 您可以定义在文件的生命周期中如何移动或删除特定文件集中的文件。请参阅 “策略规则: 术语”。

文件集和全局快照

GPFS 全局快照保留整个文件系统的内容, 包括它的所有文件集, 甚至是未链接的。

快照中的文件集状态不受活动文件系统中对文件集所做的更改 (如链接或删除) 的影响。可以通过**.snapshots**和命名空间 (包括所有链接的文件集) 来访问保存的文件系统, 这与创建快照时的显示相同。在快照中未链接的文件集不可访问, 因为它们位于活动文件系统中。但是, 还原快照还会还原未链接的文件集, 然后可以重新链接和访问它。

如果文件集包含在全局快照中,则可以将其删除,但它不会完全从文件系统中删除。 在这种情况下,文件集被清空所有内容并被赋予“已删除”状态。 即使在文件集被删除后,文件集的内容在包含文件集的快照中(即通过包含**.snapshots**组件的某个路径)仍然可用,因为在创建快照时会保存文件集的所有内容。 文件集保持删除状态,直到包含它的最后一个快照被删除,此时文件集被自动删除。

如果快照是在创建文件集后创建的,则文件集将包含在全局快照中。 删除的文件集显示在mmlsfilesetmmlsfileset --deleted命令的输出中,-L选项可用于显示包含文件集的最新快照。

从全局快照还原期间,可以更改快照中包含的文件集的属性。 包含在全局快照中的文件集将恢复到原来的状态,并删除较新的文件集。 此外,恢复可能会取消删除已删除的文件集并将链接的文件集更改为未链接,反之亦然。 如果文件集的名称在拍摄快照后发生了更改,则将恢复旧的文件集名称。

文件集级快照

可以创建文件集快照,而不是创建整个文件系统的全局快照,以保留单个独立文件集以及共享相同inode空间的所有从属文件集的内容。

如果独立文件集具有共享其inode空间的从属文件集,则独立文件集的快照也将包含那些从属文件集。 换句话说,文件集快照是整个inode空间的快照。

每个独立的文件集都有自己的隐藏的**.snapshots目录,该目录位于包含任何文件集快照的文件集的根目录中。 mmsnapdir命令允许设置一个选项,通过所有独立文件集的根目录中的.snapshots使全局快照也可用。 文件系统根目录中的.snapshots目录列出了根文件集的全局快照和文件集快照(根文件集是独立的文件集)。 此行为可以使用mmsnapdir**命令进行自定义。

文件集快照名称在不同文件集中不必是唯一的,所以对两个不同文件集的文件集快照使用相同名称是有效的,因为它们将出现在两个不同文件集根目录下的**.snapshots**下。

您可以使用mmrestorefs命令恢复独立的文件集快照数据和属性文件。 有关完整的使用信息,请参阅IBM Spectrum Scale:命令和编程参考中的主题mmrestorefs命令

文件集和备份

mmbackup命令和IBM Spectrum Protect不知道文件集的存在。 恢复已备份到IBM Spectrum Protect的文件系统时,文件将恢复为原始路径名,而不管它们最初是哪个文件集的一部分。

IBM Spectrum Protect没有机制在还原期间创建或链接文件集。 因此,如果文件系统迁移到IBM Spectrum Protect,然后文件集被取消链接或删除,则恢复或撤销文件系统不会恢复文件集。

在从备份完全还原期间,所有文件集信息都将丢失,并且所有文件都将还原到根文件集中。 建议您保存mmlsfileset命令的输出以帮助重建文件集名称和链结位置。 保存mmlsfileset -L还允许重建文件集注释。 要完全还原文件集配置, 需要两个命令输出。

自从备份完成以后,如果文件集已被删除,未链接或其结点已移动,则部分还原也会导致混淆。 例如,如果备份的数据位于已被取消链接的文件集中,则恢复过程会将其放入父文件集中的文件和目录中。 未链接的文件集不能重新链接到同一位置,直到恢复的数据被移出。 同样,如果文件集已被删除,恢复其内容不会重新创建已删除的文件集,但内容将被恢复到父文件集中。

由于mmbackup命令通过遍历目录结构进行操作,因此它不包含未链接的文件集的内容,即使它们是文件系统的一部分。 如果希望将这些文件集包含在备份中,则应将它们重新链接,或许将其放入临时位置。 相反,暂时取消链接文件集是一种方便的机制,可以将其从备份中排除。

注释

建议在备份时不要取消链接文件集。 在mmbackup运行期间取消链接文件集可能会导致以下情况:

  • 无法备份属于未链接文件集的文件中的更改
  • 在上一个mmbackup运行时备份的文件到期

总之, 文件集信息应通过定期记录 mmlsfileset 输出在文件系统中的某处保存,并将其保存为备份过程的一部分。 在还原期间,当创建备份后文件集结构发生更改时, 应谨慎执行。

注意:

如果您正在使用IBM Spectrum Protect 备份-归档客户端,则在取消包含由IBM Spectrum Protect备份的数据的文件集时,请务必小心。 IBM Spectrum Protect按路径名跟踪文件,不会跟踪文件集。 因此,当您取消链接文件集时,IBM Spectrum Protect显示您删除了文件集的内容。 因此,IBM Spectrum Protect备份 - 归档客户端会停用TSM服务器上的数据,这可能会导致在到期过程中丢失备份数据。

管理文件集

管理您的文件集包括:

  • “创建文件集”
  • “删除文件集”
  • “链接文件集”
  • “取消链接文件集”
  • “更改文件集属性”
  • “显示文件集信息”
创建文件集

使用mmcrfileset命令创建文件集。

默认情况下,创建的文件集是共享根inode空间的从属文件集。 –inode-space ExistingFileset选项可用于创建将与现有文件集共享inode空间的从属文件集。 指定的ExistingFileset可以是root或任何其他独立文件集,但不能是保留关键字new–inode-space new选项可用于创建具有自己的专用inode空间的独立文件集。

新创建的文件集由文件集根的空目录组成, 并且最初未链接到现有命名空间。因此, 一个新的文件集是不可见的, 也不能将文件添加到它,但文件集名称是有效的, 管理员可以为其建立配额或策略。管理员必须通过发出mmlinkfileset命令将文件集链接到文件系统命名空间中所需的位置, 以便使用它。

文件集链接后,管理员可以更改新文件集根目录的所有权和权限,默认为root和0700,以允许用户访问它。 复制到或在文件集目录中创建文件和目录,文件集中的目录将成为新文件集的一部分。

文件集名称必须遵循以下约定:

  • 字符串必须少于256个字符。
  • 在文件系统中必须是唯一的。
  • 名称root保留给文件系统根目录的文件集。

有关完整的使用信息,请参阅“IBM Spectrum Scale:命令和编程参考”中的主题mmcrfileset命令mmlinkfileset命令

删除文件集

使用mmdelfileset命令删除文件集。

删除文件集时,请注意几点注意事项:

  • 根文件集不能被删除。
  • 除非指定了**-f** 标志, 否则不能删除非空文件集。
  • 当前链接到命名空间的文件集在用mmunlinkfileset命令断开连接之前无法删除。
  • 任何时候都可以删除从属文件集。
  • 如果有独立文件集包括从属文件集或文件集快照,则不能删除该独立文件集。
  • 删除文件集或全局快照中包含的从属文件集会将其从活动文件系统中删除,但它处于已删除状态且仍属于的文件系统的一部分。
  • 删除任何全局快照中包含的独立文件集会将其从活动文件系统中删除,但它处于已删除状态,且仍属于文件系统的一部分。
  • 处于已删除状态的文件集显示在mmlsfileset输出中,文件集名称在括号中。 如果指定了**-L标志,则还会显示最新的包括快照。 mmlsfileset命令的–deleted**选项可用于仅显示已删除的文件集。
  • 通过包含.snapshots组件的某个路径名称,已删除文件集的内容仍可在快照中使用,因为它是在创建快照时保存的。
  • 当包含文件集的最后一个快照已被删除时,文件集将从文件系统中完全删除。

有关完整的使用信息,请参阅“IBM Spectrum Scale:命令和编程参考”中的主题mmdelfileset命令mmlsfileset命令mmunlinkfileset命令

链接文件集

创建文件集后,必须创建一个链接,以使用mmlinkfileset命令将文件集链接到文件系统命名空间中的所需位置。

文件系统必须mount才能链接文件集。 独立的文件集只能链接到命名空间中任何位置的一个位置,由JunctionPath参数指定:

  • 根目录
  • 任何子目录
  • 根文件集或任何其他文件集

从属文件集只能在其自己的 inode 空间内链接。

如果未指定JunctionPath,则会在当前目录中创建联结,并且与正在链接的文件集名称相同。 命令完成后,新的联结将显示为普通目录,不同之处在于不允许用户使用rmdir命令取消链接或将其删除。 用户可以使用目录上的mv命令移动到父文件集中的新位置,但不允许mv命令将结点移动到不同的文件集。

有关完整的使用信息,请参阅“IBM Spectrum Scale:命令和编程参考”中的主题mmlinkfileset命令

取消链接文件集

使用mmunlinkfileset命令删除到文件集的联结,该命令仅从活动的目录命名空间中断开文件集链接。 快照中文件集的链接状态或未链接状态不受影响。如果文件集中有文件已打开,则取消链接将失败,除非指定了**-f**选项。 根文件集不能被取消链接。

发出mmunlinkfileset命令后,可以使用mmlinkfileset命令将文件集重新链接到不同的父级。 在文件集重新链接之前,它不可访问。

注意:

如果您正在使用IBM Spectrum Protect 备份-归档客户端,则在取消包含由IBM Spectrum Protect备份的数据的文件集时,请务必小心。 IBM Spectrum Protect按路径名跟踪文件,不会跟踪文件集。 因此,当您取消链接文件集时,IBM Spectrum Protect显示您删除了文件集的内容。 因此,IBM Spectrum Protect备份 - 归档客户端会停用IBM Spectrum Protect服务器上的数据,这可能会导致在到期过程中丢失备份数据。

有关完整的使用信息,请参阅“IBM Spectrum Scale:命令和编程参考”中的主题mmunlinkfileset命令

更改文件集属性

要更改文件集的链接,必须先使用mmunlinkfileset命令取消链接文件集,然后使用mmlinkfileset命令创建新链接。

要更改现有文件集的属性(包括文件集名称),请使用mmchfileset命令。

注释:

在HSM管理的文件系统中,在文件集之间移动或重命名已迁移的文件将导致从IBM Spectrum Protect服务器撤回日期。

有关完整的使用信息,请参阅“IBM Spectrum Scale:命令和编程参考”中的主题mmchfileset命令mmlinkfileset命令mmunlinkfileset命令

显示文件集信息

使用mmlsfileset命令显示文件集状态和属性。

显示的一些属性包括:

  • 文件集的名称。
  • 文件集的文件集标识符。
  • 文件集的连接路径。
  • 文件集的状态。
  • 文件集的根inode号。
  • 文件集的路径(如果链接)。
  • Inode空间。
  • 用户提供的注释 (如果有的话)。

有关完整的使用信息,请参阅“IBM Spectrum Scale:命令和编程参考”中的主题mmlsfileset命令。

要显示包含给定文件的文件集的名称,请运行mmlsattr命令并指定**-L选项。 有关完整的使用信息,请参阅“IBM Spectrum Scale:命令和编程参考”中的主题mmlsattr**命令。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值