VPS 硬盘太小不够用?用 Rclone 把网盘与对象存储(S3)挂载为本地硬盘

便宜 VPS 常常只给 10~20GB 硬盘,装几个媒体文件就爆满。用 Rclone + FUSE 把 Google Drive、OneDrive、MinIO 或 Scaleway S3 挂载成 VPS 上的本地目录,空间瞬间变大,还能挂 Plex/Emby、做自动备份。

先说痛点:便宜 VPS 的硬盘,真的不够看

不知道你有没有这种经历:兴冲冲买了台一年十几块的便宜 VPS,准备折腾点东西,结果 df -h 一看,硬盘总共就 10GB、20GB。装个系统占掉几个 G,再放点网站文件、几个视频、几张备份,空间就见底了。

说白了,便宜商家就是把"硬盘"这一项压得很低,用低价吸引你。可对我们这些真想往上面放东西的人来说,10GB 实在太局促——稍微存点媒体库、备份一下数据库,第二天就收到"磁盘使用率 95%"的报警邮件。

那怎么办?其实有个很老牌、也很靠谱的办法:把网盘或对象存储,挂载成 VPS 上的一个"本地文件夹"。挂载之后,你往这个文件夹里写文件,实际上是在往 Google Drive、OneDrive 或者某个 S3 桶里写;读文件也是从云端拉。对系统和程序来说,它跟一块真硬盘没啥两样。这样你的 VPS 就相当于有了"无限硬盘"(受限于你网盘的额度),而本地那 20GB 还是干干净净的。

下面要讲的工具,就是干这个事的神器:Rclone

Rclone 是个啥?用大白话讲

Rclone 江湖人称"网盘界的瑞士军刀",它本来是用来在本地和几十种云存储之间同步、拷贝文件的。但它还有一个特别好用的功能:rclone mount,可以把云存储挂载成 Linux 上的一个目录

它靠的是一项叫 FUSE(Filesystem in Userspace,用户态文件系统)的技术。大白话解释:通常只有内核才能决定"硬盘上怎么读写文件",FUSE 允许普通程序(比如 rclone)在用户态"假装"成一个文件系统。于是 rclone 在前台当好这个"假硬盘":你 cpmvls 它都照单全收,背后它默默帮你把操作翻译成对云端的 API 调用。

需要说明一点,这个"假硬盘"终究不是真硬盘。它没有本地磁盘那么快(毕竟每次读写都要走网络),也不完全支持所有文件系统特性(比如某些软件对文件锁、随机写入要求很苛刻时可能出问题)。但对绝大多数用途——存文件、挂媒体库、做备份——它完全够用。咱们心里有这个数就行。

第一步:装上 Rclone

大多数 Linux 发行版都能直接装,但发行版仓库里的版本往往偏旧。建议用官方脚本装最新版:

sudo -v ; curl https://rclone.org/install.sh | sudo bash

装完确认一下版本:

rclone version

如果你的 VPS 是 Debian/Ubuntu,也可以用 sudo apt install rclone,只是版本可能旧一点。我个人更推荐上面的官方脚本。

另外,挂载需要 FUSE 支持。Debian/Ubuntu 上一般装 rclone 时会顺带装好;如果没有,手动补一下:

sudo apt install fuse3

第二步:把网盘接进来(以 Google Drive / OneDrive 为例)

Rclone 用一个叫 remote(远程)的概念保存每个云盘的登录信息。先跑配置向导:

rclone config

按提示走:输入 n 新建一个 remote,给它起个名字(比如 gdrive),然后在长长的列表里选对应的云盘类型(Google Drive、OneDrive 都有专门选项)。

重点来了:很多人买的 VPS 是没有图形界面的纯命令行服务器,没法在服务器上弹浏览器授权。 别慌,rclone 早就想到了。向导里会问你 Use web browser to automatically authenticate?(是否用浏览器自动授权),你选 n(否)。它会给你一个链接,你把链接复制到自己电脑的浏览器里打开、登录账号、点允许,最后拿到一串授权码,再粘贴回终端就行。

> 小建议:Google Drive 默认用 rclone 自带的公共客户端,多人共用容易触发 API 限流。如果你用量大,建议去 Google Cloud 控制台自己建一个 OAuth 客户端,把 client_idclient_secret 填进去,会更稳。新手先空着用默认的也没事。

配置完,rclone config 会把凭据写进 ~/.config/rclone/rclone.conf。验证一下能不能连上:

rclone lsd gdrive:

能列出网盘里的目录,就说明接好了。

第三步:把对象存储(S3 / MinIO / Scaleway)也接进来

除了网盘,很多对象存储(AWS S3、MinIO、Scaleway、Wasabi、Cloudflare R2 等)也能挂载,而且它们通常比网盘更"规矩"——没有每天 750GB 上传上限那类限制,更适合当长期仓库。

