find / -xdev -samefile tmp
cat /root/backup.sh
#!/bin/bash
# 配置源目录和备份根目录
src_dir="/data" # 替换为实际源目录
backup_dir="/it/backups" # 替换为实际备份目录
# 生成时间戳 (格式: 年月日_时分秒)
timestamp=$(date +"%Y%m%d_%H%M%S")
current_backup="${backup_dir}/${timestamp}"
# 校验源目录是否存在
if [ ! -d "$src_dir" ]; then
echo "错误:源目录 $src_dir 不存在"
exit 1
fi
# 创建备份目录
if ! mkdir -p "$current_backup"; then
echo "错误:无法创建备份目录 $current_backup"
exit 1
fi
# 执行硬链接拷贝(保留属性)
cp -al "${src_dir}/." "$current_backup" 2>/dev/null
# 检查拷贝结果
if [ $? -eq 0 ]; then
echo "备份成功创建于:$current_backup"
else
echo "错误:备份创建失败"
rm -rf "$current_backup" # 清理失败目录
exit 1
fi
硬链接限制:
-
不支持跨文件系统操作
-
无法链接目录(自动转为普通拷贝)
-
修改任意备份中的文件会影响所有链接版本
硬链接的限制决定了它不能直接用于备份生产环境,必须先通过 rsync 同步到备份目录后再通过硬链接备份。原因是修改inode相同的文件会导致备份文件全都被替换。经过普通 cp 或 rsync 同步后的文件与原文件已经不是同一个文件。对备份目录执行硬链接拷贝不会导致修改文件出现副作用。不能使用硬链接 cp -l 拷贝原生产目录,必须作用于备份目录。
硬链接使用场景:
-
使用 rsync 将生产环境同步到一级备份目录 /data
-
使用 backup.sh 将一级备份目录 /data 目录通过硬链接备份到二级备份目录 /backups 目录
实际演示
1. 通过 rsync 备份生产目录
2. 通过 backup.sh 创建硬链接备份
rsync 只能实现全量备份,无法保留多个版本。硬链接可以备份多个版本,同时又保留了“增量”的特性。数据量不会激增,备份空间不会因多次备份开始膨胀。使用 rsync + 硬链接的组合可以达到全量+增量的备份模式。
原文始发于微信公众号(生有可恋):使用硬链接实现增量备份
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论