创建备份脚本

#!/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