Rsync يک برنامه ساده و کوچک، همانند يک برنامه انتقال فايل مي باشد، آخرين نسخه اي که در زمان نوشتن اين مقاله وجود دارد نسخه 3.0.4 مي باشد که مي توانيد از سايت رسمي آن با آدرس http://samba.anu.edu.au/rsync دريافت کنيد.
با اين برنامه حتی مي توان فقط تغييراتي که بر روي يک فايل انجام شده را انتقال داد ، در نظر بگيريد که شما سروري داريد که مدام مجبوريد اطلاعات آن را با سرور ديگر بروز رساني کنيد، براي اين کار لازم نيست هر بار اطلاعات مورد نظر را تماما انتقال دهيد ، با کمک Rsync مي توان فقط فايل هايي را که در کامپيوتر مبدا و يا مقصد تغيير کرده اند، انتقال داد. اين کار فوايد بسياري از جمله ، آپلود سريع تر و کم تر شدن ترافيک شبکه و صرفه جويي در پهناي باند مصرفي را بدنبال خواهد داشت.

در واقع Rsync يک برنامه چند منظوره است که کارهاي Backup & Mirroring را براي شما انجام خواهد داد.

بعضي امکانات Rsync عبارت اند از :

  • پشتيباني از حفظ اطلاعات فايل منتقل شده ، همانند مالک فايل ، گروه فايل ، مجوز هاي فايل و ...
  • عدم نياز به مجوز کاربر ريشه
  • ترانسپرنت شدن با پروتکل هايي نظير ssh ، rsh
  • قابليت استفاده بصورت anonymous يا authenticated


براي شروع ابتدا مطمئن شويد که برنامه مورد نظر در سيستم شما نصب ميباشد من از CentOS 5.2 استفاده مي کنم کليه دستوران نوشته شده در اين مقاله هم بر اساس همين توزيع مي باشد.

براي اين کار مي توانيد دستور rsync را اجرا کنيد و يا خروجي دستور زير را ببينيد :
#rpm -q rysnc
و خروجي بمانند زير خواهد بود :
[root@centos-test ~]# rpm -q rsync
rsync-3.0.4-1.el5.rf
[root@centos-test ~]#

در صورتي که برنامه در سيستم شما نصب نبود از دستور زير استفاده کنيد :
#yum install rsync
در ديگر توزيع ها همانند fedora , redhat , debian هماند بالا ميباشد با اين تفاوت که در debian مي بايست از apt-get استفاده نماييد .
براي راه اندازي شما بايد Rsync را بصورت Daemon راه اندازي کنيد اين کار با استفاده از دستور
rsync –daemon در کنسول انجام خواهد شد، فايل پيکربندي آن بصورت پيشفرض در آدرس etc/rsyncd.conf/ قرار دارد و با کمک Vi مي توانيد آن را ويرايش کنيد. تمام دستگاهايي که برنامه Rsync را اجرا کنند مي توانند با دستگاهي که در آن Rsync Daemon راه اندازي شده است همزمان شودند.
براي اين کار شما بايد يک دستگاه را که قرار است نقش سرور را بازي کند بصورت Daemon راه اندازي کنيد همچنين کلاينت ها نيز مي توانند براي بر قراري يک ارتباط دو طرفه در حالت daemon راه اندازي شوند.
در زير بعضي از فايل هاي پيکربندي Rsync را مشاهده مي کنيد

motd file = /etc/rsyncd.motd
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock

