将火山云TOS存储桶挂载到Linux服务器
一、前提条件
在开始挂载前,需确保满足以下条件:
账号拥有目标 TOS 存储桶的 读写权限,并已获取该账号的 Access Key ID 和 Secret Access Key。
已获取 TOS 存储桶对应的 S3 Endpoint。
操作账号为 root 用户 或拥有 sudo 权限的用户。
二、注意事项
性能与功能限制:
S3FS 无法达到本地文件系统的性能,元数据操作(如列目录)因网络延迟较慢;随机写 / 追加写会触发整个文件的下载与重新上传。
多客户端挂载同一存储桶时,需自行协调各客户端行为,避免数据冲突。
适用场景:
Goofys 和 S3FS 仅适用于 小量测试场景,生产环境不建议使用。生产环境推荐直接使用 S3 API、TOS API 或 TOS SDK。
访问方式:
TOS 不支持 Path Style 访问,需使用 Virtual Style(虚拟主机访问方式)。
三、工具一:使用 Goofys 挂载
步骤 1:安装 Goofys 工具
ssh 登录 ECS 实例。
执行以下命令下载 Goofys 安装包(版本为 v0.24.0):
wget https://github.com/kahing/goofys/releases/download/v0.24.0/goofys将安装包移动到系统可执行目录:
mv goofys /usr/local/bin/授予执行权限:
chmod +x /usr/local/bin/goofys验证安装是否成功(返回版本信息即成功):
goofys -version# 成功返回示例:goofys version 0.24.0-45b8d78375af1b24604439d2e60c567654bcdf88步骤 2:配置密钥与挂载存储桶
创建 AWS 配置目录(用于存放密钥文件):
mkdir /root/.aws创建密钥配置文件 credentials:
touch /root/.aws/credentials编辑配置文件(需替换 AK 和 SK 为实际密钥):
vi /root/.aws/credentials在文件中添加以下内容,保存并退出(vi 编辑器按 Esc 后输入 :wq 保存):
[default] # profile 名称,默认设为 default
aws_access_key_id = AK # 替换为账号的 Access Key ID
aws_secret_access_key = SK # 替换为账号的 Secret Access Key
s3 =addressing_style = virtual # 强制使用 Virtual Style 访问创建挂载目录(示例目录为 /goofys_dir):
mkdir /goofys_dir执行挂载命令(需替换 <S3 Endpoint>、<存储桶名称> 和 <挂载目录>):
goofys --subdomain --dir-mode=0777 --file-mode=0666 --profile default -o allow_other --endpoint=https://<S3 Endpoint> <存储桶名称> <挂载目录>关键参数说明:
--subdomain:启用 Virtual Style 访问(必须配置)。
--dir-mode=0777/--file-mode=0666:设置目录 / 文件的权限,允许所有用户读写。
-o allow_other:允许非 root 账号访问挂载目录。
--endpoint:指定 TOS 的 S3 Endpoint(非存储桶自身的 Endpoint)。
示例命令(北京地域,存储桶 goofys-test,挂载到 /goofys_dir):
goofys --subdomain --dir-mode=0777 --file-mode=0666 --profile default -o allow_other --endpoint=https://tos-s3-cn-beijing.volces.com goofys-test /goofys_dir步骤 3:验证挂载结果
执行以下命令,若返回挂载信息则说明成功:
df -hT | grep goofys# 成功返回示例:goofys-test fuse 1.0P 0 1.0P 0% /goofys_dir四、工具二:使用 S3FS 挂载
步骤 1:安装 S3FS 工具
登录 ECS 实例(同 Goofys 步骤 1)。
安装扩展软件源(CentOS 系统需执行,Debian 系统需先执行 sudo apt-get update,再跳过此步直接安装 S3FS):
yum install epel-release出现确认提示时输入 y 并回车。
安装 S3FS 工具:
yum install s3fs-fuse依次出现 “Is this ok [y/N]” 和 “Is this ok [y/N]” 提示时,均输入 y 并回车。
步骤 2:配置密钥与挂载存储桶
生成密钥文件(替换 AK 和 SK 为实际密钥):
echo AK:SK > /root/.passwd-s3fs限制密钥文件权限(仅 root 可读写,避免泄露):
chmod 600 /root/.passwd-s3fs创建挂载目录(示例目录为 /root/s3fs_dir):
mkdir /root/s3fs_dir执行挂载命令(需替换 <S3 Endpoint>、<存储桶名称> 和 <挂载目录>):
s3fs <存储桶名称> <挂载目录> -o passwd_file=${HOME}/.passwd-s3fs -o url=http://<S3 Endpoint> -d -o f2关键参数说明:
passwd_file:指定密钥文件路径。
url:指定 TOS 的 S3 Endpoint(非存储桶自身的 Endpoint)。
-d -o f2:启用调试模式并优化文件操作。
示例命令(北京地域,存储桶 test,挂载到 /root/s3fs_dir):
s3fs test /root/s3fs_dir -o passwd_file=$HOME/.passwd-s3fs -o url=http://tos-s3-cn-beijing.volces.com -d -o f2步骤 3:验证挂载结果
执行以下命令,若返回挂载信息则说明成功:
df -hT# 成功返回示例(包含以下内容):s3fs fuse.s3fs 16E 0 16E 0% /root/s3fs_dir五、相关操作命令
操作需求 | 命令 | 说明 |
取消挂载存储桶 | sudo umount <挂载目录> | 取消挂载前,需确保已完成所有文件上传操作,避免数据丢失。 |
查看 S3FS 工具日志 | vi /var/log/messages | 用于排查 S3FS 挂载或使用中的错误。 |
查看 Goofys 工具日志 | vi /var/log/syslog | 用于排查 Goofys 挂载或使用中的错误。 |
六、常见问题排查
Q1:挂载报错,如何查看详细错误信息?
在挂载命令后追加以下参数,重新执行即可输出调试日志:
-o dbglevel=info -f -o curldbgQ2:Goofys 挂载失败,日志报 ERROR Unable to access bucket_demo?
原因:credentials 文件格式错误,导致密钥解析失败。
解决方案:按以下标准格式重新编辑文件(注意缩进和字段名):
[default]
aws_access_key_id = AK
aws_secret_access_key = SK
s3 = addressing_style = virtualQ3:Goofys 挂载报 s3.DEBUG HEAD https://xxx/goofys-test = 403 []?
原因:默认使用 Path Style 访问,TOS 不支持该方式。
解决方案:使用带 --subdomain 参数的命令重新挂载(参考 Goofys 步骤 2 的示例命令),强制启用 Virtual Style 访问:
goofys --subdomain --dir-mode=0777 --file-mode=0666 --debug_s3 --debug_fuse --profile default -o allow_other --endpoint=https://<S3 Endpoint> <存储桶名称> <挂载目录>