-
挂载的并行文件系统如何让其他用户访问? 一般情况下,只有执行挂载命令的用户有访问挂载目录的权限。 如果要允许其他用户访问挂载目录,可以在obsfs挂载命令中指定allow_other参数,命令示例: ./obsfs filesystem001 /mnt/mount_path/ -o url=obs.cn-north-1.myhuaweicloud.com -o passwd_file=/etc/passwd-obsfs -o big_writes -o max_write=131072 -o allow_other -o use_ino
-
配置运行环境 obsfs的运行环境依赖openssl-devel、fuse、fuse-devel等软件包,运行obsfs之前,您需要通过命令配置其依赖环境。 obsfs支持使用的libfuse版本为2.9.7,2.9.8或2.9.9。如果当前您的libfuse是其他版本,请参考libfuse安装指导进行安装。 您可以通过操作系统自有的查看命令查看libfuse版本,也可以通过以下命令查找libfuse.so以获得当前已安装版本。 find / -name libfuse.so* CentOS 7 yum install -y openssl-devel fuse fuse-devel Ubuntu 16 apt-get install -y libfuse-dev libcurl4-openssl-dev
-
安装obsfs 在一台Windows计算机上,根据您Linux运行机的版本,下载到对应的obsfs软件包。 如果您在Linux系统中使用如下命令进行下载,请忽略步骤2。 wget obsfs下载地址 通过常见的跨平台传输工具(比如WinSCP),将软件包传输至您的Linux运行机。 在Linux运行机上,执行以下解压命令。 tar -xzvf obsfs软件包绝对路径/obsfs_xxx.tar.gz 您也可以使用以下命令,将软件包解压至指定目录。 tar -xzvf obsfs软件包绝对路径/obsfs_xxx.tar.gz -C 指定目录 切换到root用户,进入obsfs解压目录,执行以下命令安装obsfs。 bash install_obsfs.sh 请务必使用root用户进行安装,否则某些功能将无法正常使用。 您在执行安装命令后,crontab会添加一条定时任务,用于obsfs日志压缩转储,转储位置为/var/log/obsfs/。 crontab中的添加样例: */10 * * * * [ -f /opt/dfv/obsfs/obsfs_log_rotate.sh ] && bash /opt/dfv/obsfs/obsfs_log_rotate.sh
-
下载obsfs软件包 obsfs下载地址如表1所示。 表1 obsfs下载地址 Linux发行版 下载地址 CentOS 7 https://obs-community.obs.cn-north-1.myhuaweicloud.com/obsfs/current/obsfs_CentOS7.6_amd64.tar.gz sha256:625ef26e050f339812e91b655a41c7723163feccbe8ea427be10a512be34102f 软件包完整性验证方法 Ubuntu 16 https://obs-community.obs.cn-north-1.myhuaweicloud.com/obsfs/current/obsfs_Ubuntu16.04_amd64.tar.gz sha256:05c9ed58707734e98febb8534d8397727a5e99ce6df194a73f0bf26d0df35d8b 软件包完整性验证方法 下载时确认操作系统版本,安装的obsfs仅支持对应的Linux发行版本。 obsfs软件包仅支持openssl1.0.0及以下版本。如果您的开发环境没有openssl1.0.0及以下版本,请使用方式二:通过编译生成obsfs。 obsfs软件包下载地址下方的SHA256码用于验证软件包的完整性。验证方法如下: 对已下载的obsfs软件包生成SHA256码(以CentOS 7版本为例): sha256sum obsfs_CentOS7.6_amd64.tar.gz 对比生成的SHA256码和对应obsfs软件包下载地址下方的SHA256码。如果一致,则表示下载过程不存在丢包或对软件包的篡改。
-
约束与限制 本地挂载目录可以不为空,但是挂载后此目录下原有的内容将不可用,取消挂载后即可恢复。建议使用空目录作为挂载目录。 obsfs只支持挂载OBS并行文件系统,不支持挂载对象存储桶。 obsfs挂载OBS并行文件系统后,不支持作为ftp目录使用。 挂载至本地系统的并行文件系统不能提供与本地文件系统完全相同的性能或功能,使用时需要注意以下细节: 挂载目录中的文件或文件夹不支持硬链接命令。 创建的目录深度不超过45层。 因使用FUSE框架存在内核态与用户态切换,不适合高并发场景。 ls、stat等linux命令需要远程访问OBS服务器,所以性能较差。 一个并行文件系统支持挂载到多台云服务器,但数据一致性需由您自行维护,避免出现多台云服务器同时对一个文件并发写入的情况。 桶级的桶策略和
IAM 策略对obsfs挂载方式生效,目录级的桶策略和IAM策略对obsfs挂载方式访问不生效。
-
适用的操作系统 obsfs适用于Linux操作系统,具体说明和操作指导如表1所示。 表1 获取obsfs的方式 方式 说明 适用的Linux发行版 操作指导 直接下载 直接下载官方提供的软件包,在Linux配置运行环境后即可使用obsfs。 Ubuntu 16、CentOS 7 下载并安装obsfs 编译生成 下载托管在GitHub的源码,配置编译环境后通过源码中自带脚本生成obsfs。 Ubuntu 14、Ubuntu 16、Ubuntu 18、SUSE 12、CentOS 7、Fedora 28、RHEL 7、Debian 8、openSUSE Leap 42.1 通过编译生成obsfs
-
配置编译环境 编译环境用于在本地直接编译源码生成obsfs,不同的Linux发行版,编译环境配置命令也不相同。以下提供了在常见的Fedora/CentOS/RHEL/Debian/Ubuntu/SUSE/openSUSE等Linux发行版上,obsfs编译环境的配置命令。 CentOS 7、CentOS 8、Fedora 28、RHEL 7、RHEL 8 yum install -y gcc libstdc++-devel gcc-c++ fuse fuse-devel curl-devel libxml2-devel mailcap git automake make
yum install -y openssl-devel Ubuntu 14、Ubuntu 16、Ubuntu 18、Debian 8 apt-get install -y build-essential git libfuse-dev libcurl4-openssl-dev libxml2-dev mime-support automake libtool
apt-get install -y pkg-config libssl-dev SUSE 12、openSUSE Leap 42.1 zypper in -y automake curl-devel fuse fuse-devel gcc-c++ libxml2-devel make openssl-devel obsfs支持使用的libfuse版本为2.9.7,2.9.8或2.9.9。如果当前您的libfuse是其他版本,请参考libfuse安装指导进行安装。 您可以通过操作系统自有的查看命令查看libfuse版本,也可以通过以下命令查找libfuse.so以获得当前已安装版本。 find / -name libfuse.so*
-
开机自动挂载并行文件系统 以下内容以CentOS 7操作系统为例,介绍如何配置开机自动挂载。 使用root用户登录Linux运行机。 执行以下命令,创建一个/home/startobsfs.sh脚本文件。 vi /home/startobsfs.sh 按i进入编辑模式,将以下命令写入/home/startobsfs.sh脚本文件。 #!/bin/bash
cd obsfs所在的绝对路径
./obsfs 并行文件系统名 本地挂载目录 -o url=区域终端节点地址 -o passwd_file=密钥文件路径 -o big_writes -o max_write=131072 -o use_ino 挂载参数 挂载命令参数说明请参见“手动挂载并行文件系统”部分的步骤3。 按Esc键,输入:wq,保存并退出脚本文件。 执行以下命令,赋予root用户对脚本的可执行权限。 chmod +x /home/startobsfs.sh 执行以下命令,赋予root用户对rc.local文件的执行权限。 chmod +x /etc/rc.d/rc.local 不同操作系统的rc.local文件位置不同,在CentOS 7中,该文件位置为/etc/rc.d/rc.local。 编辑/etc/rc.d/rc.local文件,将以下命令添加至文件末尾,保存并退出。 bash /home/startobsfs.sh 如果/etc/rc.d/rc.local中有退出的命令,例如“exit 0”,请将本步骤中的命令添加至退出命令之前。 重启后验证。 在重启Linux后,执行以下命令,查看OBS并行文件系统是否挂载成功。 df -h 后续如果想取消开机自动挂载并行文件系统,删除rc.local文件中执行obsfs挂载命令的脚本文件即可。
-
命令示例 此处以挂载一个华北-北京一区域的“filesystem001”并行文件系统、obsfs密钥文件路径为“/etc/passwd-obsfs”作为前提条件提供如下挂载命令示例,介绍挂载OBS并行文件系统时的一些参数配置。 将并行文件系统“filesystem001”挂载至“/mnt/mount_path/”目录,并允许该目录为非空: ./obsfs filesystem001 /mnt/mount_path/ -o url=obs.cn-north-1.myhuaweicloud.com -o passwd_file=/etc/passwd-obsfs -o big_writes -o max_write=131072 -o nonempty -o use_ino 将并行文件系统“filesystem001”挂载至“/mnt/mount_path/”目录,并设置写缓存大小: ./obsfs filesystem001 /mnt/mount_path/ -o url=obs.cn-north-1.myhuaweicloud.com -o passwd_file=/etc/passwd-obsfs -o big_writes -o max_write=131072 -o max_background=100 -o use_ino 将并行文件系统“filesystem001”挂载至“/mnt/mount_path/”目录,并允许其他用户访问该目录: ./obsfs filesystem001 /mnt/mount_path/ -o url=obs.cn-north-1.myhuaweicloud.com -o passwd_file=/etc/passwd-obsfs -o big_writes -o max_write=131072 -o allow_other -o use_ino
-
手动挂载并行文件系统 打开命令行终端。 使用cd命令进入obsfs所在目录。 按照以下格式执行挂载命令。 ./obsfs 并行文件系统名 本地挂载目录 -o url=区域终端节点地址 -o passwd_file=密钥文件路径 -o big_writes -o max_write=131072 -o use_ino 其他挂载参数 并行文件系统名:输入待挂载的并行文件系统名称。 支持将并行文件系统中特定目录挂载到本地。用户使用此种方式挂载,进入本地挂载目录后,仅能访问并行文件系统中的特定目录。挂载命令如下: ./obsfs 并行文件系统名:/目录名 本地挂载目录 -o url=区域终端节点地址 -o passwd_file=密钥文件路径 -o big_writes -o max_write=131072 -o use_ino 其他挂载参数 本地挂载目录:输入待挂载目录的绝对路径或相对路径。 区域终端节点地址:根据待挂载并行文件系统所在区
域名 称获取对应的终端节点地址,具体信息请参见地区和终端节点。 挂载参数 挂载参数(除passwd_file、use_ino外)为可选项,根据需求选择合适的参数组合,格式为:-o 参数名称=参数值。在不需要设置参数值的情况下,直接使用-o 参数名称 即可。OBS支持的挂载参数及说明如表1所示。 关于obsfs挂载时的参数设置,可执行./obsfs --help命令了解更多。 表1 挂载参数说明 参数名称 参数值 说明 passwd_file 类型:String 取值:根据初始化obsfs配置的密钥文件路径进行设置。 密钥文件路径,使用obsfs时将从此路径中获取AK和SK信息,以对用户身份进行验证。 use_ino 需要 使用该选项,由obsfs分配inode编号。 big_writes 不需要 配置后可更改写缓存最大值大小。 max_write 类型:int 推荐取值:128KB 仅配置big_writes的情况下才生效,默认写大小为4KB,推荐使用128KB。 nonempty 不需要 允许挂载目录非空。 allow_other 不需要 允许其他用户访问并行文件系统。 max_background 类型:int 推荐取值:100 可配置后台最大等待请求数。 use_path_request_style 不需要 当采用路径式(使用legacy API 调用风格)访问OBS时,请使用该参数。 说明: 当url参数值为IP地址时,挂载命令必须携带此参数,否则会报域名解析错误。 umask 不需要 配置文件权限的掩码,使用此参数会覆盖并行文件系统内所有文件的权限。 说明: 使用umask配置后,挂载目录下文件权限会被覆盖为777 - umask 使用示例:-o umask=xxx 设置umask为777:文件系统中所有文件权限为000
设置umask为000:文件系统中所有文件权限为777
设置umask为002:文件系统中所有文件权限为775 obsfslog 不需要 从配置文件加载日志配置参数,包括日志模式、级别等。使用此参数可以在不重启进程的情况下,更改日志级别。 说明: 配置文件路径固定为:/etc/obsfsconfig,如果要使用此参数,需要手动在本地创建此路径并参照以下示例及注释写入内容。 配置文件内容示例: //日志模式。值为0,日志模式为前台显示。值为1,模式为生成日志文件,路径:/var/log/obsfs,以进程号命名。值为2,模式为日志写入系统日志。
dbglogmode=1
//日志级别。dbg、info、warn、err、crit。日志级别为dbg或info时,会打印业务详细信息,例如:桶名、文件名等。
dbglevel=info 执行以下命令,检查挂载结果。 df -h 当界面显示如下类似回显信息时,表示OBS并行文件系统挂载成功。 Filesystem Size Used Avail Use% Mounted on
obsfs 256T 0 256T 0% /path/to/mountpoint 并行文件系统的容量请以实际使用情况为准。 如果没有显示以上类似回显信息,表示OBS并行文件系统挂载失败。此时可在执行的挂载命令后面添加以下参数,用以在回显中输出挂载过程以及详细调试日志: -d -d -f -o f2 -o curldbg 然后再根据具体的错误信息进行问题定位,常见异常处理请参考挂载并行文件系统失败。
-
约束与限制 obsfs只支持挂载OBS并行文件系统,不支持挂载对象存储桶。 本地挂载目录可以不为空,但是挂载后此目录下原有的内容将不可用,取消挂载后即可恢复。建议使用空目录作为挂载目录。 挂载目录中的文件或文件夹不支持硬链接命令。 创建的目录深度不超过45层。 每次通过命令手动挂载的并行文件系统,在Linux重启后,都需要重新挂载。 并行文件系统的容量请以实际使用情况为准。 您也可以设置开机自动挂载并行文件系统,具体操作请参见开机自动挂载并行文件系统。 一个并行文件系统支持挂载到多台云服务器,但数据一致性需由您自行维护,避免出现多台云服务器同时对一个文件并发写入的情况。 桶级的桶策略和IAM策略对obsfs挂载方式生效,目录级的桶策略和IAM策略对obsfs挂载方式访问不生效。
-
功能说明 使用多段上传特性时,用户必须首先调用创建多段上传任务接口创建任务,系统会给用户返回一个全局唯一的多段上传任务号,作为任务标识。后续用户可以根据这个标识发起相关的请求,如:上传段、合并段、列举段等。创建多段上传任务不影响已有的同名对象;同一个对象可以同时存在多个多段上传任务;每个多段上传任务在初始化时可以附加消息头信息,包括acl、用户自定义元数据和通用的HTTP消息头contentType、contentEncoding等,这些附加的消息头信息将先记录在多段上传任务元数据中。 在指定桶中初始化分段上传任务。
-
返回结果 表8 返回结果 类型 说明 GetResult 参数解释: SDK公共结果对象。 表9 GetResult 参数名称 参数类型 描述 status int 参数解释: HTTP状态码。 取值范围: 状态码是一组从2xx(成功)到4xx或5xx(错误)的数字代码,状态码表示了请求响应的状态。完整的状态码列表请参见状态码。 默认取值: 无 reason str 参数解释: HTTP文本描述。 默认取值: 无 errorCode str 参数解释: OBS服务端错误码,当status参数小于300时为空。 默认取值: 无 errorMessage str 参数解释: OBS服务端错误描述,当status参数小于300时为空。 默认取值: 无 requestId str 参数解释: OBS服务端返回的请求ID。 默认取值: 无 indicator str 参数解释: OBS服务端返回的错误定位码。 默认取值: 无 hostId str 参数解释: 请求的服务端ID,当status参数小于300时为空。 默认取值: 无 resource str 参数解释: 发生错误时相关的桶或对象,当status参数小于300时为空。 默认取值: 无 header list 参数解释: 响应消息头列表,由多个元组构成。每个元组均包含两个元素,代表响应头的键值对。 默认取值: 无 body object 参数解释: 操作成功后的结果数据,当status大于300时为空。该值根据调用接口的不同而不同,参见“桶相关接口”章节和“对象相关接口”章节的详细描述。 默认取值: 无
-
接口约束 您必须是桶拥有者或拥有初始化分段上传任务的权限,才能初始化分段上传任务。建议使用IAM或桶策略进行授权,如果使用IAM则需授予obs:object:PutObject权限,如果使用桶策略则需授予PutObject权限。相关授权方式介绍可参见OBS权限控制概述,配置方式详见使用IAM自定义策略、配置对象策略。 OBS支持的Region与Endpoint的对应关系,详细信息请参见地区与终端节点。 初始化上传段任务并上传一个或多个段之后,您必须合并段或取消多段上传任务,才能停止收取已上传的段的存储费用。仅当在合并段或取消多段上传任务之后,OBS才释放段存储并停止向您收取段存储费用。
-
返回结果 表9 返回结果 类型 说明 GetResult 参数解释: SDK公共结果对象。 表10 GetResult 参数名称 参数类型 描述 status int 参数解释: HTTP状态码。 取值范围: 状态码是一组从2xx(成功)到4xx或5xx(错误)的数字代码,状态码表示了请求响应的状态。完整的状态码列表请参见状态码。 默认取值: 无 reason str 参数解释: HTTP文本描述。 默认取值: 无 errorCode str 参数解释: OBS服务端错误码,当status参数小于300时为空。 默认取值: 无 errorMessage str 参数解释: OBS服务端错误描述,当status参数小于300时为空。 默认取值: 无 requestId str 参数解释: OBS服务端返回的请求ID。 默认取值: 无 indicator str 参数解释: OBS服务端返回的错误定位码。 默认取值: 无 hostId str 参数解释: 请求的服务端ID,当status参数小于300时为空。 默认取值: 无 resource str 参数解释: 发生错误时相关的桶或对象,当status参数小于300时为空。 默认取值: 无 header list 参数解释: 响应消息头列表,由多个元组构成。每个元组均包含两个元素,代表响应头的键值对。 默认取值: 无 body object 参数解释: 操作成功后的结果数据,当status大于300时为空。该值根据调用接口的不同而不同,参见“桶相关接口”章节和“对象相关接口”章节的详细描述。 默认取值: 无 表11 GetResult.body GetResult.body类型 说明 PutContentResponse 参数解释: 上传对象响应结果,参考PutContentResponse。 表12 PutContentResponse 参数名称 参数类型 描述 storageClass str 参数解释: 对象的存储类型。 取值范围: 当对象存储类型是标准存储时,该值为空。 可选择的存储类型参见StorageClass。 默认取值: 无 versionId str 参数解释: 对象的版本号。如果桶的多版本状态为开启,则会返回对象的版本号。 取值范围: 长度为32的字符串。 默认取值: 无 etag str 参数解释: 对象的etag值,即base64编码的128位MD5摘要。etag是对象内容的唯一标识,可以通过该值识别对象内容是否有变化。比如上传对象时etag为A,下载对象时etag为B,则说明对象内容发生了变化。etag只反映变化的内容,而不是其元数据。上传的对象或拷贝操作创建的对象,都有唯一的etag。 约束限制: 当对象是服务端加密的对象时,etag值不是对象的MD5值。 取值范围: 长度为32的字符串。 默认取值: 无 sseKms str 参数解释: SSE-KMS方式的算法。 取值范围: kms,即以SSE-KMS方式加密对象。 默认取值: 无 sseKmsKey str 参数解释: SSE-KMS加密方式下使用的KMS主密钥的ID值。 取值范围: 有效值支持两种格式: regionID:domainID(账号ID):key/key_id key_id 其中: regionID是使用密钥所属region的ID,可在地区和终端节点页面获取; domainID是使用密钥所属账号的账号ID,获取方法参见如何获取账号ID和用户ID?(Python SDK); key_id是从
数据加密 服务创建的密钥ID,获取方法请参见查看密钥。 默认取值: 如果用户没有提供该头域,那么默认的主密钥将会被使用。 如果默认主密钥不存在,将默认创建并使用。 sseC str 参数解释: SSE-C方式的算法。 取值范围: AES256。 默认取值: 无 sseCKeyMd5 str 参数解释: SSE-C方式下加密使用密钥的MD5值,该值用于验证密钥传输过程中是否出错。 约束限制: 由密钥值经过MD5加密再经过Base64编码后得到,示例:4XvB3tbNTN+tIEVa0/fGaQ== 默认取值: 无 objectUrl str 参数解释: 对象的全路径。 默认取值: 无