2 个不稳定版本
0.2.0 | 2023年10月24日 |
---|---|
0.1.0 | 2023年10月24日 |
#1188 in 命令行工具
15KB
174 代码行
b2get
b2get
是一个用于从 Backblaze B2 下载文件的极其简单的 CLI。它不执行其他操作;你不会发现 API 的其他部分被覆盖。它仅仅是一个文件下载器。它只下载一个文件然后退出。
为什么?
主要是因为我们多年来与官方 Python 解决方案有随机问题,并想要一个更容易调试的简单二进制文件。
主要用例是自动化,例如 Ansible playbooks,在 docker 镜像中等,用于数据下载。
快速入门
- 使用
cargo install b2get
安装。 (或者从 GitHub 下载发布二进制文件;支持某些操作系统/架构配置,但受限于免费运行者。) - 使用您的 B2 凭据设置环境变量
B2_APPLICATION_KEY_ID
和B2_APPLICATION_KEY
。 - 通过您首选的方法调用,提供存储桶名称、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