14 个稳定版本

1.2.3 2023 年 8 月 25 日
1.2.2 2022 年 9 月 22 日
1.2.1 2022 年 6 月 20 日
1.0.8 2022 年 5 月 31 日

#115文件系统

GPL-3.0+

79KB
1.5K SLoC

Filespooler:顺序、分布式、POSIX 风格的任务队列处理的 CLI 和库

build docs

  • Filespooler 主页,包含详细的文档、许多集成示例和教程。
  • 详细的 manpage 参考,包括安装说明。
  • 发布页面,包括 Linux x86_64、aarch64 和 armhf(用于 Raspberry Pi)的预构建二进制文件。

简介

Filespooler 是一个 Unix 风格的工具,它简化了本地或远程命令的执行,包括 stdin 捕获,并易于与各种工具集成。以下将解释其含义。现在,先看看 Filespooler 的简要功能列表。

  • 它可以轻松使用 S3、Dropbox、Syncthing、NNCP、ssh、UUCP、USB 驱动器、CD 等作为传输。
    • 翻译:基本上,您可以将任何作为文件系统使用的工具用作传输。
  • 它可以使用任意的解码器命令管道(例如,zcat、stdcat、gpg、age 等)来预处理存储的包。
  • 它可以通过管道发送和接收包。
  • 其存储格式是简单的磁盘文件,带有锁定。
  • 它支持一对一和多对一配置。
  • 在向队列写入新任务时无需锁定,许多任意的工具(例如,Syncthing、Dropbox 等)可以安全地直接写入队列而无需任何帮助。
  • 队列处理严格按创建机器上的顺序进行,即使任务文件在目标机器上的到达顺序不同。
  • stdin 可以通过管道输入到任务创建工具中,并在远程机器上执行时将其管道到后续执行器。
  • 文件格式轻量;除非提供了大量额外参数,否则小于 100 字节的开销。
  • 队列格式轻量;在 Raspberry Pi 上拥有 1000 个不同的队列也很容易。
  • 整个处理过程基于流;任意大小的包都行,TB 级别的尺寸也没有问题。
  • Filespooler命令,fspl,非常轻量级,在x86_64上消耗的RAM少于10MB。
  • Filespooler具有广泛的文档。

Filespooler由一个用于与队列交互的命令行工具(fspl)组成。它还包括一个由fspl使用的Rust库。fspl的main.rs文件只有几行。

使用案例

想象一下,你想要将一台机器的增量备份发送到你的备份服务器。你可能运行如下命令:

tar --incremental -cSpf - ... | ssh backupsvr tar -xvSpf - -C /backups

当一切正常时,这将有效。但当两台机器之间的网络断开时,现在该怎么办?很可能是数据丢失。我们想要的是一种可靠地按顺序执行事情的方法,在数据顺序错乱的情况下可以重新排序。这许多情况下都很有用:Git仓库同步、备份等。

现在,假设你这样做:

tar --incremental -cSpf - ... | fspl prepare -s ~/statefile -i - > ~/syncedpath/fspl-`uuid`.fspl

在此阶段,像Syncthing或Dropbox这样的工具将此同步路径同步到备份服务器队列下的~/queue/jobs/目录。现在你可以在备份服务器上运行此命令(从cron、systemd等)

fspl queue-process -q ~/queue tar -- -xvSpf - -C /backups

砰!完成了。

queue-process默认会删除成功完成的作业。它会跟踪哪些作业已经完成,并按顺序处理它们。

版权

Copyright (C) 2022 John Goerzen <[email protected]>

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>.

依赖关系

~8–22MB
~271K SLoC