说真的,刚开始玩服务器那会儿,我也干过傻事。不管有没有数据变动,每天半夜把整个盘打包一遍。结果呢?没过一个月,硬盘直接红了报警,看着那几百个G重复的垃圾数据,心都在滴血。这事儿吧,就像你每天为了只换了一件衣服,就把整个衣柜都重新买一遍,谁受得了?既浪费空间,又拖死IO,等到真要恢复的时候,解压都能解到你怀疑人生。
说白了,增量备份就是“只记变动”。它就像写日记,今天发生了啥事儿,就只记今天的事儿,不用把前几天的内容再抄一遍。这样子,你的备份盘里,每天只多出那一点点新增或者修改的数据。省空间那是肯定的,关键是备份速度快啊,眨眼功夫就完事,完全不影响业务跑得飞起。
工具千千万,但咱搞运维的,手里没几把刷子怎么行?Linux下玩备份,rsync绝对是绕不开的大神。这玩意儿不仅能同步文件,还能比对差异,最绝的是它支持硬链接。利用这个特性,我们可以玩出一种“看起来是全量,其实是增量”的高级玩法,也就是传说中的“每次备份看起来都是一个完整目录,但没改动的文件不占空间”。
别慌,这步很简单。大多数Linux发行版都自带了rsync,没有的话,一行命令就能搞定。
```bash
CentOS/RHEL
yum install rsync
Ubuntu/Debian
apt-get install rsync
```
装好之后,咱们得建几个目录,一个放源数据,一个放备份。假设你的网站代码在 /var/www/html,咱们要把备份存到 /data/backup。
这步是核心,敲黑板了啊。咱们写个简单的shell脚本,利用rsync的 --link-dest 参数。这个参数的作用是指向“上一次的备份目录”,如果文件没变,rsync就给它建个硬链接指向旧文件,不占新地儿;如果文件变了,就乖乖复制一份新的。
```bash
!/bin/bash
定义源目录和备份根目录
SOURCE_DIR="/var/www/html"
BACKUP_ROOT="/data/backup"
获取当前时间作为目录名,比如 2023-10-27
DATE=$(date +%Y-%m-%d)
找到上一次备份的目录(通过读取链接文件或者直接列目录找最新的)
这里为了简单,咱们假设有个 latest 链接指向上一次的备份
LAST_BACKUP=$(readlink -f $BACKUP_ROOT/latest 2>/dev/null)
今天的备份目录

TODAY_BACKUP="$BACKUP_ROOT/$DATE"
开始干活!
-a: 归档模式,保留权限属性
-v: 显示过程
-z: 传输时压缩
--delete: 如果源文件删了,备份里也删了,保持一致
--link-dest: 神来之笔,硬链接到上一次备份
mkdir -p $TODAY_BACKUP
rsync -avz --delete --link-dest=$LAST_BACKUP $SOURCE_DIR/ $TODAY_BACKUP/
搞完之后,把 latest 链接更新到今天的目录,方便下次用
rm -f $BACKUP_ROOT/latest
ln -s $TODAY_BACKUP $BACKUP_ROOT/latest
echo "Backup finished: $TODAY_BACKUP"
```
你看,这脚本逻辑多清晰。第一次跑的时候,因为没有“上一次备份”,它就是老老实实的全量备份。从第二次开始,它就是增量备份的魔法时刻了。你去ls -lh看一眼,会发现每个日期的目录看起来都挺大,但实际占用磁盘空间(du -sh)却小得可怜,这就是硬链接的功劳。
总不能天天半夜起来手动敲命令吧?那也太苦逼了。把脚本扔进crontab里,让系统自己打工。
```bash
编辑定时任务
crontab -e
每天凌晨2点执行一次,把日志扔进 backup.log 方便排错
0 2 /bin/bash /root/scripts/backup.sh >> /var/log/backup.log 2>&1
```
数据这东西,平时看着没啥,丢一次你就知道什么叫“天塌了”。搞完这套增量备份,心里那块石头才算落地。别总觉得“哎呀,我服务器稳着呢”,意外这事儿,谁说得准?哪怕误删个文件,有了这套机制,去昨天的目录里cp回来也就几秒钟的事儿。信任技术,但也别忘了备份,这才是老鸟的生存之道。












易频IT社区是综合性互联网IT技术门户网站,专注分享网络技术、服务器运维、网络安全、编程开发、系统架构、云计算、大数据等行业干货,实时更新IT行业资讯、零基础教程、实战案例,为IT从业者、技术爱好者提供专业的学习交流平台。
Copyright © 2021-2026 易频IT社区. All Rights Reserved. 备案号:闽ICP备2023013482号 网站地图