配置一个 S3 类型的 remote(以 Scaleway 为例):

rclone config
# n 新建
# 名字:比如 s3scw
# 存储类型选 "Amazon S3 Compliant Storage Providers"
# provider 选 Scaleway
# 填 access_key_id、secret_access_key
# region:例如 fr-par
# endpoint:s3.fr-par.scw.cloud
# 其余基本回车用默认

MinIO 这类自建 S3 同理,provider 选 MinioAny other S3 compatible provider,再填你自己的 endpoint 即可。验证:

rclone lsd s3scw:

第四步:挂载!真实命令与参数讲解

先建个本地挂载点目录:

mkdir -p ~/gdrive

然后挂载 Google Drive(前台跑,方便看报错):

rclone mount gdrive: ~/gdrive \
  --vfs-cache-mode full \
  --vfs-cache-max-age 168h \
  --cache-dir ~/.cache/rclone \
  --dir-cache-time 1h \
  --buffer-size 64M \
  --allow-other \
  --daemon

挂载 S3 桶稍有不同(对象存储建议加 --no-modtime,减少不必要的元数据请求):

mkdir -p /mnt/s3
rclone mount s3scw:mybucket /mnt/s3 \
  --vfs-cache-mode full \
  --vfs-cache-max-size 5G \
  --vfs-cache-max-age 24h \
  --dir-cache-time 1h \
  --buffer-size 32M \
  --no-modtime \
  --allow-other \
  --daemon

下面把几个关键参数掰开说清楚,这也是整篇文章的精华——参数没配好,要么慢,要么把 VPS 撑爆

  • --vfs-cache-mode:这是 VFS(虚拟文件系统)缓存模式,有 4 档:

- off:完全直通,每次打开都去云端下载,最慢,一致性最强; - minimal:只缓存写文件的元数据,读还是走云端(默认值,适合纯只读); - writes:写入先落本地缓存,读仍可能远程拉取,适合"主要往里写"的场景(比如备份); - full:读写都经过本地缓存,第一次打开会把整个文件拉下来,之后从缓存读,最像本地硬盘,兼容性最好。挂媒体库、当日常硬盘用,强烈建议 full

  • --cache-dir:缓存文件存在哪。注意!千万别指到 /tmp 这种可能是内存盘(tmpfs)的地方,否则缓存会把你的内存吃光。小硬盘 VPS 就指到你的真实磁盘目录(比如 ~/.cache/rclone/mnt/rclonecache)。
  • --vfs-cache-max-size:缓存总大小上限。比如 5G10G。设了之后,rclone 会自动清理最久没用的文件,别让缓存把本地盘写满。媒体库机器盘大的可以设 50G~200G,小机器就保守点,10G 上下。
  • --vfs-cache-max-age:缓存文件最长保留多久。比如 168h 是 7 天。越大,重复访问越快,但也越占空间。
  • --dir-cache-time:目录列表(文件夹里有哪些文件)在内存里缓存多久。默认 5 分钟。Google Drive 这类支持轮询的远端,可以放心设大(比如 5000h),能大幅减少 API 调用,列表刷新更顺。
  • --buffer-size:每个被打开的文件在内存里预读的缓冲,比如 64M。开大点顺序读更快,但会占内存——小内存 VPS 别太贪,32M~64M 比较稳。
  • --allow-other:允许系统里其他用户(比如跑网站、跑 Plex 的那个用户)访问这个挂载点。需要先在 /etc/fuse.conf 里把 user_allow_other 那行的注释去掉。
  • --daemon:后台运行。加了这个,命令跑完终端就返回,挂载在后台默默干活。

卸载也很简单:

fusermount -uz ~/gdrive

让它在开机时自动挂载(systemd 服务)

手动挂一次不够,VPS 重启后最好能自己恢复。写个 systemd 服务最稳:

sudo nano /etc/systemd/system/rclone-gdrive.service

内容(把用户名和路径换成你自己的):

[Unit]
Description=Rclone Google Drive Mount
After=network-online.target
Wants=network-online.target

[Service]
Type=notify
User=你的用户名
ExecStart=/usr/bin/rclone mount gdrive: /home/你的用户名/gdrive \
  --vfs-cache-mode full \
  --vfs-cache-max-age 168h \
  --cache-dir /home/你的用户名/.cache/rclone \
  --dir-cache-time 1h \
  --buffer-size 64M \
  --allow-other \
  --log-level INFO \
  --log-file /home/你的用户名/.cache/rclone/rclone.log
ExecStop=/bin/fusermount -uz /home/你的用户名/gdrive
Restart=on-failure
RestartSec=10

[Install]
WantedBy=multi-user.target

