使用去重将多个驱动器备份到 Backblaze – 推出 b2-dedup

发布: (2026年1月19日 GMT+8 00:06)
7 min read
原文: Dev.to

Source: Dev.to

请提供您想要翻译的具体文本内容,我将按照要求将其翻译成简体中文并保留原始的格式、Markdown 语法以及技术术语。谢谢!

介绍

在多个硬盘、NAS 盒子或不同电脑之间备份数 TB 的数据?你希望把所有数据放在一个安全的、离线的地方,而不需要为冗余上传或重复存储花费巨额费用。
这正是我创建 b2-dedup 的原因——它是为 Backblaze B2 定制的并行、流式去重上传工具。

您将学到

  • 为什么在我看来,Backblaze B2 是个人或大规模备份相较于 AWS S3、Azure Blob 等的最明智选择
  • 跨磁盘去重如何为您节省时间、带宽和金钱
  • b2-dedup 的逐步设置与使用方法

Source:

Backblaze B2 与其他云存储对比(2025‑2026)

ServiceStorage Cost (≈)Egress Cost
B2~$6 /TB / month(最近从 $5/TB 调整)免费出站流量最高可达月均存储量的 3 倍(对许多 CDN/合作伙伴如 Cloudflare、Fastly 等无限免费)
AWS S3 Standard~$23 /TB / month(前 50 TB 阶梯)$0.08–$0.09 / GB,免费层之后(恢复 1 TB 约 $80)
Azure Blob Hot与 S3 相近(约 $18–$23 /TB)同 S3

结论: B2 的价格大约是始终热、即时可访问存储的 1/4 到 1/5。

其他注意事项

  • 没有上传费用、删除惩罚、最小文件大小或隐藏的 API 调用费用,避免在大备份时产生额外开支(B2 将 Class A 调用设为免费)。
  • 支持 S3 兼容 API → 可与 rcloneresticVeeam 等工具配合使用。
  • 没有复杂的存储层级/类别,除非你主动使用 Glacier/Archive 进行冷存储,否则不会意外被锁定在高价层。

对于个人用户、家庭实验室数据堆积者、摄影/摄像师,或进行异地备份的小型企业来说,B2 在可预测的低成本和合理的出站费用方面更具优势。

为什么需要新工具? – 跨驱动去重的需求

当你备份多个驱动器(例如,主电脑 SSD、外接 HDD、媒体 NAS)时,往往会出现大量重复文件——相同的照片、电影、安装程序、操作系统镜像在不同机器之间重复。

标准工具(rclone、Duplicati 等)通常只在单个备份任务内部进行去重,而不会在完全独立的来源之间进行 去重。
b2-dedup 解决了这个问题:

  • 使用本地 SQLite 数据库(~/b2_dedup.db)记录它见过的每个文件的 SHA‑256 哈希。
  • 当你将其指向 Drive #2 时,它会跳过已经从 Drive #1 上传的文件。
  • 并行上传(默认 10 个工作线程,可调)+ 流式分块上传 → 低内存占用,高速传输。
  • 支持断点续传——中断的任务可以从上次停止的地方继续。
  • 仅扫描 / 试运行模式,确保安全。

结果:一个 B2 bucket,多个“驱动器名称”前缀(例如 PC2025/MediaNAS/Laptop/)——但实际存储占用被最小化,因为重复文件不会再次上传。

前置条件

  • Python 3.8+
  • 已创建的 Backblaze B2 账户 + 存储桶
  • B2 应用密钥(KeyID + Application Key)——生成一个具有 Read + Write 访问权限的密钥,针对您的存储桶

安装

# Clone the repository
git clone https://github.com/n0nag0n/b2-dedup.git
cd b2-dedup

# Install Python dependencies
pip install -r requirements.txt

安装官方 B2 CLI(可选但推荐)

pip install b2
b2 account authorize   # 按提示输入你的 KeyID 和 App Key

b2-dedup 将自动使用这些凭证。
(或者,导出环境变量:B2_KEY_IDB2_APPLICATION_KEY。)

使用示例

1️⃣ 第一个驱动(基线)

# Optional: just scan & hash everything first (no upload)
python b2_dedup.py /mnt/primary-drive \
    --drive-name PrimaryPC \
    --bucket my-backup-bucket-123 \
    --scan-only
# Then do the real upload
python b2_dedup.py /mnt/primary-drive \
    --drive-name PrimaryPC \
    --bucket my-backup-bucket-123

2️⃣ 第二个(或第 N 个)驱动 — 跳过重复文件!

python b2_dedup.py /mnt/media-drive \
    --drive-name MediaNAS \
    --bucket my-backup-bucket-123 \
    --workers 20

专业提示:先进行干运行预览

python b2_dedup.py /mnt/media-drive \
    --drive-name MediaNAS \
    --bucket my-backup-bucket-123 \
    --dry-run

有用的标志

FlagDescription
--workers N并行上传工作线程的数量(默认 10)。如果你的网络/上传带宽能够承受,可适当增加。
--dry-run显示将要上传的内容,但不实际发送数据。
--scan-only构建/填充哈希数据库而不触及 B2。
--refresh-count强制重新计数文件(当源文件变化很大时很有用)。
--drive-name NAME在存储桶内部使用的前缀(例如 PrimaryPC/)。在重命名或重新组织驱动器时请更改。

去重工作原理

  • 前缀 = --drive-name(例如 PrimaryPC/Documents/report.docx)。
  • 去重基于 内容哈希 —— 无论路径或文件名如何,只要文件内容相同,就只存储一次。
  • 数据库位于 ~/b2_dedup.db —— 请务必备份!(文件很小,但如果丢失就需要重新对所有文件进行哈希计算。)

对于非常大的首次扫描,建议先使用 --scan-only 在夜间运行扫描,然后再执行上传。

与其他备份工具结合

b2-dedup 仅用于初始/增量去重上传。
您可以将其与 rcloneBorgrestic 等结合使用,以实现版本控制或其他功能。

好处概览

  • 一个便宜、耐用的离线地点
  • 跨驱动去重,显著降低上传时间和存储费用
  • 并行、可恢复、低内存操作

我多年来一直在运行类似的设置——它在存放照片、视频、ISO 镜像和不可替代的文档方面非常可靠。

开始使用

  • Repository:
  • 如果觉得有用,请给仓库加星。
  • 如有问题、发现 bug 或想贡献,请打开 issue 或 PR。

祝你愉快地(去重)备份! 🚀

Back to Blog

相关文章

阅读更多 »