使用去重将多个驱动器备份到 Backblaze – 推出 b2-dedup
Source: Dev.to
请提供您想要翻译的具体文本内容,我将按照要求将其翻译成简体中文并保留原始的格式、Markdown 语法以及技术术语。谢谢!
介绍
在多个硬盘、NAS 盒子或不同电脑之间备份数 TB 的数据?你希望把所有数据放在一个安全的、离线的地方,而不需要为冗余上传或重复存储花费巨额费用。
这正是我创建 b2-dedup 的原因——它是为 Backblaze B2 定制的并行、流式去重上传工具。
您将学到
- 为什么在我看来,Backblaze B2 是个人或大规模备份相较于 AWS S3、Azure Blob 等的最明智选择
- 跨磁盘去重如何为您节省时间、带宽和金钱
- b2-dedup 的逐步设置与使用方法
Source: …
Backblaze B2 与其他云存储对比(2025‑2026)
| Service | Storage 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 → 可与 rclone、restic、Veeam 等工具配合使用。
- 没有复杂的存储层级/类别,除非你主动使用 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_ID 和 B2_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
有用的标志
| Flag | Description |
|---|---|
--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 仅用于初始/增量去重上传。
您可以将其与 rclone、Borg、restic 等结合使用,以实现版本控制或其他功能。
好处概览
- 一个便宜、耐用的离线地点
- 跨驱动去重,显著降低上传时间和存储费用
- 并行、可恢复、低内存操作
我多年来一直在运行类似的设置——它在存放照片、视频、ISO 镜像和不可替代的文档方面非常可靠。
开始使用
- Repository:
- 如果觉得有用,请给仓库加星。
- 如有问题、发现 bug 或想贡献,请打开 issue 或 PR。
祝你愉快地(去重)备份! 🚀