你刷到过“1TB 免费 S3 对象存储”这类标题吗?对我来说,这个词组自带吸引力,也自带警报:真的免费?会不会只有三天试用期?流量是不是贵到离谱?前阵子我为了把一台小服务器上的备份挪走,专门找了一个提供 S3 兼容接口、且免费容量有 1TB 的存储平台,把完整流程从注册、建桶、拿密钥,到命令行上传、挂载、公开访问全部走了一遍。这篇文章不推荐任何具体服务商,只以“某存储平台”为例,按我实际操作的顺序写清楚每个参数怎么填、每条命令怎么敲、踩到坑要怎么排,适合想把 1TB 免费空间用起来的备份党、博客主和自动化玩家。
1. 同样是免费,为什么盯上对象存储而不是网盘
1.1 一次真实的备份需求
我手上有台小服务器,每天会产生几个 GB 的数据库备份和站点快照。过去我一直用网盘做异地备份,但体验越来越别扭:客户端不支持 Linux 服务器上的无人值守同步、上传接口不够稳定、免费容量还会偶尔“被到期”。我需要的是一个能让脚本直接读写、不会随意限速、也不需要图形界面持续登录的存储空间。顺着这个需求,我盯上了 S3 兼容的对象存储。
S3 兼容意味着什么?简单说,它对外提供一套“标准化”的存储接口,所有支持这一协议的工具、脚本、程序都能直接对接。你不需要关心文件到底存在哪块硬盘上,只需要知道“存储桶”和“对象”这两个概念:存储桶就像一个大文件夹,对象就是里面的文件。你可以用命令行工具上传、下载、增量同步,也可以在程序里用一套通用 API 完成读写。这种能力,普通网盘很难给到我。
1.2 1TB 免费容量实际能装多少东西
在纠结平台之前,我先算了一笔账。1TB 听起来很抽象,但拆成实际文件的体积就好理解了:
| 内容类型 | 平均单文件大小 | 1TB 大约可存 |
|---|---|---|
| 手机照片 | 3MB / 张 | 约 33 万张 |
| 日常文档 | 500KB / 份 | 约 200 万份 |
| 视频素材 | 2GB / 小时 | 约 500 小时 |
| 数据库日备 | 5GB / 天 | 约 200 个备份 |
对我来说,1TB 足够存下服务器近一年的增量备份,也足够给博客放图片和静态资源。它更像一个“低频归档仓库”,而不是每天都在高频读写的地方。想清楚用途后,比单纯盯着“免费”更容易判断值不值得折腾。
1.3 免费存储的隐性条款,先看清楚再动手
免费容量不等于免费使用。我看了不少类似平台的说明,最容易踩的坑有三条:
- 下载流量是否计费。很多平台免费给容量,但出网流量按 GB 收费。如果你的用途是给网站当图床,流量费用可能会比空间费用高得多。
- 请求次数是否计费。大量小文件上传、读取会产生海量请求,有些平台对 GET/PUT 请求另有计价。
- 低频转热差异。部分平台设了“最低存储时长”,文件存放不足指定时间就删除,会收取额外费用。
我的原则是:先把“容量免费、流量按量”当成默认假设,再用低频备份场景验证,而不是盲目把公开图床塞进去。懂了这些,后面操作才不会被账单打脸。
2. 从注册到建桶:拿到密钥之前的关键准备
2.1 先规划权限,再创建存储桶
很多新手一上来就急着建存储桶,结果把密钥撒得到处都是。更稳妥的顺序是:先想清楚这个桶要用来干什么,再按最小权限创建 API 用户,最后才建桶。如果只是为了做备份,API 用户只需要该桶的上传、下载、删除权限;没有必要给它全站权限。
我选择的某存储平台,控制台注册过程没什么特别:邮箱验证、设置密码、进入工作台。注册完成后先进入“访问密钥”相关页面,创建一个专用 API 用户,这时会得到一对访问密钥:Access Key ID 和 Secret Access Key。后者通常只在创建时完整显示一次,一定下载到本地或密码管理器,否则后续只能重新生成。
2.2 建桶时一定要抄下来的参数清单
创建存储桶时,我建议一边填一边把下列参数记录下来,后面配工具、写脚本都会用到:
| 参数 | 含义 | 我的示例值 |
|---|---|---|
| Bucket 名称 | 存储桶全局唯一标识 | my-backup-2025 |
| Region | 区域代码,控制台可查 | region-1 |
| Endpoint | API 终端节点地址 | https://s3.region-1.example-storage.com |
| Access Key ID | 用户访问标识 | AKIA-style 字符串 |
| Secret Access Key | 用户访问密钥 | 一长串随机字符 |
存储桶名称必须符合 S3 命名规范:只能用小写字母、数字和短横线,且全局唯一。如果提示名称被占用,换一个带随机数字的后缀即可。
2.3 创建存储桶时的三个默认设置
创建页面一般会有几个看似不重要、实则影响很大的选项:
- 访问权限:默认选“私有”。哪怕你以后要做图床,也别在这里直接开“公有读”,安全起见先用私有方式跑通上传,需要公开访问时再用策略精确放行。
- 版本控制:如果平台支持,建议开启。开版本控制之后,被覆盖或误删的文件可以找回,代价是每个历史版本都会占一点存储。对于备份桶来说,这点代价非常值。
- 服务端加密:有就开启,没有也没关系。密钥泄露前,私有访问权限才是第一道防线。
建桶完成后,在存储桶的基础信息页找到 “Endpoint”。注意控制台上可能会显示两个地址:一个是 API 根地址,一个是“桶访问域名”。配置命令行工具时,填的是 API 根地址,而不是某个具体文件的 URL。
3. 用 rclone 接线:把远程存储变成本地文件夹
3.1 安装并初始化 rclone
要让 S3 兼容存储足够易用,我优先推荐开源命令行工具 rclone。它支持 S3 协议,也支持很多对象存储服务,配置完成后可以像操作本地目录一样操作远程存储桶。安装很简单,Linux 发行版一般用自带软件源就能装,macOS 也可以从常用包管理器或应用商店渠道装;Windows 下载便携版解压后直接执行即可。
打开终端,先跑一下rclone version确认安装成功。接着用命令方式直接创建 remote,比交互式逐项输入更容易复现:
rclone config create xstor s3 \ provider Other \ endpoint https://s3.region-1.example-storage.com \ access_key_id YOUR_ACCESS_KEY \ secret_access_key YOUR_SECRET_KEY \ region region-1这里xstor是我给远端起的名字,之后所有命令都用它代表这个存储平台。provider Other表示选择通用 S3 兼容服务;如果你的平台在 rclone 里有专属预设,也可以填对应名称。配置完成后,运行:
rclone lsd xstor:如果能看到刚才创建的存储桶,说明连接成功。看到 403 也别急着删配置,后面有一整节讲排查。
3.2 最容易填错的两个字段
我在配置时翻了两次车,问题都出在细节上:
- Endpoint 末尾不要带多余的斜杠。
https://s3.region-1.example-storage.com/和https://s3.region-1.example-storage.com看着一样,但对签名算法来说可能被当成两个不同的地址。 - Region 必须与控制台一致。有些工具允许 region 留空,但对象存储服务在生成签名时通常会把 region 拼进字符串里。填错最典型的报错就是
SignatureDoesNotMatch。
另外建议把 Secret Key 直接复制到命令里,不要手动输入。密钥通常包含大小写字母、数字和符号,多打一个空格或少打一个字符,都会直接失败。
3.3 上传、同步、校验:日常用得最频繁的命令
配置完成后的操作很直白。把本地photos目录里的文件上传到桶的photos前缀下:
rclone copy /home/user/photos xstor:my-backup-2025/photos -P-P参数会实时显示传输进度、速度和剩余时间。如果你想把本地目录和远程目录完全保持一致,包括删除远程多出来的文件,那就用sync而不是copy:
rclone sync /home/user/photos xstor:my-backup-2025/photos -Psync是“镜像”行为,远程目录里存在但本地目录不存在的文件会被删掉。第一次使用前,建议先在副本目录上测试,避免误删。上传结束后,还可以用check命令对比两边的文件数量和哈希值:
rclone check /home/user/photos xstor:my-backup-2025/photos实测下来,rclone 默认对 S3 协议做了分片上传,大文件和大量小文件都能比较稳定地传完。传输过程中断网,重新执行一次命令会基于已有分片继续。
3.4 挂载到本地目录,像普通文件夹一样用
rclone 的另一个实用功能是 mount。把远程存储桶挂载到本地目录后,普通程序不需要知道对象存储的存在,直接把文件写到挂载点就可以了。
mkdir -p /mnt/xstor rclone mount xstor:my-backup-2025 /mnt/xstor \ --vfs-cache-mode full \ --allow-other \ --daemon--vfs-cache-mode full会让本地先缓存读取过的文件,提升访问速度;--daemon让挂载在后台运行。挂载完成后,ls /mnt/xstor/photos就能看到云端目录内容。Windows 上做挂载会稍有不同,需要先安装系统对应的文件系统支持组件,否则资源管理器里不会出现盘符。
挂载方式特别适合给旧脚本“续命”。原本往/backup写备份的脚本,改成往/mnt/xstor/backup写,底层自动落到了云端,不改一行逻辑。
4. 从私有存储到公开访问:静态文件和外链的几种玩法
4.1 用最小权限开放“公开读”
很多人拿到对象存储后的第一反应是当图床。把文件传到桶里,然后得到一个可以直接在浏览器打开的链接。这里的关键是权限设置:不要直接把整个桶设置成公开读写,而是只放行指定前缀的公开读。
在平台控制台里找到“存储桶策略”或“访问控制”的位置,添加一条策略:允许匿名主体执行读取操作,资源范围限定到某个目录。不同平台的策略编辑界面不一样,常见做法是选“Public Read”,再把资源范围改成类似my-backup-2025/public/*这样的前缀。
配置好之后,文件访问 URL 一般长这样:
https://my-backup-2025.s3.region-1.example-storage.com/photos/cover.jpg用浏览器直接打开能看到图片,就说明公开读生效了。需要提醒的是:一旦公开读,这个链接可以被任何人下载,千万别把隐私信息放进公开前缀里。
4.2 前端直传和跨域报错
如果你打算在网页里直接上传文件到存储桶,通常会被浏览器“同源”规则拦住。控制台会提示跨域访问错误,错误信息里常常带着has been blocked by CORS policy。解决方法是在平台后台配置 CORS 规则:
{ "AllowedOrigins": ["https://你的网站域名"], "AllowedMethods": ["GET", "PUT"], "AllowedHeaders": ["*"], "ExposeHeaders": ["ETag"], "MaxAgeSeconds": 3600 }AllowedOrigins只写你的真实网站域名,不要图省事写*。AllowedMethods根据前端逻辑选GET、PUT或POST。配置保存后通常需要等一两分钟才会生效,要是改了规则后还在报错,先等一会儿再测。
4.3 不想公开又想分享,预签名 URL 是正解
如果你需要让别人下载一个私有文件,但又不希望文件长期公开,正确做法是生成一个“预签名 URL”。它就像一张限时有效、限次访问的通行证:在 URL 里带上签名参数,服务端验签通过才允许访问。几乎所有常见编程语言都有专门的库生成这种链接,你不需要手动实现签名逻辑。
用预签名 URL 的场景很多:给客户发一条临时下载链接,给前端传参后上传文件,给团队成员分享一个大日志。这种方式比把桶改成公开读安全得多,也更容易收回访问权限。
5. 实操中翻过车的三类问题:从 403 到误删恢复
5.1 403 和签名错误的完整排查链路
第一次配置连接时,最容易碰到的报错是权限被拒或签名不匹配。我把排查步骤固定成了一串链路,按顺序检查基本都能定位:
- 检查 Access Key ID 和 Secret Access Key 是否复制完整,注意有没有混入空格或换行。
- 检查密钥所属用户是否真的有目标桶的权限。刚创建的用户如果没有绑定权限,即使密钥正确也会 403。
- 检查 Region 是否和控制台一致,Endpoint 是否填成了浏览器访问域名而不是 API 地址。
- 检查本地系统时间是否准确。签名计算依赖时间戳,系统时间和真实时间差太大会直接导致签名无法通过。
其中时间问题最隐蔽。我第一次遇到SignatureDoesNotMatch时,还以为是密钥错了,折腾了半天才发现本地服务器时区偏了。执行date看一眼,校准后就恢复了。
5.2 误删文件的补救:版本控制是最好的后悔药
对象存储不像本地回收站,删掉的对象如果不做额外保护,可能彻底消失。我有一次写同步脚本时目录写错,sync 命令把云端一堆文件“镜像”掉了,那感觉相当糟糕。还好当时开了版本控制,事后在控制台的“版本记录”里恢复了旧版本文件。
因此建议所有重要备份桶都开启版本控制。开启后,同名的旧文件不会被覆盖删除,而是变成历史版本;误删的对象也能找回。代价是历史版本占存储空间,可以配合生命周期规则,对旧版本设置“保留 30 天后自动删除”,在安全性和成本之间找一个平衡。
5.3 刚上传完立刻读取不到,先别急着报 bug
部分 S3 兼容服务存在“写后微延迟”的现象:对象写入成功的请求返回了,但立即读取时可能仍有小概率拿到过期结果。这不是你做错了什么,而是分布式存储的最终一致性在起作用。我的经验是,程序里读取刚上传的文件前加一个很小的重试机制,或者先等上一两秒再读,能大幅减少偶发报错。
如果你的应用要求“上传后立刻读到最新版本”,最好先用平台文档确认它的数据一致性模型。可靠的方案是让客户端在上传成功后,等一次短暂缓存过期或主动查询一次对象元数据,再对外返回成功。
最后分享一个我的使用习惯:把所有密钥文件放到本地密码管理器,命令行配置里不出现明文 Secret;桶名一律加上日期或用途前缀;每周用 rclone check 校验一次备份完整性。这一套跑下来,1TB 免费空间对我来说不算“羊毛”,而是真正的异地容灾仓库。免费额度是入口,规范的使用习惯才是让你长期受益的关键。