[simple_path_name]
path = /rsync_files_here
comment = My Very Own Rsync Server
uid = nobody
gid = nobody
read only = no
list = yes
auth users = username
secrets file = /etc/rsyncd.scrt




  • هر گاه شما بخواهيد پيامي را به کاربران خود نمايش بدهيد مي توانيد از فايل etc/rsyncd.motd/ استفاده کنيد.
  • فايل بعدي فايلي است که لاگ هاي مربوط به Rsync در آن ريخته خواهد شد.
  • دو فايل بعدي براي شماره پردازش Rsync و قفل کردن آن مي باشد.
  • در فايل پيکربندي گزينه Path مسيري را که فايل ها به/ از آن همزمان خواهند شد را نشان مي دهد,
  • Comment مختصري توضيح راجع به مسير داده شده خواهد بود،
  • Uid &Gid نام کاربري و گروهي که Rsync با ان اجرا خواهد شد را نشان مي دهد،
  • اگر شما بخواهيد دسترسي را به يوزري که از قبل تعريف شده محدود کنيد مي توانيد Auth Users را براي آن مشخص کنيد که اين کار با فايلSecret که بصورتplaintext نوشته مي شود و با فرمت Key/value که نشان دهنده نام کاربري و رمز عبور است، انجام مي شود.

rsync remote-update يک پروتکل براي Rsync مي باشد که تنها تغييرات صورت گرفته را بين دو ماشين منتقل مي کند.
دو راه براي اتصال rsync براي انتقال فايل وجود دارد ، يک راه استفاده از برنامه هاي remote-shell مانند ssh بعنوان انتقال است و راه ديگر اتصال به daemon برنامه Rsync توسط پروتکل tcp مي باشد.
انتقال با remote-shell هر زماني که مسير هاي منبع و مقصد محتوي تنها يک کالن ( : ) بعد از مشخص کردن ميزبان باشند استفاده ميشود ، اتصال به daemon برنامه Rsync تنها زماني که مسير هاي منبع و مقصد محتوي دو کالن ( :: ) بعد از مشخص کردن ميزبان باشند و يا بکار بردن عبارت //:rsync استفاده ميشود


استفاده از Rsync :

شما مي توانيد با مشخص کردن مبدا و مقصد به راحتي از اين برنامه استفاده کنيد براي مثال :
rsync -t *.c foo:src/
شايد اين کلي ترين دستور براي rsync باشد ، در اين دستور تمامي پترن هاي شامل c.* به سيستمي با نام foo ، و به دايرکتري src انتقال پيدا مي کند , اگر فايلي با نام مشابه در دايرکتري مقصد وجود داشته باشد ، rsync remote-update protocol براي بروز رساني آن فايل ها تنها با فرستادن تغييرات شروع به کار مي کند
rsync -avz foo:src/bar /data/tmp
اين دستور بصورت recursive تمامي فايل هاي دايرکتري src/bar را در ماشين foo به دايرکتري data/tmp در ماشين فعلي کپي مي کند. فايل ها در حالت آرشيو منتقل مي شوند که اين کار باعث مي شود تمامي مجوز ها و اطلاعات فايل در حين انتقال حفظ شود.
همچنين فشرده سازي باعث کاهش حجم فايل در حين انتقال خواهد شد.


در آخر هم سعي مي کنيم يک مثال پيچيده را با هم بررسي کنيم
rsync --verbose --progress --stats --compress --rsh=/usr/local/bin/ssh --recursive --times --perms --links --delete /www/* webserver:simple_path_name
خوب اين دستور rsync را با گزينه هاي verbose , progress , stats راه اندازي مي کند
گزينه Compress براي فشرده سازي اطلاعات و گزينه rsh براي انتقال اصلاعات بصورت امن از طريق ssh خواهد بود، خط بعد مشخص مي کند که Rsync چطور با فايل هاي رفتار کند:

با اجراي دستور فوق تمامي فايل هاي شاخه www من به کامپيوتر webserver با حفظ تمامي مجوز ها و اطلاعات ، انتقال پيدا خواهد کرد.
Recursive به آن مي گويد که فايل ها و دايرکتري ها را بصورت recursive انتقال دهد و اطلاعات زمان و مجوز ها را با دو عبارت times و perms انتقال دهد همچنين عبارت links نشان دهنده کپي کردن symbolic ها و عبارت Delete نشان دهنده پاک کردن دايرکتري و فايل ها در دايرکتري مقصد که در سيستم فعلي حذف شده اند مي باشد */www/ فايل هايي از سيستم من که قرار است توسط Rsync انتقال داده شوند را نشان مي دهد و webserver:simple_path_name آدرس کامپيوتر مقصد خواهد بود.