zfs快照管理脚本

最近的勒索病毒猖狂至极,删除用户的全部文件并索要赎金,定期 zfs快照 可以最大限度保证数据安全!

  • 该脚本运行一次即创建一次快照,同时检查是否存在30天以前的快照并删除;
  • 可以配合 rsync 服务器,每次rsync接收完数据后1) 2)运行一次该脚本;
  • 配合Samba的''shadow_copy2''模块,可以将zfs的快照导出为“之前的版本”:

将共享目录映射为驱动器后,右键该驱动器即可访问。

zfs-snapshot.sh
#!/bin/bash
#Author:MRCO,2019-09-20
#define varibles
keep_days=365
dataset='tank/conf tank/data tank/movies tank/archive tank/kvm'
 
create_snapshot(){
        #create snapshot base on date
        date=`date +%F-%H%M`
        for i in ${dataset};do
                zfs snapshot ${i}@${date}
                [[ $? == 0 ]] && echo -en "\033[32m${i}@${date}\033[0m created.\n"
        done
}
 
purge_snapshot(){
        while read LINE;do
                snapshot=`echo "${LINE}"|cut -f 1`
                creation=`echo "${LINE}"|cut -f 2`
                now=`date +%s`
                seconds=$((60*60*24*$keep_days))
                delta=$(($now - $creation))
 
                if [[ $delta -gt $seconds ]];then
                        echo -en "\033[33m removing $keep_days days old snapshot:  $snapshot \033[0m\n"
                        zfs destroy "${snapshot}"
                fi
        #redirect zfs list output to "while read LINE"
        done < <(zfs list -Hpo name,creation -t snapshot -r $dataset)
}
 
create_snapshot
purge_snapshot

从zfs快照恢复文件:

/tank/dataset/.zfs/snapshot/$NAMEOFSNAPSHOT/path/to/file


1)
一个rsync命令完成算一次/执行一次.
2)
rsyncd.conf中的:
post-xfer exec = "/root/snapshot.sh"
  • storage/zfs/zfs快照管理脚本.txt
  • 最后更改: 2019/09/20 10:44
  • 由 mrco