更新时间:2026-08-14 GMT+08:00

列举并行文件系统

功能介绍

并行文件系统(Parallel File System)是对象存储服务(Object Storage Service,OBS)提供的一种经过优化的高性能文件系统,提供毫秒级别访问时延,TB/s级别带宽和百万级别的IOPS,能够快速处理高性能计算(HPC)工作负载。

作为对象存储服务的子产品,并行文件系统支持用户按照标准的OBS接口读取数据。也支持通过部署在弹性云服务器中的PFS客户端(obsfs工具),按照POSIX文件语义读写数据;通过obsfs用户可以将创建的并行文件系统挂载到云端Linux服务器上,并能像操作本地文件系统一样对并行文件系统内的文件和目录进行在线处理,包括:创建和删除文件/目录,重命名文件/目录,修改写文件等操作。

您可以通过ObsClient.listBuckets列举已存在的并行文件系统。

接口约束

  • 您必须拥有obs:bucket:ListAllMyBuckets权限,才能获取并行文件系统列表。建议使用IAM进行授权,配置方式详见使用IAM自定义策略
  • OBS支持的region以及region与endPoint的对应关系,详细信息请参见地区与终端节点
  • 并行文件系统暂不支持配额配置功能,默认无配额限制。
  • 必须设置ListBucketsRequest.setBucketType参数为BucketTypeEnum.PFS,才可以列举出当前用户的并行文件系统。
  • 设置ListBucketsRequest.setQueryLocation参数为true后,可在列举并行文件系统时查询并行文件系统的区域位置。

方法定义

obsClient.listBuckets(ListBucketsRequest request)

请求参数说明

表1 请求参数列表

参数名称

参数类型

是否必选

描述

request

ListBucketsRequest

必选

参数解释

获取并行文件系统列表请求参数,详见ListBucketsRequest

表2 ListBucketsRequest

参数名称

参数类型

是否必选

描述

queryLocation

boolean

可选

参数解释

是否同时查询并行文件系统的区域位置。

取值范围:

  • true:同时查询并行文件系统的区域位置。
  • false:不查询并行文件系统的区域位置。

默认取值:

false

bucketType

BucketTypeEnum

可选

参数解释

列举指定类型的并行文件系统。

取值范围:

列举并行文件系统时,bucketType必须选择PFS。

默认取值:

返回结果说明

表3 ListBucketsResult

参数名称

参数类型

描述

statusCode

int

参数解释:

HTTP状态码。

取值范围:

状态码是一组从2xx(成功)到4xx或5xx(错误)的数字代码,状态码表示了请求响应的状态。

完整的状态码列表请参见状态码

默认取值:

responseHeaders

Map<String, Object>

参数解释:

响应消息头列表,由多个元组构成。元组中String代表响应消息头的名称,Object代表响应消息头的值。

默认取值:

owner

Owner

参数解释:

并行文件系统拥有者信息,详见Owner

默认取值:

buckets

List<ObsBucket>

参数解释:

并行文件系统列表信息。详见ObsBucket

默认取值:

表4 Owner

参数名称

参数类型

描述

id

String

参数解释

桶所有者的账号ID,即domain_id。

displayName

String

参数解释:

所有者的账号名。

表5 StorageClassEnum

常量名

原始值

说明

STANDARD

STANDARD

标准存储。

WARM

WARM

低频访问存储。

COLD

COLD

归档存储。

表6 预定义ACL

常量名

说明

AccessControlList.REST_CANNED_PRIVATE

私有读写。

桶或对象的所有者拥有完全控制的权限,其他任何人都没有访问权限。

AccessControlList.REST_CANNED_PUBLIC_READ

公共读。

设在桶上,所有人可以获取该桶内对象列表、桶内多段任务、桶的元数据、桶的多版本。

设在对象上,所有人可以获取该对象内容和元数据。

AccessControlList.REST_CANNED_PUBLIC_READ_WRITE

公共读写。

设在桶上,所有人可以获取该桶内对象列表、桶内多段任务、桶的元数据、上传对象、删除对象、初始化段任务、上传段、合并段、拷贝段、取消多段上传任务。

设在对象上,所有人可以获取该对象内容和元数据。

AccessControlList.REST_CANNED_PUBLIC_READ_DELIVERED

桶公共读,桶内对象公共读。

设在桶上,所有人可以获取该桶内对象列表、桶内多段任务、桶的元数据,可以获取该桶内对象的内容和元数据。

不能应用于对象。

