我是 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 我使用的代码作为模型