Rsync 保留/复制硬链接(备份 Rsnapshot 目录树)
rsync 命令可以保留硬链接,并使用以下语法将 /raid6/rsnapshot/目录的精确副本复制到远程服务器。这对于进行异地备份或将现有备份复制到 USB 硬盘非常有用。让我们看看如何使用 rsync 保留和复制硬链接、软链接和其他数据。
教程详细信息 | |
---|---|
难度等级 | 简单的 |
Root 权限 | 不 |
要求 | Linux 或 Unix 终端 |
类别 | Linux shell 脚本 |
先决条件 | rsync 命令 |
操作系统兼容性 | BSD • Linux • macOS • Unix • WSL |
预计阅读时间 | 3 分钟 |
Rsync 保留/复制 Rsnapshot 备份目录的硬链接
使用 rsync 时跟踪硬链接的语法如下:
rsync -az -H --delete --numeric-ids /path/to/source server2:/path/to/dest/ ## OR ## rsync -az -H --delete --numeric-ids /path/to/source 192.168.1.5:/path/to/dest/ ## How about adding progress bar? ## rsync -az -H --delete --progress --numeric-ids /path/to/source 192.168.1.5:/path/to/dest/ ## Add a rsync log file ## rsync --log-file="/var/log/my-rsync-script.log" -az -H --delete --progress --numeric-ids /path/to/source 192.168.1.5:/path/to/dest/
在哪里,
- -a :存档模式(即递归进入目录,并保留符号链接、文件权限、文件修改时间、文件组、文件所有者、设备文件和特殊文件)
- -z:传输过程中压缩文件数据
- -H:保留硬链接(即将硬链接复制为硬链接)
- --delete:从接收端删除多余的文件(不在发送端的文件),但仅限于正在同步的目录,即保留 /raid6/rsnapshot 目录的精确副本。
- --numeric-ids:传输数字组和用户 ID,而不是使用用户和组名称并在两端映射它们。
- --progress:传输过程中显示进度。
- --log-file="/var/log/my-rsync-script.log":将 rsync 命令正在执行的操作记录到 /var/log/my-rsync-script.log 文件中。
让我们看一些 Linux、macOS、FreeBSD 和类 Unix 系统的示例。
Rsync 复制硬链接
简而言之,以 root 用户身份输入以下命令,将 /raid6/rsanpshot 复制到名为 backupserver2 的另一台备份服务器:
# rsync -az -H --delete --numeric-ids /raid6/rsanpshot backupserver2:/backups/
您可以按如下方式从 backupserver2 检索备份:
# rsync -az -H --delete --numeric-ids backupserver1:/raid6/rsanpshot /backups/
可以使用相同语法将较小目录转储到 usb 2.0/3.0 或 eSata 外部硬盘驱动器。首先,安装 usb 硬盘驱动器:
# mount /dev/sdXY /mnt/usbdisk
接下来,使用 rsync 命令,如下所示:
# rsync -az -H --delete --numeric-ids /raid6/rsanpshot /mnt/usbdisk/
使用 rsync 命令保存和处理硬链接
我们可以使用 –bwlimit 选项设置 rsync 速度限制,以免占用所有带宽:
# rsync -v -a --bwlimit=5000 -H --delete --numeric-ids rsnashot-prod user@192.168.2.19:/rsnapshot
该--bwlimit=KBPS选项允许您指定最大传输速率。RATE 值可以以字符串作为后缀,以指示大小乘数,也可以是小数值(例如“ –bwlimit=2.5m”)。
Rsync 保存和复制硬链接的 Shell 脚本示例
创建一个名为 dump-example-wks01-to-nas-server.sh 的 新 shell 脚本:#!/bin/bash # Name: dump-example-wks01-to-nas-server.sh # Purpose: 1. Dump dirs to a nas server while preserving hard and softlinks. # 2. Make sure you run this script via a cron job # 3 Set up ssh pub keys log in to avoid password prompt # Author: Vivek Gite, under GPL v2.x+ # ------------------------------------------------------------------------------ # Dest server info dest_box="user_name@server_ip_here" dest_dir="/path/to/example-wks01-dumps/" # backup dir lists src_dirs="/home/vivek /etc /root /var/spool/cron" for d in $src_dirs do rsync --exclude-from="$HOME/bin/dump-example-wks01-to-nas-server.sh.exclude" \ -azv -H --delete --numeric-ids \ --log-file="/var/log/rsync.dump-example-wks01-to-nas-server.sh.log" \ "$d" ${dest_box}:${dest_dir} done
还要创建一个名为 dump-example-wks01-to-nas-server.sh.exclude 的文件,并添加要从转储/备份中排除的模式。例如:
# exclude from backups # vivek/*.png vivek/*.jpg vivek/.mozilla/* vivek/.config/google-chrome/* vivek/snap/* vivek/.cache* vivek/.local/share/Trash/*
接下来,使用 crontab 命令设置 cron 作业,如下所示:
@hourly /path/dump-example-wks01-to-nas-server.sh
结论
您学习了如何在 Linux、macOS、FreeBSD 或类 Unix 系统上使用 rsync 命令复制和保留硬链接。有关更多信息,请使用 man 命令或 help 命令查看 rsync 命令手册:
rsync 命令的示例帮助会话:
$ man rsync
$ rsync --help
$ rsync --help | grep -Ew -- '(-|--)(v|a|z|H|delete |numeric-ids|log-file.*FILE)'
-v, --verbose increase verbosity -a, --archive archive mode; equals -rlptgoD (no -H,-A,-X) -H, --hard-links preserve hard links --del an alias for --delete-during --delete delete extraneous files from destination dirs --delete-before receiver deletes before transfer, not during --delete-during receiver deletes during the transfer --delete-delay find deletions during, delete after --delete-after receiver deletes after transfer, not during --delete-excluded also delete excluded files from destination dirs --delete-missing-args delete missing source args from destination --numeric-ids don't map uid/gid values by user/group name -z, --compress compress file data during the transfer --log-file=FILE log what we're doing to the specified FILE --log-file-format=FMT log updates using the specified FMT