AccessControlList.REST_CANNED_PUBLIC_READ_WRITE_DELIVERED

桶公共读写,桶内对象公共读写。

设在桶上,所有人可以获取该桶内对象列表、桶内多段任务、桶的元数据、上传对象、删除对象、初始化段任务、上传段、合并段、拷贝段、取消多段上传任务,可以获取该桶内对象的内容和元数据。

不能应用于对象。

AccessControlList.REST_CANNED_BUCKET_OWNER_FULL_CONTROL

设在对象上,桶和对象的所有者拥有对象的完全控制权限,其他任何人都没有访问权限。

默认情况下,上传对象至其他用户的桶中,桶拥有者没有对象的控制权限。对象拥有者为桶拥有者添加此权限控制策略后,桶所有者可以完全控制对象。

例如,用户A上传对象x至用户B的桶中,系统默认用户B没有对象x的控制权。当用户A为对象x设置bucket-owner-full-control策略后,用户B就拥有了对象x的控制权。

表7 AccessControlList

参数名称

参数类型

是否必选

描述

owner

Owner

可选

参数解释

并行文件系统所有者的信息,详见Owner

delivered

boolean

可选

参数解释:

并行文件系统的ACL是否向并行文件系统内对象传递,作用于并行文件系统内所有对象。

取值范围:

true:是,并行文件系统ACL向并行文件系统内对象传递。

false:否,并行文件系统ACL不向并行文件系统内对象传递,仅作用于并行文件系统。

默认取值:

false

grants

Set<GrantAndPermission>

可选

参数解释:

被授权用户相关信息,详见GrantAndPermission

表8 GrantAndPermission

参数名称

参数类型

是否必选

描述

grantee

CanonicalGranteeGroupGrantee

必选

参数解释:

被授权用户或用户组。

取值范围:

被授权用户的用户信息,详见CanonicalGrantee

被授权用户组的用户组信息,详见GroupGrantee

permission

Permission

必选

参数解释:

用户或用户组被授予的权限。

取值范围:

详见Permission

默认取值:

delivered

boolean

可选

参数解释:

并行文件系统的ACL是否向并行文件系统内对象传递,作用于并行文件系统内所有对象。

取值范围:

true:是,并行文件系统ACL向并行文件系统内对象传递。

false:否,并行文件系统ACL不向并行文件系统内对象传递,仅作用于并行文件系统。

默认取值:

false

表9 CanonicalGrantee

参数名称

参数类型

描述

grantId

String

参数解释:

被授权用户的账号ID,即domain_id。

displayName

String

参数解释:

被授权用户的账号名。

表10 GroupGrantee

常量名

说明

ALL_USERS

所有用户。

AUTHENTICATED_USERS

授权用户,已废弃。

LOG_DELIVERY

日志投递组,已废弃。

表11 Permission

常量名

原始值

说明

PERMISSION_READ

READ

读权限。

如果有桶的读权限,则可以获取该桶内对象列表、桶内多段任务、桶的元数据、桶的多版本。

如果有对象的读权限,则可以获取该对象内容和元数据。

PERMISSION_WRITE

WRITE

写权限。

如果有桶的写权限,则可以上传、覆盖和删除该桶内任何对象和段。

此权限在对象上不适用。

PERMISSION_READ_ACP

READ_ACP

读取ACL配置的权限。

如果有读ACP的权限,则可以获取对应的桶或对象的权限控制列表(ACL)。

桶或对象的所有者永远拥有读对应桶或对象ACP的权限。

PERMISSION_WRITE_ACP

WRITE_ACP

修改ACL配置的权限。

如果有写ACP的权限,则可以更新对应桶或对象的权限控制列表(ACL)。

桶或对象的所有者永远拥有写对应桶或对象的ACP的权限。

拥有了写ACP的权限,由于可以更改权限控制策略,实际上意味着拥有了完全访问的权限。

PERMISSION_FULL_CONTROL

FULL_CONTROL

完全控制权限,包括对桶或对象的读写权限,以及对桶或对象ACL配置的读写权限。

如果有桶的完全控制权限意味着拥有READ、WRITE、READ_ACP和WRITE_ACP的权限。

如果有对象的完全控制权限意味着拥有READ、READ_ACP和WRITE_ACP的权限。

表12 ObsBucket

参数名称

参数类型

描述

statusCode

int

参数解释:

HTTP状态码。

取值范围:

状态码是一组从2xx(成功)到4xx或5xx(错误)的数字代码,状态码表示了请求响应的状态。

