tencent cloud

对象存储

动态与公告
产品动态
产品公告
产品简介
产品概述
功能概览
应用场景
产品优势
基本概念
地域和访问域名
规格与限制
产品计费
计费概述
计费方式
计费项
免费额度
计费示例
查看和下载账单
欠费说明
常见问题
快速入门
控制台快速入门
COSBrowser 快速入门
用户指南
创建请求
存储桶
对象
数据管理
批量处理
全球加速
监控与告警
运维中心
数据处理
内容审核
智能工具箱
数据工作流
应用集成
工具指南
工具概览
环境安装与配置
COSBrowser 工具
COSCLI 工具
COSCMD 工具
COS Migration 工具
FTP Server 工具
Hadoop 工具
COSDistCp 工具
HDFS TO COS 工具
GooseFS-Lite 工具
在线辅助工具
自助诊断工具
实践教程
概览
访问控制与权限管理
性能优化
使用 AWS S3 SDK 访问 COS
数据容灾备份
域名管理实践
图片处理实践
COS 音视频播放器实践
工作流实践
数据直传
内容审核实践
数据安全
数据校验
大数据实践
COS 成本优化解决方案
在第三方应用中使用 COS
迁移指南
本地数据迁移至 COS
第三方云存储数据迁移至 COS
以 URL 作为源地址的数据迁移至 COS
COS 之间数据迁移
Hadoop 文件系统与 COS 之间的数据迁移
数据湖存储
云原生数据湖
元数据加速
数据加速器 GooseFS
数据处理
数据处理概述
图片处理
媒体处理
内容审核
文件处理
文档处理
故障处理
获取 RequestId 操作指引
通过外网上传文件至 COS 缓慢
访问 COS 时返回403错误码
资源访问异常
POST Object 常见异常
API 文档
简介
公共请求头部
公共响应头部
错误码
请求签名
操作列表
Service 接口
Bucket 接口
Object 接口
批量处理接口
数据处理接口
任务与工作流
内容审核接口
云查毒接口
SDK 文档
SDK 概览
准备工作
Android SDK
C SDK
C++ SDK
.NET(C#) SDK
Flutter SDK
Go SDK
iOS SDK
Java SDK
JavaScript SDK
Node.js SDK
PHP SDK
Python SDK
React Native SDK
小程序 SDK
错误码
鸿蒙(Harmony) SDK
终端 SDK 质量优化
安全与合规
数据容灾
数据安全
访问管理
常见问题
热门问题
一般性问题
计费计量问题
域名合规问题
存储桶配置问题
域名和 CDN 问题
文件操作问题
日志监控问题
权限管理问题
数据处理问题
数据安全问题
预签名 URL 问题
SDK 类问题
工具类问题
API 类问题
服务协议
Service Level Agreement
隐私政策
数据处理和安全协议
联系我们
词汇表

GooseFS-FUSE 能力

PDF
聚焦模式
字号
最后更新时间: 2024-01-06 11:17:58
GooseFS-FUSE 可以在一台 Unix 机器上的本地文件系统中挂载一个 GooseFS 分布式文件系统。通过使用该特性,一些标准的命令行工具(例如 ls、cat 以及 echo)可以直接访问 GooseFS 分布式文件系统中的数据。此外更重要的是使用不同语言实现的应用程序,例如 C、C++、Python、Ruby、Perl、Java 都可以通过标准的 POSIX 接口(例如 open、write、read)来读写 GooseFS,而不需要任何 GooseFS 的客户端整合与设置。
GooseFS-FUSE 是基于 FUSE 这个项目,并且都支持大多数的文件系统操作。但是由于 GooseFS 固有的属性,例如它的一次性、不可改变的文件数据模型,该挂载的文件系统与 POSIX 标准不完全一致,尚有一定的局限性。因此,请先阅读 局限性,从而了解该特性的作用以及局限。

安装要求

JDK 1.8及以上
Linux 系统:libfuse 2.9.3及以上(可以使用 2.8.3版本,但会提示一些警告)
Mac 系统:osxfuse 3.7.1及以上

用法

挂载 GooseFS-FUSE

完成配置以及启动 GooseFS 集群后,在需要挂载 GooseFS 的节点上启动 Shell,并进入 $GOOSEFS_HOME 目录执行以下命令:
$ integration/fuse/bin/goosefs-fuse mount mount_point [GooseFS_path]
该命令会启动一个后台 Java 进程,用于将对应的 GooseFS 路径挂载到 <mount_point> 指定的路径。例如以下命令,将 GooseFS 路径 /people 挂载到本地文件系统的 /mnt/people 目录下。
$ integration/fuse/bin/goosefs-fuse mount /mnt/people /people
Starting goosefs-fuse on local host.
goosefs-fuse mounted at /mnt/people. See /lib/GooseFS/logs/fuse.log for logs
当 GooseFS_path 没有给定时,GooseFS-FUSE 会默认挂载到 GooseFS 根目录下(/)。您可以多次调用该命令,将 GooseFS 挂载到不同的本地目录下。所有的 GooseFS-FUSE 会共享 $GOOSEFS_HOME\\logs\\fuse.log 日志文件。该日志文件对于错误排查很有帮助。
注意
<mount_point> 必须是本地文件系统中的一个空文件夹,并且启动 GooseFS-FUSE 进程的用户拥有该挂载点及对其的读写权限。

卸载 GooseFS-FUSE

卸载 GooseFS-FUSE 时,需在该节点上启动 Shell,并进入$GOOSEFS_HOME 目录执行以下命令:
$ integration/fuse/bin/goosefs-fuse umount mount_point
该命令将终止 goosefs-fuse Java 后台进程,并卸载该文件系统。例如:
$ integration/fuse/bin/goosefs-fuse umount /mnt/people
Unmount fuse at /mnt/people (PID: 97626).
默认情况下,如果有任何读写操作未完成,umount 操作会等待最多120s。如果120s后读写操作仍未完成,那么 Fuse 进程会被强行结束,这会导致正在读写的文件失败,您可以添加 -s 参数来避免 Fuse 进程被强行结束。例如:
$ ${GOOSEFS_HOME}/integration/fuse/bin/goosefs-fuse unmount -s /mnt/people

检查 GooseFS-FUSE 是否在运行

罗列所有的挂载点,需在该节点上启动 Shell,并进入 $GOOSEFS_HOME 目录执行以下命令:
$ integration/fuse/bin/goosefs-fuse stat
该命令会输出包括 pid、mount_point、GooseFS_path 在内的信息。
例如输出可以是以下格式:
$ pid mount_point GooseFS_path
80846 /mnt/people /people
80847 /mnt/sales /sales

Goosefs-FUSE 目录结构




conf 目录下:
masters:master 服务器的 IP 配置文件
workers:worker 服务器的 IP 配置文件
goosefs-site.properties:goosefs 配置文件
libexec:goosefs-fuse 运行依赖的 lib 库文件
goosefs-fuse-1.4.0:goosefs-fuse 后台运行的 jar 包
log:日志目录

可选配置

GooseFS-FUSE 基于标准的 GooseFS-core-client-fs 进行操作。如果您希望它像使用其他应用的 client 一样,自定义该 GooseFS-core-client-fs 的行为。
可通过编辑 $GOOSEFS_HOME/conf/goosefs-site.properties 配置文件来更改客户端选项。
注意
所有的更改应该在 GooseFS-FUSE 启动之前完成。

局限性

目前,GooseFS-FUSE 支持大多数基本文件系统的操作。然而,由于 GooseFS 某些内在的特性,您需要注意以下几点:
不支持对文件进行随机写入和追加写入操作。
文件只能顺序地写入一次,并且无法修改。这意味着如果要修改一个文件,您需要先删除该文件,或者 open 操作时,携带 O_TRUNC 标志符,将文件长度置为0。
不支持读取挂载点中正在写入的文件。
不支持对文件长度进行 truncate 操作。
不支持 soft/hard link;GooseFS 没有 hard-link 和 soft-link 的概念,所以不支持与之相关的命令,例如 ln。此外关于 hard-link 的信息也不在 ll 的输出中显示。
以对象存储作为底层存储时,Rename 操作非原子。
只有当 GooseFS 的 GooseFS.security.group.mapping.class 选项设置为ShellBasedUnixGroupsMapping 的值时,文件的用户与分组信息才与 Unix 系统的用户分组对应。否则 chown 与 chgrp 的操作不生效,而 ll 返回的用户与分组为启动 GooseFS-FUSE 进程的用户与分组信息。

性能考虑

由于 FUSE 和 JNR 的配合使用,与直接使用原生文件系统 API 相比,使用挂载文件系统的性能会相对较差。
大多数性能问题的原因在于,每次进行 read 或 write 操作时,内存中都存在若干个副本,并且 FUSE 将写操作的最大粒度设置为128KB。其性能可以利用 kernel 3.15 引入的 FUSE 回写(write-backs)缓存策略从而得到大幅提高(但 libfuse 2.x 用户空间库目前尚不支持该特性)。

GooseFS-FUSE 配置参数

以下是 GooseFS-FUSE 相关的配置参数:
参数
默认值
描述
goosefs.fuse.cached.paths.max
500
定义内部 GooseFS-FUSE 缓存的大小,该缓存维护本地文件系统路径和 Alluxio 文件 URI 之间最常用的转换。
goosefs.fuse.debug.enabled
false
允许 FUSE 调试输出,该输出会被重定向到 goosefs.logs.dir 指定目录中的 fuse.out 日志文件。
goosefs.fuse.fs.name
goosefs-fuse
FUSE 挂载文件系统使用的描述性名称。
goosefs.fuse.jnifuse.enabled
true
使用 JNI-Fuse 库以获得更好的性能。 如果禁用,将使用 JNR-Fuse。
goosefs.fuse.shared.caching.reader.enabled
false
(实验性)使用共享 grpc 数据读取器,通过 GooseFS JNI Fuse 在多进程文件读取中获得更好的性能。块数据将缓存在客户端,因此 Fuse 进程需要更多内存。
goosefs.fuse.logging.threshold
10s
当花费的时间超过阈值时,记录 FUSE API 调用。
goosefs.fuse.maxwrite.bytes
131072
FUSE 写操作的粒度(bytes),注意目前 128KB 是 Linux 内核限制的上界。
goosefs.fuse.user.group.translation.enabled
false
是否在 FUSE API 中将 GooseFS 的用户与组转化为对应的 Unix 用户与组。当设为 false 时,所有 FUSE 文件的用户与组将会显示为挂载 goosefs-fuse 线程的用户与组。

常见问题

缺少 libfuse 库文件

在您执行 GooseFS-Fuse 挂载之前,需要安装 libfuse。


方式一 安装命令:
yum install fuse-devel
查看是否安装成功:
find / -name libfuse.so*
方式二 更新旧版本 libfuse.so.2.9.2,安装步骤如下:
说明
在 CentOS 7 安装 libfuse,CentOS 7默认安装的是 libfuse.so.2.9.2。
首先,下载 libfuse 源码,并编译生成 libfuse.so.2.9.7。
tar -zxvf fuse-2.9.7.tar.gz
cd fuse-2.9.7/ && ./configure && make && make install
echo -e '\\n/usr/local/lib' >> /etc/ld.so.conf
ldconfig
其次,下载、编译及生成 libfuse.so.2.9.7 后,然后按照以下步骤进行安装替换。
1.1 执行以下命令,查找旧版本 libfuse.so.2.9.2 库链接。
find / -name libfuse.so*
1.2 执行以下命令,将 libfuse.so.2.9.7拷贝至旧版本库 libfuse.so.2.9.2 所在位置。
cp /usr/local/lib/libfuse.so.2.9.7 /usr/lib64/
1.3 执行以下命令, 删除旧版本 libfuse.so 库的所有链接。
rm -f /usr/lib64/libfuse.so
rm -f /usr/lib64/libfuse.so.2
1.4 执行以下命令,建立与被删除旧版本链接类似的 libfuse.so.2.9.7 库链接。
ln -s /usr/lib64/libfuse.so.2.9.7 /usr/lib64/libfuse.so
ln -s /usr/lib64/libfuse.so.2.9.7 /usr/lib64/libfuse.so.2

VIM 编辑挂载点中的文件报错 Write error in swap file?

您可以通过更改 VIM 的配置,使用 VIM 7.4 及之前的版本,对 GooseFS-Fuse 挂载点中的文件进行编辑。VIM 的 swap 文件用于暂存用户对文件的修改内容,方便 VIM 在机器宕掉重启后,可以根据 swap 文件,对未保存的修改内容进行恢复。上面的报错是由于 VIM 对 swap 文件,涉及随机写入操作,而 GooseFS 不支持对文件的随机写入。解决方法:您可以通过在 VIM 编辑窗口中,执行如下的 VIM 命令关闭 swap 文件生成,:set noswapfile,或者在配置文件 ~/.vimrc 中添加配置行 set noswapfile

帮助和支持

本页内容是否解决了您的问题?

填写满意度调查问卷,共创更好文档体验。

文档反馈