Homelab 笔记

用 rsync --link-dest 做每日增量备份

想要每天一份完整的备份目录,又不想每天都占用一份完整的空间。rsync 的 --link-dest 正好能做到:没变化的文件直接硬链接到上一次的备份,只有新增和修改过的文件才会真正复制。

#!/bin/sh
set -e
SRC=/data/
DEST=/mnt/backup
TODAY=$(date +%F)

rsync -aH --link-dest="$DEST/latest" "$SRC" "$DEST/$TODAY"
ln -sfn "$DEST/$TODAY" "$DEST/latest"

每个日期目录看起来都是完整的一份,可以直接浏览、直接拷回去,但实际占用的空间只有每天变化的那部分。删掉某一天的目录也不影响其他日期,因为硬链接要等所有引用都删掉,数据才会真正释放。

清理旧备份

find /mnt/backup -maxdepth 1 -type d -name '20*' -mtime +30 -exec rm -rf {} +

第一次运行时 latest 还不存在,rsync 会提示一句然后做一次全量复制,属于正常现象。目标盘需要是支持硬链接的文件系统,ext4、XFS、ZFS 都可以,exFAT 不行。