#

#

我是 zfs 的新手,我开始编写一个脚本,以便最终(希望)成为我的服务器的自动备份脚本。

但是当我尝试运行我的脚本时,它会显示“没有可用的数据集”。

我认为这不是代码,而是我遗漏了一些东西。

`#!/usr/bin/env bash echo $echo $@

每周第一天(星期日),对所有 ZFS 进行快照

文件系统。这些快照将基于

上一月度或每周快照(以最后完成的为准)。任何

现有的每日快照已被删除。

#

每周的后续几天(周一至周六),拍摄所有

ZFS 文件系统。这些将导出为增量快照,基于

上一次每月、每周或每日快照(以完成的为准)

最后的)。

#

#

用户可编辑变量

要备份的根 ZFS 池

zfs_root_pool="rpool"

此脚本创建的 ZFS 快照使用的前缀

zfsdr_snap_prefix="zfs-dr"

已完成档案的存放目录

main_backup_dir="/备份"

如果为 false,脚本将在拍摄快照后立即退出,如果

主备份目录不可用。如果为真,脚本将导出

快照并执行任何配置的压缩/加密,但不会移动

将完成的存档文件保存到主存储。

continue_without_main_backup_dir="false"

临时文件的存储目录

main_temp_dir="/备份"

导出的档案是否应该压缩?

compress_backup="true"

导出的档案是否应该加密?

加密备份="true"

使用后是否应立即删除中间步骤(可以

如果主临时目录位于空间受限的文件系统中,则很有用)

delete_intermediate_steps_immediately="false"

允许此脚本自动从中删除旧的存档文件

以前的备份周期?

auto_delete_old_archives="true"

功能

do_daily_snap() { /sbin/zfs list -t 快照 -o 名称 | grep ^"$zfs_root_pool"@"$zfsdr_snap_prefix"_monthly$ 如果 [[ $? -eq 1 ]]; 然后返回 fi

获取当前周

# 如果我们还没有每周快照,那么就不要寻找。如果 [[ $current_week -gt 0 ]]; 然后 /sbin/zfs list -t snap -o name | grep ^"$zfs_root_pool"@"$zfsdr_snap_prefix"_weekly"$current_week"$ 如果 [[ $? -eq 1 ]]; 然后 throw_warning "检测到缺少每周快照;改为执行每周快照。" do_weekly_snap return fi fi

当前价格=date +%w

/sbin/zfs 快照 -r "$zfs_root_pool"@"$zfsdr_snap_prefix"_daily"$current_dow"

如果 [[ !-d $main_backup_dir && "$continue_without_main_backup_dir" != "true" ]]; 然后 throw_error "快照已创建,由于 $main_backup_dir 不可用而退出..." fi

前一天道琼斯指数=$(( $当前道琼斯指数 - 1 )) 前一天=$(( date +%e- 1 ))

# 如果前一天的道琼斯指数为零或前一天的道琼斯指数为一,那么我们预计不会找到任何先前的每日快照。# 检查前几天,直到找到一个存在的,或者我们没有时间检查。# 请注意,道琼斯指数可以达到一(我们已经达到了本周可能的第一个每日快照)或一天可以达到二(我们已经达到了本月可能的第一个每日备份),并且任何一个条件都应该停止检查。# 如果前一天大于零(并且我们没有到达月初),# 则根据前一天导出。# 如果前一天达到零并且当前周大于零,则根据当前每周快照导出。(如果我们在到达一周开始之前到达月初,我们将自动进入第零周。)# 如果我们处于第零周,则根据每月快照导出。}

get_current_week() { eval start_of_week=$(( date +%e- date +%w)) 如果 [[ $start_of_week -le 1 ]]; 则 current_week=0 elif [[ $start_of_week -ge 2 && $start_of_week -le 8 ]]; 则 current_week=1 elif [[ $start_of_week -ge 9 && $start_of_week -le 15 ]]; 则 current_week=2 elif [[ $start_of_week -ge 16 && $start_of_week -le 22 ]]; 则 current_week=3 elif [[ $start_of_week -ge 23 && $start_of_week -le 29 ]]; 则 current_week=4 否则 current_week=5 fi

上一周=$(( $当前一周 - 1 )) }

主要脚本

如果 [[ date +%e-eq 1 ]]; 然后 do_monthly_snap elif [[ date +%w-eq 0 ]]; 然后 do_weekly_snap 否则 do_daily_snap fi`

我正在分解一个预先构建的脚本并慢慢地按照我需要的方式制作它 图片 1 图片 2 图片 3 我使用的代码作为模型

相关内容