1 个不稳定版本

0.4.0 2021年6月16日

#941 in 文件系统


用于 datman

GPL-3.0-or-later

160KB
3.5K SLoC

山 (yama): 去重堆仓库

注意:此README尚未更新到实际情况...

yama
  [-w|--with [user@host:]path] [--with-encrypted true|false]

备份配置文件

远程

yama.toml 中,您可以配置远程

[remote.bob]
encrypted = true
host = "bobmachine.xyz"
user = "bob"
path = "/home/bob/yama"

子命令

check:检查仓库的一致性

验证整个仓库是否满足以下一致性约束

  • 所有块都有正确的哈希值
  • 所有指针都有有效的结构,递归地

用法:yama check [--gc]

报告占用的空间量和未使用块占用的空间量。

如果指定了 --gc,则将删除未使用的块。

lsp:列出树指针

用法:yama lsp

rmp:删除树指针

用法:yama rmp pointer/path [--force]

如果没有指定 --force 且指针被其他指针依赖,则删除操作将因错误而中止。

store:将树存储到仓库中

用法:yama store [--dry-run] [ssh://user@host]/path/to/dir pointer/path [--exclusions path/to/exclusions.txt] [--differential pointer/parent]

指针必须不存在,它将被创建。如果指定了 --differential 并与现有父指针一起使用,则目录列表将指定为对父目录的差异列表。这样做的目的是减少目录列表的大小。

排除列表

排除列表的格式基本上与 .gitignore 相同,每行一个glob,表示不包含的文件,相对于树根。

extract:从仓库中提取文件(s)

使用方法: yama extract [--dry-run] 指针/路径[:路径] [ssh://用户@主机]/本地目录路径[

如果没有指定路径,则提取根目录 /. 尾随斜杠表示文件将被提取为指定目录的子目录。

remote:在远程仓库上运行操作

使用方法: yama remote ssh://用户@主机/仓库路径 <子命令>

remote store:将本地树存储到远程仓库

使用方法与 yama store 相同,但存储路径必须是本地的。

remote extract:将远程仓库提取到本地树

使用方法与 yama extract 相同,但目标路径必须是本地的。

slave:远程控制的 yama

通过 stdin/stdout 通信执行指定操作。在涉及 SSH 的 yama 命令中使用。

仓库存储详情

指针存储在 pointers.lmdb 中,块存储在 chunks.lmdb 中。如果排除文件需要定期使用,则应将其保存在与仓库相同的目录中。

块使用 zstd 进行压缩。必须首先进行训练,并将训练字典放置在 repo root/zstd.dict。**在用此字典文件创建块之后,该字典文件不得丢失或更改。这样做将使整个仓库的完整性失效。**

块使用 BLAKE256 进行哈希,并在去重之前计算块的 xxHash。 (检测到冲突将导致备份终止。虽然这种情况不会发生,但我们不能完全确定。)

远程协议详情

  • 在数据所在的主机上执行压缩。
  • 仅压缩所需的块并通过 SSH 连接传播。
  • 需要某种机制来提供、拒绝和接受块,而不会导致缓冲区溢出和主机崩溃。

处理器详情

其他备注

zstd--训练 FILEs-o zstd.dict

  • 候选大小: find ~/Programming -size -4k -size +64c -type f -exec grep -Iq . {} \; -printf "%s\n" | jq -s 'add'
  • 想要采样
    • find~/Programming-size-4k-size+64c-type f -exec grep-Iq. {} \; -exec cp{} -t/tmp/d/ \;
    • du-sh
    • find>file.list
    • wc -l < file.list → gives a № lines
    • shuf -n 4242 file.list | xargs -x zstd --train -o zstd.dict 处理4242个文件。如果接收到包含空格的文件名,则重新运行直到获取到有效集合。

依赖项

~63MB
~829K SLoC