完整的状态码列表请参见状态码

默认取值:

responseHeaders

Map<String, Object>

参数解释:

响应消息头列表,由多个元组构成。元组中String代表响应消息头的名称,Object代表响应消息头的值。

默认取值:

bucketName

String

参数解释

并行文件系统名。

约束限制:

  • 并行文件系统的名字需全局唯一,不能与已有的任何并行文件系统名称重复,包括其他用户创建的并行文件系统。
  • 并行文件系统命名规则如下:
    • 3~63个字符,数字或字母开头,支持小写字母、数字、“-”、“.”。
    • 禁止使用IP地址。
    • 禁止以“-”或“.”开头及结尾。
    • 禁止两个“.”相邻(如:“my..bucket”)。
    • 禁止“.”和“-”相邻(如:“my-.bucket”和“my.-bucket”)。
  • 同一用户在同一个区域多次创建同名并行文件系统不会报错,创建的并行文件系统属性以第一次请求为准。

默认取值:

owner

Owner

参数解释:

并行文件系统拥有者信息,详见Owner

creationDate

java.util.Date

参数解释:

并行文件系统创建时间。

默认取值:

location

String

参数解释

并行文件系统所在的区域。

约束限制:

该参数定义了并行文件系统将会被创建在哪个区域,如果使用的终端节点是obs.myhuaweicloud.com,可以不携带此参数;如果使用的终端节点不是obs.myhuaweicloud.com,则必须携带此参数。

取值范围:

当前有效的OBS区域和终端节点的更多信息,请参考地区和终端节点。终端节点即调用API的请求地址,不同服务不同区域的终端节点不同,您可以向企业管理员获取区域和终端节点信息。

默认取值:

终端节点为obs.myhuaweicloud.com且用户未设定区域时,默认为华北-北京一(cn-north-1)。

storageClass

StorageClassEnum

参数解释

创建并行文件系统时暂不支持配置并行文件系统默认存储类别。

acl

AccessControlList

参数解释

创并行文件系统时可指定并行文件系统的ACL,您可以使用预定义的ACL,也可以自定义ACL,有关访问控制列表(Access Control List,ACL)功能的详细信息可参见ACL功能介绍

取值范围:

默认取值:

AccessControlList.REST_CANNED_PRIVATE

bucketTypeEnum

BucketTypeEnum

参数解释

创建的并行文件系统类型。

取值范围:

列举并行文件系统时,bucketType为PFS。

默认取值:

代码示例

本示例用于列举并行文件系统。

import android.util.Log;
import com.obs.services.ObsClient;
import com.obs.services.exception.ObsException;
import com.obs.services.model.BucketType;
import com.obs.services.model.ListBucketsRequest;
import com.obs.services.model.ListBucketsResult;
import com.obs.services.model.ObsBucket;

// 注意:网络操作必须在子线程中执行,否则会抛出NetworkOnMainThreadException
new Thread(() -> {
    // 安全提示:硬编码AK/SK存在安全风险,建议从安全凭证管理系统获取
    String ak = System.getenv("ACCESS_KEY_ID");
    String sk = System.getenv("SECRET_ACCESS_KEY");
    String endPoint = "https://your-endpoint";

    ObsClient obsClient = null;
    try {
        obsClient = new ObsClient(ak, sk, endPoint);

        // 列举并行文件系统
        ListBucketsRequest request = new ListBucketsRequest();
        request.setBucketType(BucketType.PFS);
        request.setQueryLocation(true);

        ListBucketsResult result = obsClient.listBuckets(request);
        Log.i("ObsDemo", "列举并行文件系统成功,数量: " + result.getBuckets().size());

        for (ObsBucket bucket : result.getBuckets()) {
            Log.i("ObsDemo", "并行文件系统名: " + bucket.getBucketName()
                    + ",区域: " + bucket.getLocation()
                    + ",创建时间: " + bucket.getCreateDate()
                    + ",类型: " + bucket.getBucketType());
        }
    } catch (ObsException e) {
        Log.e("ObsDemo", "列举并行文件系统失败,HTTP状态码: " + e.getResponseCode()
                + ",错误码: " + e.getErrorCode()
                + ",错误信息: " + e.getErrorMessage());
    } finally {
        if (obsClient != null) {
            try {
                obsClient.close();
            } catch (Exception e) {
                Log.e("ObsDemo", "关闭ObsClient失败", e);
            }
        }
    }
}).start();