#b2 #backblaze #command-line-tool #docker-image #api-bindings

app b2get

一个用于从 Backblaze B2 下载文件的简单 CLI 工具。

2 个不稳定版本

0.2.0 2023年10月24日
0.1.0 2023年10月24日

#1188 in 命令行工具

BSD-3-Clause

15KB
174 代码行

b2get

b2get 是一个用于从 Backblaze B2 下载文件的极其简单的 CLI。它不执行其他操作;你不会发现 API 的其他部分被覆盖。它仅仅是一个文件下载器。它只下载一个文件然后退出。

为什么?

主要是因为我们多年来与官方 Python 解决方案有随机问题,并想要一个更容易调试的简单二进制文件。

主要用例是自动化,例如 Ansible playbooks,在 docker 镜像中等,用于数据下载。

快速入门

  1. 使用 cargo install b2get 安装。 (或者从 GitHub 下载发布二进制文件;支持某些操作系统/架构配置,但受限于免费运行者。)
  2. 使用您的 B2 凭据设置环境变量 B2_APPLICATION_KEY_IDB2_APPLICATION_KEY
  3. 通过您首选的方法调用,提供存储桶名称、B2 中的文件名以及您要在磁盘上保存文件的路径。
b2get com-your-bucket remote-filename.tar path/to/local-path.tar

使用 -h--help 运行以获取所有选项。

注意和限制

我们为此开发了内部使用,这可能导致一些怪癖,我们将在下面突出显示。

我们假设这是在服务器或类似设备上使用

我们假设您有一个稳定的网络连接,不需要为 b2 打开 8 个并行线程。我们同时依赖于底层的 HTTP 栈/reqwest 来处理所有错误。

磁盘上的写入内容不单独验证

其他客户端通常直接在磁盘上验证数据,这会导致大量的额外 I/O 和 CPU 使用。这可能需要数分钟,在此期间 CPU 核心饱和,尤其是在下载大文件时。

我们的方法是在文件下载时计算 SHA1 哈希。这消除了结尾的大停顿,并且开销极低。特别是

  • 我们假设服务器的 RAM 可以检测/纠正错误
  • 我们假设您正在使用类似 ZFS 的文件系统,具有原子写入(即使异步)并且不会损坏位
  • 所以,当我们最终在循环结束时同步缓冲区时,我们相信文件已经完全验证,无需第二次遍历

这真的很简单

我们目前不支持除单个文件下载之外的其他功能,以及非常少数的(大多无关紧要)选项。但我们认为这是最有吸引力的功能之一。与其他工具相比,它非常易于理解、审计和维护。如果您想在简单下载器的精神下扩展它,欢迎提交PR。

依赖项

~8–25MB
~359K SLoC