#zfs #snapshot #pool #maintain #prune #recursion #stale

app shock

定期使用 shock 清理你的 ZFS 存储池,以维护良好的卫生并修剪过时的快照

12 个版本

0.1.11 2024 年 5 月 5 日
0.1.9 2024 年 3 月 2 日
0.1.6 2023 年 12 月 1 日
0.1.5 2023 年 11 月 5 日

76文件系统

Download history 115/week @ 2024-04-30 20/week @ 2024-05-07 1/week @ 2024-05-14 5/week @ 2024-05-21 2/week @ 2024-05-28

915 每月下载量

MIT 许可证

18KB
346

Crates.io

shock

定期使用 shock 清理你的 ZFS 存储池,以维护良好的卫生并修剪过时的快照。

用法

nix run github:ipetkov/shock -- --verbose --recursive --config ./path/to/config.toml tank/persist

nix shell github:ipetkov/shock

cargo install shock

然后

shock --verbose --recursive --config ./path/to/config.toml tank/persist

请注意,shock 默认会进行测试运行。除非传入 --destroy,否则不会删除任何数据。

NixOS

{
  inputs.shock.url = "github:ipetkov/shock";

  outputs = { self, nixpkgs, shock }: {
    nixosConfigurations.host = nixpkgs.lib.nixosSystem {
      system = "x86_64-linux";
      modules = [
        ./configuration.nix
        shock.nixosModules.default
        ({ config, pkgs, ... }: {
          nixpkgs.overlays = [ inputs.shock.overlays.default ];
          services.shock = {
            startAt = "daily";
            persistentTimer = true;
            jobs = {
              backups = {
                # Disable to only operate on the dataset itself
                # and not any of its children
                recursive = true;
                verbose = true; # Disable for quieter logs
                datasets = [
                  "tank/backups"
                  "tank/another"
                ];
                #destroy = true; # Uncomment to actually destroy data!
                prefix = {
                  zfs-auto-snap_monthly = 12;
                  zfs-auto-snap_weekly = 4;
                  zfs-auto-snap_daily = 7;
                  zfs-auto-snap_hourly = 24;
                  zfs-auto-snap_frequent = 4;
                };
              };
            };
          };
        })
      ];
    };
  };
}

参考

Shock your ZFS pools to maintain good hygeine

Usage: shock [OPTIONS] --config <CONFIG> [DATASETS]...

Arguments:
  [DATASETS]...  The pools or datasets to shock

Options:
  -r, --recursive        Recursively operate on the specified datasets
  -v, --verbose          Enable verbose output
      --destroy          Perform destructive actions. Omit for dry run
  -c, --config <CONFIG>  Path to the TOML configuration
  -h, --help             Print help
  -V, --version          Print version

配置

# Keep up to N snapshots whose name starts with the specified prefix.
# Only snapshots within the same dataset will be counted, and any snapshots
# whose name does not match any prefix will be ignored.
[prefix]
zfs-auto-snap_monthly = 12
zfs-auto-snap_weekly = 4
zfs-auto-snap_daily = 7
zfs-auto-snap_hourly = 24
zfs-auto-snap_frequent = 4

为什么存在这个

快照创建和修剪本质上是相互关联的,通常它们都使用相同的工具完成。然而,在没有在池上实际运行快照创建器的情况下,管理在另一台主机上创建(并复制到当前主机)的快照可能很困难。通常,它们都使用相同的工具完成。然而,在没有在池上实际运行快照创建器的情况下,管理在另一台主机上创建(并复制到当前主机)的快照可能很困难。

更具体的例子: zfs-auto-snapshot 仅在创建快照时修剪快照,因此如果正在复制由 zfs-auto-snapshot 创建的数据集的快照,则没有很好的方法来修剪它们(特别是在 NixOS 上,有一个全局配置来指定要保留的快照)。 Sanoid 允许进行全面的策略管理,但它遗憾的是,只知道如何管理它创建的快照(以及 zfs-auto-snapshot 使用的名称)。对于无法使用 sanoid 的情况,shock 是一个简单的方法来填补这个差距。

许可证

本项目采用 MIT 许可证。

贡献

除非你明确说明,否则你提交的任何有意提交的包含贡献都应按 MIT 许可证许可,不附加任何额外的条款或条件。

依赖关系

~5MB
~92K SLoC