目录
一、背景
你是否有过这样的需求,将大量的文件从一个地方拷贝到另一个地方做备份,使用cp命令感觉不太好用,现有一个好用的工具,可以执行大量小文件的同步,那就是rsync。
二、rsync简介
rsync是一个常用的远程文件同步工具,主要用于将文件或目录从一个位置同步到另一个位置。它通过比较源和目标之间的文件差异来快速更新目标位置,仅传输更改的部分,从而节省带宽和时间。
三、rsync常用命令
命令语法:
rsync [选项] 源文件/目录 目标文件/目录
其中,源文件/目录指定要同步的源位置,目标文件/目录指定要同步到的目标位置。
常用的选项包括:
-a
:归档模式,以递归方式复制所有文件和目录,并保留文件属性、权限等。-v
:详细输出,显示同步过程中的详细信息。-z
:压缩传输,通过gzip压缩数据传输,提高效率。-P
:显示传输过程,显示传输进度和详细信息。--delete
:删除目标位置上不存在于源位置的文件和目录。--exclude
:排除指定的文件和目录。
四、rsync使用场景
4.1 本地同步:将本地目录A同步到本地目录B。
rsync -avz /path/to/directoryA/ /path/to/directoryB/
4.2 远程同步:将本地目录A同步到远程主机的目录B。
rsync -avz /path/to/directoryA/ user@remote:/path/to/directoryB/
4.3 增量备份:只同步源位置和目标位置之间的变更部分。
rsync -avz --delete /path/to/directoryA/ /path/to/directoryB/
注意:以上示例中的选项和路径可以根据实际需求进行调整。使用rsync时,请务必小心核对源和目标路径,避免误操作导致数据丢失或覆盖。建议在使用rsync之前进行测试和备份。
五、我的生产实践
# 这是最常用的排除方法,你可以在命令行中使用--exclude选项来排除你不想同步的文件或目录。
rsync -av --exclude=logs /source/ /destination/
# 如果你有一个包含需要排除文件列表的文件,你可以使用--exclude-from选项
rsync -av --exclude-from='exclude.list' /source/ /destination/
# 如果你想删除目标目录中那些在源目录中不存在的文件或目录,你可以使用--delete选项
rsync -av --delete /source/ /destination/
# 我在生产环境的具体操作
nohup rsync -avzP --exclude-from='/root/exclude.list' --bwlimit=20480 /mnt/nas02/tongyiziyuan/ /mnt/object/tongyiziyuan >> /opt/rsynclog_tongyiziyuan/tongyiziyuan20240410.log &
# 特别注意:关于exclude.list文件中的内容,是按照/mnt/nas02/tongyiziyuan/同步目录后的目录输入的。比如:我的目录结果是这样的目录一:/mnt/nas02/tongyiziyuan/001/ 目录二:/mnt/nas02/tongyiziyuan/002/ 那么我的exclude.list文件内容应该是这样的,第一行001 第二行002