存储 VPS 需要多大容量?如何按数据计算
根据照片库、Nextcloud 共享目录和 restic 保留策略计算存储 VPS 容量,加入未来两年增长并除以 0.8;同时比较每 TB 每月欧元成本。
简短回答
存储 VPS 的规格应根据您自己的数据确定,而不是根据价目表选择。先测量需要在线保留的数据量,再计算在目标保留策略下备份存储库会增长到多大,然后加上未来两年的预期增长,最后将总量除以 0.8,确保文件系统不会用满。多数人会跳过最后这一步,因此一月份购买的 2 TB 套餐到了九月份就已用满。
最容易让人意外的是备份存储库。它的大小取决于您的保留策略,而不是源数据的大小。在下面的示例模型中,即使源数据始终不超过 500 GB,只要要求保留三年的历史版本,存储库就会占用 2690 GB。源数据本身没有增加。您只是要求保留更多版本。
全文使用每 TB 每月的欧元成本表示,因为只有这样,才能将租用服务器与托管存储设备,或您家中 NAS(网络附加存储)的成本进行比较。末尾的 DSGVO 部分比看起来更重要,因为这些数据大多最终会是其他人的照片。如果您仍在决定存储 VPS 还是普通 VPS 更适合您,请先解决这个问题。本指南将回答下一个问题:需要多少 TB,以及成本是多少。
第 1 步:测量现有容量
不要估算。直接测量。
sudo du -x -h -d 1 /srv | sort -h
sudo ncdu -x /srv
df -h /srvdu -x 位于同一个文件系统中,因此挂载到 /srv 下的独立备份卷不会被重复计算。ncdu 会以可浏览列表的形式显示相同数据;查找存放 400 GB 遗忘视频的目录时,这种方式更快。df 报告文件系统实际认为已使用的容量。当 df 和 du 相差很大时,说明某个进程仍在占用已删除文件。sudo lsof +L1 会列出这些文件;该进程重启后,空间才会释放。
然后,根据应用在原始文件基础上新增的数据修正容量。Immich 会保留原始文件,生成缩略图,并创建视频转码副本。应按原始文件大小的 10 到 25 percent 预留额外空间;这些媒体库通常会落在这个范围内,服务运行后再测量实际用量。Immich 的内存和磁盘需求 取决于媒体库大小,而不是用户数量。这些派生文件可以从原始文件重新生成,因此不要将其纳入备份集,只需将其计入在线容量。
Nextcloud 是另一个不易察觉的容量倍增因素。它会为每个文件保留回收站和版本历史记录,而且两者都存放在同一个数据目录中。因此,一个 120 GB 的共享目录在磁盘上占用的空间会超过用户可见文件大小之和。在进行任何容量规划前,先在 config.php 中设置 trashbin_retention_obligation 和 versions_retention_obligation,并确认 Nextcloud Docker 安装实际将文件保存在哪里,因为实际路径通常不是 compose 文件所显示的路径。
第 2 步:为什么备份仓库的大小不等于数据大小
restic 会将文件拆分为基于内容寻址的块。一个文件即使出现在 100 个快照中,也只会存储一次。如果文件最后几 KB 发生变化,restic 不会再次完整存储该文件,因为只会写入发生变化的块。当仓库使用格式版本 2 时,restic 还会压缩这些块,因此请使用 restic -r <repo> cat config 检查仓库,并读取 version 字段;如果仓库版本较旧,请使用 restic migrate upgrade_repo_v2 升级。照片和视频本身已经经过压缩,压缩不会明显减少其大小;文本和数据库转储则通常可以大幅压缩。
请直接查询仓库,不要猜测。
restic -r sftp:backup@storage.example.net:/srv/restic stats --mode raw-data
restic -r sftp:backup@storage.example.net:/srv/restic stats latest --mode restore-size--mode raw-data 报告仓库在去重和压缩后的占用空间。将 --mode restore-size 与 latest 对比,可以得知恢复最新快照时需要写入磁盘的数据量。这两个数字之间的差值,就是历史版本占用的空间。在服务器本身,du -sh /srv/restic 是实际占用空间的准确依据,其结果应与原始数据大小接近。如果仓库尚不存在,在 VPS 上设置 restic 大约需要 20 分钟。这样,容量规划依据的是测量结果,而不是估算值。
保留策略需要占用多少 GB?
假设有一个 500 GB 的数据源,每天替换 2 GB 内容,并且被替换的内容已删除且不会再次出现。此时,仓库会保存当前的 500 GB,以及所保留的最旧快照中仍处于当前状态的全部内容。仓库大小取决于最旧快照的时间。
此图表背后的数据
[
{
"label": "7 days of history",
"repo_gb": 514
},
{
"label": "35 days of history",
"repo_gb": 570
},
{
"label": "1 year of history",
"repo_gb": 1230
},
{
"label": "3 years of history",
"repo_gb": 2690
}
]这些数据行是根据上文假设计算得出的结果,并不是对您数据的测量。关键在于变化趋势。514 GB 可以保留一周历史,相比单份副本几乎不增加成本。570 GB 可以保留五周。1230 GB 可以保留一年。2690 GB 可以保留三年,容量超过源数据的五倍,而这些版本几乎肯定不会被恢复。
保留一年的历史只需一条命令。
restic -r sftp:backup@storage.example.net:/srv/restic forget \
--keep-daily 7 --keep-weekly 5 --keep-monthly 12 --pruneforget 会删除快照。--prune 才是释放空间的步骤,因为如果不执行该命令,数据会继续留在仓库中,du -sh 也不会变化。请按计划运行此命令。永不清理的仓库会无限增长,最先出现的迹象通常是磁盘已满。
原地重写的数据表现得比该模型更差。每晚将数据库导出到一个压缩文件,会完全破坏去重效果,因为压缩流从第一个不同的字节开始直到末尾都会发生变化。因此,restic 每晚都会将其视为全新的文件并完整存储。请导出未压缩的数据,或使用 gzip --rsyncable,让 restic 负责压缩。这个改动将决定一年每晚导出的成本是约一份数据库副本,还是每个保留快照各一份数据库副本。
一个可操作的示例:照片、文档和一台小型服务器
斯图加特附近的一名自由摄影师有四类数据:客户和家人的照片、存放合同与发票的 Nextcloud 共享目录、翻录的影片库,以及一台运行 Nextcloud 及其数据库的小型 VPS 的卷。其中只有一部分数据适合存放在租用的磁盘上。
此图表背后的数据
[
{
"label": "Photo library (RAW and JPEG)",
"source_gb": 900,
"backup_gb": 930
},
{
"label": "Nextcloud documents share",
"source_gb": 120,
"backup_gb": 190
},
{
"label": "Film and series library",
"source_gb": 2000,
"backup_gb": 0
},
{
"label": "Server volumes and databases",
"source_gb": 200,
"backup_gb": 340
}
]将第二列与第一列对照。影片库的源数据为 2000 GB,备份数据为 0 GB,因为光盘仍在架上;重新翻录只需一个周末,不会影响客户。照片从在线数据的 900 GB 增长到存储备份的 930 GB,几乎没有额外增长,因为照片只写入一次,从不原地编辑。文档共享目录则相反,从在线数据的 120 GB 增长到存储备份的 190 GB,因为这些文件每个工作日都会编辑,而一年的历史记录会保留每个文件的一个版本。服务器卷和数据库的比例最差:在线数据为 200 GB,而存储备份为 340 GB。
在估算容量前,先确定哪些数据属于备份集。可以重新创建的数据不应纳入备份;每排除 1 GB,就意味着未来五年中每个月都少租用 1 GB 的存储空间。
为存储 VPS 确定容量的计算方法
此图表背后的数据
[
{
"label": "Backup repository today",
"gb": 1460
},
{
"label": "Growth over 24 months",
"gb": 400
},
{
"label": "Data at month 24",
"gb": 1860
},
{
"label": "Headroom to stay at 80 percent",
"gb": 465
},
{
"label": "Capacity to buy",
"gb": 2325
}
]从上到下阅读。当前存储库为 1460 GB,即上方备份列的总和。未来 24 个月预计增长 400 GB,主要来自每月新增约 15 GB 的照片,以及其他数据的缓慢增长。因此,第 24 个月时的数据量将达到 1860 GB。除以 0.8 后,需要购买的容量为 2325 GB,其中 465 GB 是你有意保留、永远不会填满的余量。
请测量实际增长速度,不要凭感觉估算。如果保留过一年前的数据,可以将今天的 du 输出与当时的相同数据进行比较;否则连续记录一个月的每周数据,再据此换算。增长率估计错误,是容量规划在不知不觉中不足的原因。
2325 GB 不适合购买 2 TB 方案。服务商标称的 TB 使用十进制单位,因此 2 TB 在扣除文件系统自身开销前就是 2000 GB,而余量规则已经应用于该数值。合理的选择是购买更高一档,或缩短保留策略,使需求降至 2000 GB 以下。存储方案的容量通常大致翻倍,因此容量规划几乎总会落在两个档位之间。真正需要判断的是,在合同期限内,哪一个档位更容易说明容量足够。
购买前还要进行两项调整。这里的容量用于异地副本,因此 将租用的服务器作为异地备份目标 意味着家中的副本需要单独购买,并使用独立的容量计算。如果数据重要到需要保留两个相互独立的副本,在另一家服务商处建立第二个 restic 存储库 会使这个数字翻倍,而不是只增加一小部分,因为第二个存储库只能在自身范围内进行去重。
服务商为存储 VPS 标出的容量,是已经扣除其所采用的冗余机制后的可用容量。自己购买硬件时,冗余成本由你承担:RAID 10 会返还一半原始 TB 容量,两磁盘镜像同样只返还一半。请比较可用容量,而不是原始容量。
为什么不能将磁盘填满
0.8 这个除数不是保守值,而是文件系统和备份工具开始表现异常的临界点。
写时复制文件系统(包括 ZFS 和 btrfs)不会直接覆盖原有数据块,因此每次写入都需要新的位置。存储池接近满载时,分配器会花费大量时间寻找可用位置,写入延迟会在存储池真正写满前很久就开始上升。ZFS 存储池的使用率应保持在 80% 或以下。
restic prune 需要工作空间。它会重新打包使用不完整的 pack 文件,因此必须先写入新文件,再删除旧文件。存储库写满后,prune 操作会失败;而看似直接的解决方法是删除快照来释放空间,但删除快照正是无法执行的操作。此时应使用 restic prune --max-repack-size 0。它会删除完全未使用的 pack 文件,并跳过重新打包,因此几乎不需要额外工作空间就能释放空间。
ext4 默认会为 root 预留文件系统 5% 的空间。对于 4 TB 的数据卷,这相当于你付费购买却无法使用的 200 GB。
sudo tune2fs -l /dev/vdb1 | grep -i 'reserved block count'
sudo tune2fs -m 1 /dev/vdb1
zpool list -o name,size,alloc,free,capacity
df --output=pcent,target /srv/restic在专用数据卷上,将预留空间降至 1% 是安全的。不要在根文件系统上这样做,因为磁盘写满时,正是这部分预留空间让 root 仍能登录并执行清理操作。
卷写满后,所有位置都会立即明确失败。写入会返回 No space left on device,备份会中止,数据库会停止接受写入。在 ZFS 上情况更糟,因为删除文件本身也需要执行写入;存储池达到 100% 时,甚至可能拒绝执行本可解决问题的删除操作。应在使用率达到 80% 时告警,而不是等到 95%,这样你可以在周二下午购买下一级存储,而不必凌晨 3 点处理扩容。
每月每 TB 需要多少欧元?
在比较其他因素前,先将每个候选方案都换算为每 TB 每月的欧元成本。用月费除以标称容量(TB)。不同方案的资源组合方式不同,标题价格也会掩盖实际费率。
不要直接引用文章中的价格,包括本文中的价格。服务商会调整套餐,而 2026 年 8 月有效的价格只能作为计算起点,不能视为报价。真正具有参考价值的是计算方法。
NAS 也要进行相同的换算,因为这通常是读者实际进行的比较。以一个双盘位机箱和两块 8 TB 硬盘组成的镜像为例。如果硬件成本为 600 欧元(截至 2026 年 8 月属于合理估算,请查看今天的商店价格),使用寿命为 5 年,则每月硬件成本为 10 欧元。再加上电费。两块机械硬盘和机箱的功耗约为 25 W,因此按每天 24 小时、每年 365 天计算,每年耗电 219 kWh;按每 kWh 0.35 欧元计算(截至 2026 年 8 月德国普通家庭的典型电价,请以您自己的资费为准),每年约 77 欧元,即每月 6.40 欧元。镜像后可用容量为 8 TB。总成本约为每月 16.40 欧元,即每 TB 每月约 2.05 欧元。
这个费率看起来难以超越,但要注意它不包含哪些保障。NAS 与受其保护的计算机位于同一套住宅中,因此一次火灾、盗窃、漏水,或一次扩散到 SMB 共享的勒索软件感染,都可能在同一分钟内同时破坏两份副本。应将 NAS 与本地磁盘进行比较。应将租用的服务器与您无论如何都需要的异地副本进行比较,而 NAS 并不提供异地副本。在 Dropbox 订阅上进行相同的换算也很有价值,趁电子表格还打开时完成。
托管存储盒是另一种合理的比较对象。它通常是市场上每 TB 欧元成本最低的方案,因为它只负责存储。您可以获得 SFTP、rsync、WebDAV,通常还包括 Borg 或 restic 端点,但没有 shell。这足以作为备份目标,却不足以运行其他服务。如果您希望使用同一组硬盘同时提供照片库,就需要购买服务器。存储 VPS、块存储和对象存储之间的每 TB 成本差距足够大,因此产品类型通常比容量选择更能影响账单。
然后检查费率不包含哪些内容。网络流量通常最容易带来意外费用:恢复 1.5 TB 就会产生 1.5 TB 的出站流量,而带有每月传输额度的方案可能将一次恢复变成一张账单。请先询问超出额度后会发生什么,并在恢复开始前询问,而不是等到恢复过程中再确认。
数据表上的“EU”表示德国吗?
不表示。“EU”既可以指阿姆斯特丹、巴黎、赫尔辛基和华沙,也可以指法兰克福,而且部分提供商可能在几乎不提前通知的情况下迁移区域。如果合同或客户要求使用德国位置,数据表上的这个词并不足够。请按以下顺序核实。
- 通过书面方式向支持团队询问城市和设施,并保留回复。这是唯一具有法律效力的核查方式。
- 查看订单页面中是否列出了具体区域,然后阅读条款,确认该区域之后是否可以变更。
- 使用
whois -h whois.ripe.net 203.0.113.10查询 IP 地址段。country:字段说明的是注册信息,而不是机架位置,因此只能将其作为参考。 - 测量延迟。光纤距离决定了每 100 km 往返大约 1 ms 的理论下限,而且光纤线路不会笔直铺设,因此一个对德国用户线路的响应延迟为 6 ms 的服务器不可能位于赫尔辛基。
mtr -rwc 20 storage.example.net
ping -c 20 storage.example.netIP 地理定位数据库经常错误识别托管地址段,因为提供商可以在一个国家注册地址段,再将其路由到另一个国家。延迟可以证明磁盘距离您较近,但不能证明它们位于哪栋建筑内;只有书面回复可以确认这一点。如果要求使用德国位置,法兰克福数据中心的 VPS 通常是选择,因为法兰克福承载 DE-CIX,大多数德国提供商也在该城市部署了机架。如果您的用户位于更东部,波兰位置 在物理距离上更近,但其属于不同的司法管辖区,您的记录也应据此注明。
DSGVO:这些是他人的照片
DSGVO(Datenschutz-Grundverordnung,即 GDPR《通用数据保护条例》的德语名称)适用于个人数据。可识别个人身份的照片属于个人数据。包含姓名的发票属于个人数据,您提供给同事的 Nextcloud 共享内容也属于个人数据。本节用于提供方向,不构成法律建议。如果涉及客户数据,请咨询律师或您的 Datenschutzbeauftragter(数据保护官)。
租用磁盘会带来四项变化。
- 家庭活动豁免。第 2(2)(c) 条排除了纯粹的个人或家庭活动,因此家庭相册不在适用范围内。您一旦因收费而存储客户的婚礼照片,就不再属于这种情况。
- AVV。根据您的指示存储数据的提供商属于 Auftragsverarbeiter(处理者),第 28 条要求签订书面合同。在德语中,该合同称为 Auftragsverarbeitungsvertrag(AVV)。正规提供商会公开合同模板,并允许您在控制面板中签署。请在上传数据前取得合同,不要等到上传后再处理。
- 存储位置。在 EU 内部存储数据,可以避免处理第 44 条及后续条款涉及的数据传输问题。公司注册地与磁盘实际运行所在位置是两个不同的问题,您都应记录。
- 删除路径。第 17 条赋予个人删除权,而备份系统的设计目标正是防止数据被删除。请在有人提出请求前,先确定如何删除某个人的所有文件。
删除是最容易出问题的环节,因此必须明确处理。仅从源位置删除文件不会影响仓库,因为每个引用过该文件的快照仍然引用它。要彻底删除,需要执行两个步骤。
restic -r sftp:backup@storage.example.net:/srv/restic rewrite \
--exclude '/srv/data/clients/mueller/**' --dry-run
restic -r sftp:backup@storage.example.net:/srv/restic rewrite \
--exclude '/srv/data/clients/mueller/**' --forget
restic -r sftp:backup@storage.example.net:/srv/restic prunerewrite 会在排除指定路径后创建新的快照,--forget 会删除原始快照,但数据块会一直保留在仓库中,直到运行 prune,因为重写操作只会改变引用关系。先运行 --dry-run,查看它将处理的快照列表。完成后,使用 restic stats --mode raw-data 确认仓库实际缩小了。
加密是您在这里能够控制的最强技术措施。restic 仓库会在您的计算机上、上传任何数据前完成加密,使用计数器模式下的 AES-256 和 Poly1305-AES 消息认证码,因此提供商只能持有无法读取的密文。根据第 32 条,这具有重要作用,但不能替代 AVV,因为提供商仍在存储和托管个人数据。
签署合同前,再询问一个问题:提供商会保留您卷的快照和备份多长时间?这些都是相同个人数据的副本,您无法清理,也没有安排其创建时间。提供商快照是回滚功能,不是您可以依赖的备份,因此不要将其纳入容量规划,而应将其纳入删除文档。
今天即可执行的容量规划清单
- 在每台存放数据的机器上运行
sudo ncdu -x /,并记录每个超过 10 GB 的目录。 - 确定其中哪些目录需要纳入备份集。可以重新生成的数据不纳入备份。
- 选择保留策略并计算成本。保留一年的历史数据是常见选择。
- 如果已有存储库,运行
restic stats --mode raw-data。如果没有,则按源数据大小进行预算:每日编辑的数据额外预留约 50%,照片和视频额外预留约 5%。 - 加上过去十二个月实际测得的增长量。
- 将总量除以 0.8。
- 将每个候选方案换算为每 TB 每月的欧元成本,并将流量额度纳入同一比较。
- 要求对方书面确认数据中心所在城市;如果部分数据属于其他人,还要获取 AVV(如适用)。
FAQ
1 TB 的照片库需要多少 TB 的存储空间?
如果同一台服务器既提供照片库服务,又保存其备份,则需要约 2.75 TB。计算如下:原始照片占用 1000 GB;像 Immich 这样的图库生成的缩略图和转码文件还需要约 15%,因此在线数据约为 1150 GB。保留 1 年的 restic 历史记录几乎不会增加多少空间,因为照片通常只写入一次,不会再编辑,因此存储库约为 1050 GB。数据总量约为 2200 GB,再除以 0.8 预留余量,得到约 2750 GB。如果服务器只保存备份,而照片库位于家中,则 1.3 TB 足够。
为什么我的 restic 存储库比备份数据更大?
因为存储库会保留每个仍被保留快照引用的版本。重复数据删除会移除快照之间完全相同的部分,但无法移除发生变化的部分。每天重写的文件每次运行都会生成新的数据块,而这些数据块会一直保留,直到引用它们的最后一个快照被遗忘并清理。运行 restic forget --keep-daily 7 --keep-weekly 5 --keep-monthly 12 --prune,然后比较运行前后的 restic stats --mode raw-data。如果数值没有变化,说明缺少 --prune 标志,只删除了快照条目。
存储 VPS 上的磁盘最多可以使用到多少?
80% 是建议的工作上限。超过此上限后,ZFS 和 btrfs 等写时复制文件系统会因为分配器寻找可用空间而变慢,restic prune 也会失去重新打包 pack 文件所需的临时空间。卷完全写满的后果不只是速度变慢:写入会因 No space left on device 而失败;在使用率达到 100% 的 ZFS 池中,即使删除文件也可能失败,因为删除操作本身也需要写入。如果已经陷入这种状态,restic prune --max-repack-size 0 可以释放完全未使用的 pack 文件,而无需重新打包。
EU 数据中心是否意味着我的数据位于德国?
不是。数据表中的“EU”既可能指 Amsterdam、Paris、Helsinki 和 Warsaw,也可能指 Frankfurt;提供商可能会将区域部署在有可用容量的任意地点。请书面向支持团队确认城市和具体设施,并将回复与处理记录一同保存,因为该回复才具有法律效力。whois -h whois.ripe.net <ip> 显示 IP 地址块的注册国家,这只能作为线索,不能作为证明;往返延迟则可提供一个物理下限,即光纤每 100 km 约增加 1 ms。
家用 NAS 是否比存储 VPS 更便宜?
按 TB 计算,通常是。双盘位 NAS 配备两块 8 TB 硬盘并采用镜像配置,硬件成本为 600 euros,按 5 年分摊,再加上约 25 W 的持续功耗,折算后每月约 16 euros,可用容量为 8 TB;也就是每 TB 每月约 2 euros(数据截至 August 2026,请核对当前价格和您自己的电价)。不过,两者是不同的产品。NAS 与受保护的设备位于同一栋建筑内,因此火灾或入侵本地网络的勒索软件可能同时破坏两份副本。NAS 替代的是本地磁盘;租用的服务器替代的是您原本没有的异地副本。