#file #cp #coreutils #command-line-tool

libxcp

libxcp 是一个支持多线程、细粒度进度反馈、可插拔驱动和 .gitignore 过滤器的高级文件复制引擎。 libxcp 提供了 xcp 的核心功能。

7 个版本 (破坏性更新)

0.22.0 2024 年 6 月 22 日
0.21.1 2024 年 2 月 23 日
0.20.0 2024 年 2 月 6 日
0.19.0 2024 年 2 月 2 日
0.1.0 2024 年 1 月 24 日

#936 in 文件系统

Download history 20/week @ 2024-04-29 22/week @ 2024-05-06 21/week @ 2024-05-13 29/week @ 2024-05-20 36/week @ 2024-05-27 58/week @ 2024-06-03 84/week @ 2024-06-10 291/week @ 2024-06-17 196/week @ 2024-06-24 154/week @ 2024-07-01 86/week @ 2024-07-08 98/week @ 2024-07-15 116/week @ 2024-07-22 68/week @ 2024-07-29 189/week @ 2024-08-05 37/week @ 2024-08-12

每月 425 次下载
用于 xcp

GPL-3.0-only

99KB
2K SLoC

libxcp: 高级文件复制引擎

libxcp 是一个高级文件复制引擎。它支持多线程、细粒度进度反馈、可插拔驱动和 .gitignore 过滤器。 libxcp 是 xcp 命令行工具的核心功能。

Crates.io doc.rs Github Actions CircleCI

特性

  • 在 Linux 上,它使用 copy_file_range 调用来复制文件。这是 Linux 下文件复制的最有效方法;特别是它具有文件系统感知能力,可以通过在服务器端执行复制操作来大大加快网络挂载的复制速度。然而,与 copy_file_range 不同,稀疏文件会被检测并适当处理。
  • 支持现代文件系统功能,如 reflinks
  • 针对“现代”系统(即多核、大量 RAM 和固态硬盘,特别是连接到主系统总线上的硬盘,例如 NVMe)进行了优化。
  • 对于具有并行 IO 的系统,可选的激进并行性。在现代化笔记本电脑上的快速实验表明,在 NVMe 硬盘中进行并行复制可能会有所裨益。这显然非常依赖于系统。
  • 可切换的“驱动程序”,以方便测试复制优化的替代策略。目前有 2 个驱动程序可用
    • 'parfile':之前的硬编码 xcp 复制方法,它并行化树遍历和文件复制。这是默认设置。
    • 'parblock':一个实验性驱动程序,它在块级别并行化复制。在某些架构中,这可能有助于性能提升,但会增加复杂性。欢迎测试。
  • 通过回退操作支持非 Linux 类 Unix 操作系统(OS X、*BSD)。尽管在这种情况下尚不支持稀疏文件。
  • 可选地理解 .gitignore 文件以限制复制的目录。

测试

libxcp 本身没有很多测试;但是,顶级 xcp 应用程序有一个完整的功能测试套件,包括模糊测试和压力测试。现在应将其视为测试套件。

依赖关系

~17–26MB
~478K SLoC