存盘后启用并启动:

sudo systemctl daemon-reload
sudo systemctl enable --now rclone-gdrive.service
systemctl status rclone-gdrive.service

Restart=on-failure 的好处是:万一网络抖一下挂载掉了,它会自动重试,不用你半夜爬起来手动重挂。

缓存优化:别把 VPS 那点内存和临时盘撑爆

小 VPS 最怕的就是"缓存失控"。这里给几个实在的提醒:

  1. 缓存目录一定要落在真实磁盘上,别用 tmpfs/内存盘。可以用 df -h 看一眼 --cache-dir 指向的分区是不是真的硬盘。
  2. 务必设 --vfs-cache-max-size。不设这个上限,缓存会一直涨,直到把盘写满,然后 Plex 放不出、程序报错,一查才发现盘满了。
  3. --buffer-size 别开太猛。它按"每个打开的文件"算内存,开 512M 同时开 10 个文件就是 5GB 内存,1GB 内存的小机器直接爆。32M~64M 通常够用。
  4. Plex/Emby 的元数据、缩略图放本地。媒体文件在云端没关系,但 Plex 自己的数据库和缩略图一定要在本地 SSD 上,否则每次扫描都去云端拉,又慢又烧 API 额度。
  5. 留意网盘的每日额度。Google Drive 和 OneDrive 对"上传"都有每天约 750GB 的上限,短期内猛塞大量文件会被限流。用 --bwlimit 100M 之类的参数限速、错峰上传更稳妥。

这玩意到底能拿来干啥?

说了半天技术,落到实用场景上,主要有这么几类:

  • 给 Plex / Emby 当媒体库:把电影、剧集放在 Google Drive 或 OneDrive,挂到 VPS 本地目录,Plex/Emby 直接扫描这个目录就能播。家里 NAS 空间不够的,这就是"云上大盘鸡"。注意:VPS 上一般不建议实时转码(太吃 CPU),播放端选"原画"更稳。
  • 自动备份:把本地重要数据定时同步到云端。比如每天把数据库备份、网站文件 rclone copy 上去:
  rclone copy /var/backups gdrive:server-backups --bwlimit 20M

或者双向同步用 rclone sync(注意 sync 是"以源为准",目标上多出来的文件会被删,第一次用先 --dry-run 试跑)。

  • 当静态文件仓库:对象存储(S3/Scaleway)特别适合长期存冷数据、日志归档、安装包等。挂载后像本地文件夹一样 cp 进去就行,成本比扩容 VPS 硬盘低得多。
  • 合并多盘(进阶):配合 unionmergerfs,可以把多个网盘、本地盘合成一个统一目录,空间叠加着用。

几个容易踩的坑

  • 权限问题:挂出来其他用户访问不了,多半是忘了开 --allow-other/etc/fuse.conf 里的 user_allow_other
  • 递归拷贝误伤:挂载后目录看着像本地盘,但 cp -r 一大片、或者 rsync 配错方向,可能瞬间把你网盘额度刷爆。重要的传输用 rclone copy/rclone sync 显式指定,别拿普通 cp 乱造。
  • 不要把系统关键目录挂到云端:比如别把 /var、网站根目录直接设为挂载点去"借空间",万一云端抽风,网站就瘫了。建议单独挂一个干净的目录(如 ~/gdrive/mnt/s3)专门放"可云端化"的文件。
  • 配置文件要保密rclone.conf 里是明文令牌,chmod 600 ~/.config/rclone/rclone.conf 收好权限,别泄露。

结论

便宜 VPS 硬盘小,不是没法补救。用 Rclone 把 Google Drive、OneDrive 或者 S3 对象存储挂载成本地目录,相当于给你的小机器接了一块"无限大的外接硬盘"——媒体库、备份、冷文件存储都能丢上去,本地那 20GB 始终保持清爽。

记住核心就三件事:装好 rclone 和 FUSE → 配好 remote 并搞定授权 → 用带缓存参数的 rclone mount 挂上去,再用 systemd 设成开机自启。参数上别偷懒,把 --vfs-cache-mode--cache-dir--vfs-cache-max-size 这几个配明白,既跑得顺,也不会把 VPS 那点内存和临时盘撑爆。折腾一次,长期受益,这才是便宜 VPS 的正确打开方式。

---

延伸阅读

更多相关攻略推荐:从 Git Push 到秒级上线:CI/CD 流水线与"无中断"发布【VPS 进阶玩法精选 030】用 VPS 搭建云端 IDE(cod连云厂商也看不到你的数据?机密计算(Confidential Com被割裂的"云上互联网":数据主权(GDPR)、本地化存储与主权云(S什么时候非得要独立 IPv4?便宜国外 VPS 独立 IP 适用场景