Windows如何用硬链接实现备份?Linux rsync备份方案解析
Awesome that you're leveraging hard links to cut down on backup space with rsync on Linux—replicating that space-efficient workflow on Windows is totally doable, and you’ve got a few great options depending on whether you prefer built-in tools or want to stick with something familiar like rsync. Let’s dive in:
方法1:用Windows自带的Robocopy(推荐,无需额外软件)
Robocopy is Windows' built-in, powerful file sync utility, and when paired with NTFS's hard link support, it can mirror rsync’s space-saving magic.
分步操作:
第一次全量备份
First, create your initial full backup to establish a baseline:robocopy "C:\your\source\folder" "D:\backups\1" /MIR /COPYALL /R:3 /W:5/MIR:镜像源目录(删除备份中源目录已不存在的文件)/COPYALL:复制所有文件属性(权限、时间戳等),与原文件保持一致/R:3&/W:5:复制失败时重试3次,每次间隔5秒(可按需调整)
后续增量备份
日常备份时,我们只同步修改过的文件到新备份文件夹,再为未修改的文件创建指向上次备份的硬链接(避免占用额外空间)。以下是自动化的批处理脚本:@echo off set "source=C:\your\source\folder" set "dest_root=D:\backups" rem 获取最新的备份编号(假设备份文件夹以数字命名:1、2、3...) for /f "delims=" %%i in ('dir /b /ad /o-n "%dest_root%" ^| findstr /r "^[0-9]*$" ^| head -n 1') do set "last_backup=%%i" set /a "new_backup=last_backup+1" mkdir "%dest_root%\%new_backup%" rem 仅将修改/新增的文件同步到新备份 robocopy "%source%" "%dest_root%\%new_backup%" /MIR /COPYALL /R:3 /W:5 /XL /XO /XN rem 为未修改的文件创建指向上次备份的硬链接 for /f "delims=" %%f in ('robocopy "%source%" "%dest_root%\%last_backup%" /L /IS /NFL /NDL /NJH /NJS') do ( if not exist "%dest_root%\%new_backup%\%%f" ( mklink /H "%dest_root%\%new_backup%\%%f" "%dest_root%\%last_backup%\%%f" ) )/XL,/XO,/XN:排除与上次备份中完全相同的文件(时间戳、大小一致),只复制有变化的内容mklink /H:创建硬链接——让新备份中的未修改文件"指向"上次备份的对应文件,而非重复复制,彻底节省空间
方法2:用Windows版rsync(cwRsync)
如果你想沿用Linux下熟悉的rsync语法,cwRsync(rsync的Windows移植版)完全适用。NTFS支持硬链接,所以--link-dest选项的表现和Linux上一模一样。
操作步骤:
- 下载并安装cwRsync(选择与你的Windows架构匹配的版本)。
- 编写批处理脚本,复刻你的Linux备份逻辑:
这个脚本和你在Linux上用的几乎完全一致——未修改的文件会硬链接到上次备份,所以3GB的文件夹哪怕只改了一个小文件,所有备份加起来依然只占3GB空间。@echo off set "source=C:\your\source\folder" set "dest_root=D:\backups" rem 获取最新的备份编号 for /f "delims=" %%i in ('dir /b /ad /o-n "%dest_root%" ^| findstr /r "^[0-9]*$" ^| head -n 1') do set "last_backup=%%i" set /a "new_backup=last_backup+1" mkdir "%dest_root%\%new_backup%" rsync.exe --checksum --recursive --link-dest="%dest_root%\%last_backup%" "%source%" "%dest_root%\%new_backup%"
方法3:用第三方工具FastCopy
如果你偏好GUI工具而非命令行,FastCopy是一款轻量高效的选择,原生支持硬链接复制。
- 打开FastCopy,设置源文件夹和目标备份目录。
- 在「选项」菜单中勾选硬链接复制(注意:仅当目标与源/上次备份在同一NTFS分区时可用)。
- 用Windows任务计划程序设置每日自动备份,替代Linux的cron功能。
关键注意事项:
- 仅支持NTFS:硬链接只能在NTFS文件系统上使用,且所有备份目录必须在同一分区——跨驱动器或非NTFS卷无法创建硬链接。
- 不要删除旧备份:新备份依赖旧备份的硬链接,若删除旧备份中的文件,新备份里对应的硬链接会失效。
- Windows任务计划程序:用它替代cron来每日执行备份脚本——只需设置触发时间,指向你的批处理文件即可。
内容的提问来源于stack exchange,提问作者Volker Weißmann

