mportant; overflow-wrap: break-word !important;">一.关于Rsync 服务
rsync 是 Unix 系统的文件传输程序。rsync 使用“rsync 算法”,它提供了一种非常快速的方法来使远程文件同步。它通过仅通过链接发送文件中的差异来做到这一点,而无需事先将两组文件都存在于链接的一端。
Rsync是一款开源的备份工具,可以在不同主机之间进行同步,可实现全量备份和增量备份,因此非常适合用于架构集中式备份或异地备份等应用。
Rsync官方地址:https://rsync.samba.org/
Rsync监听端口:873
Rsync运行模式:C/S
Rsync已支持跨平台,可以在Windows与Linux间进行数据同步。
总结:
Rsync是一款开源的,快速的,多功能,可实现全量及增量的本地或远程数据同步备份的优秀工具。
1.rsync 的一些特性
可以更新整个目录树和文件系统 可选择保留符号链接、硬链接、文件所有权、权限、设备和时间 无需特殊权限即可安装 内部流水线减少了多个文件的延迟 可以使用 rsh、ssh 或直接套接字作为传输 支持匿名 rsync,非常适合镜像
2.Rsync常见的两种备份方式
1)完全备份
那么什么是完全备份,下面举个例子:
设定一个文件夹,这个文件夹主机A/B都各创建一个,要求主机A的文件夹里面的数据每天传送给主机B一次。
第一天,主机A的文件夹里面有10G数据,通过完全备份的形式传给了主机B。
说明:
A主机一次把文件夹里面的10G数据全部传输给了主机B。
第二天主机A的文件夹里又增加了5G数据;量,今天还需要继续把这些数据传输给主机B一次。
当主机A增加数据量的时候再向主机B发送,还是会把整个15G的文件全部发送过去,主机B又重新把原来有过的和新增的接收一遍,这样导致传输效率极低,造成很多资源上的浪费。
2)增量备份
那么什么又是增量备份呢,第一天,主机A的文件夹里面有10G数据,主机B里面没有任何数据,这时候主机A通过完全(全量)的形式把数据传给了主机B。
第二天主机A的文件夹里又增加了5G数据。今天还需要继续把这些数据传输给主机B一次,这个时候主机B已经有之前的10G数据了,通过增量备份会如何传输呢?
#!/bin/sh
# 此脚本对 rsync 备份服务器进行个人备份。你最终会
# 使用 7 天轮换增量备份。增量会去
# 放入以星期几命名的子目录,以及当前
# 完整备份进入一个名为“current”的目录
# tridge@linuxcare.com
# 备份目录
BDIR=/home/$USER
# 排除文件 - 这包含每行要排除的文件的通配符模式
EXCLUDES=$HOME/cron/excludes
# 备份机器的名字
BSERVER=owl
# 你在备份服务器上的密码
export RSYNC_PASSWORD=XXXXXX
########################################################################
BACKUPDIR=`date +%A`
OPTS="--force --ignore-errors --delete-excluded --exclude-from=$EXCLUDES
--delete --backup --backup-dir=/$BACKUPDIR -a"
export PATH=$PATH:/bin:/usr/bin:/usr/local/bin
# 下面一行清除了上周的增量目录
[ -d $HOME/emptydir ] || mkdir $HOME/emptydir
rsync --delete -a $HOME/emptydir/ $BSERVER::$USER/$BACKUPDIR/
rmdir $HOME/emptydir
# 现在实际传输
rsync $OPTS $BDIR $BSERVER::$USER/current
2.备份到备用磁盘
我使用 rsync 在我的几台机器上进行本地备份。我有一个安装了额外的磁盘,可以保存主目录的所有内容磁盘。然后我有一个夜间 cron 作业,将主磁盘备份到备份。这是我在其中一台机器上使用的脚本。
#!/bin/sh
export PATH=/usr/local/bin:/usr/bin:/bin
LIST="rootfs usr data data2"
for d in $LIST; do
mount /backup/$d
rsync -ax --exclude fstab --delete /$d/ /backup/$d/
umount /backup/$d
done
DAY=`date "+%A"`
rsync -a --delete /usr/local/apache /data2/backups/$DAY
rsync -a --delete /data/solid /data2/backups/$DAY
第一部分在备用磁盘上进行备份。第二部分将关键部分备份到日常目录。我也备份了使用 rsync 通过 ssh 连接到远程机器的关键部分。
3.镜像 vger CVS 树
vger.rutgers.edu cvs 树通过镜像到 cvs.samba.org使用以下脚本匿名 rsync。
#!/bin/bash
cd /var/www/cvs/vger/
PATH=/usr/local/bin:/usr/freeware/bin:/usr/bin:/bin
RUN=`lps x | grep rsync | grep -v grep | wc -l`
if [ "$RUN" -gt 0 ]; then
echo already running
exit 1
fi
rsync -az vger.rutgers.edu::cvs/CVSROOT/ChangeLog $HOME/ChangeLog
sum1=`sum $HOME/ChangeLog`
sum2=`sum /var/www/cvs/vger/CVSROOT/ChangeLog`
if [ "$sum1" = "$sum2" ]; then
echo nothing to do
exit 0
fi
rsync -az --delete --force vger.rutgers.edu::cvs/ /var/www/cvs/vger/
exit 0
特别注意 ChangeLog 的初始 rsync 以确定是否一切都变了。这可以省略,但这意味着vger 上的 rsyncd 必须建立一个完整的 cvs 区域列表在每次运行。因为大多数时候什么都不会改变,我想如果 ChangeLog 有,则仅通过执行完整的 rsync 来节省 vger改变了。这很有帮助,因为 vger 内存不足,并且通常负载很重,所以在这么大的地方做一个列表每小时一棵树会过分。
4.在家自动备份
我使用 rsync 通过调制解调器链接备份我妻子的主目录夜晚。cron 作业看起来像这样。
#!/bin/sh
cd ~susan
{
echo
date
dest=~/backup/`date +%A`
mkdir $dest.new
find . -xdev -type f \( -mtime 0 -or -mtime 1 \) -exec cp -aPv "{}"
$dest.new \;
cnt=`find $dest.new -type f | wc -l`
if [ $cnt -gt 0 ]; then
rm -rf $dest
mv $dest.new $dest
fi
rm -rf $dest.new
rsync -Cavze ssh . samba:backup
} >> ~/backup/backup.log 2>&1
请注意,此脚本的大部分内容与 rsync 无关,它只是在 ~susan/backup/ 目录中创建 Susan 工作的每日备份,因此她可以检索上周的任何版本。最后一行确实她的目录的 rsync 通过调制解调器链接到主机桑巴。请注意,我使用的是 -C 选项,它允许我添加.cvsignore 的条目以获取不需要备份的内容。
5.带有远程文件列表的花哨步法
rsync 的一个鲜为人知的特性是,当运行在远程 shell(例如 rsh 或 ssh),您可以将任何 shell 命令指定为远程文件列表。shell 命令由您的遥控器扩展调用 rsync 之前的 shell。例如,看看你是否可以锻炼这是做什么的:
rsync -avR remote:'`find /home -name "*.[ch]"`' /tmp/
推荐本站淘宝优惠价购买喜欢的宝贝:
本文链接:https://www.hqyman.cn/post/6636.html 非本站原创文章欢迎转载,原创文章需保留本站地址!
休息一下~~