创建备份脚本
#!/bin/bash # ZFS 自动快照和备份脚本 # 适用于 systemd timer 计划任务
set -e
SOURCE_POOL="volumes" BACKUP_POOL="volumes-backup" DATE=$(date +"%Y-%m-%d") SNAPSHOT_NAME="backup-${DATE}"
# 创建快照 zfs snapshot -r ${SOURCE_POOL}@${SNAPSHOT_NAME}
# 发送快照到备份池 zfs send -R ${SOURCE_POOL}@${SNAPSHOT_NAME} | zfs receive -F ${BACKUP_POOL}
# 清理旧快照(保留最近7天的快照) for SNAP in $(zfs list -t snapshot -o name -s creation | grep "${SOURCE_POOL}@backup-" | head -n -7); do zfs destroy "$SNAP" done
for SNAP in $(zfs list -t snapshot -o name -s creation | grep "${BACKUP_POOL}@backup-" | head -n -7); do zfs destroy "$SNAP" done
# 记录日志 echo "[$(date)] Backup completed: ${SOURCE_POOL}@${SNAPSHOT_NAME} -> ${BACKUP_POOL}" >> /var/log/zfs-backup.log
|
Systemd Service 文件
创建 /etc/systemd/system/zfs-backup.service
[Unit] Description=ZFS Snapshot and Backup Service After=network.target
[Service] Type=oneshot ExecStart=/path/to/zfs-backup.sh
|
Systemd Timer 文件
创建 /etc/systemd/system/zfs-backup.timer
[Unit] Description=Run ZFS Snapshot and Backup Daily
[Timer] OnCalendar=*-*-* 03:00:00 Persistent=true
[Install] WantedBy=timers.target
|
启用定时任务
sudo systemctl daemon-reload sudo systemctl enable --now zfs-backup.timer
|