Rsync  یک برنامه ساده  و کوچک، همانند یک برنامه انتقال فایل می باشد، آخرین نسخه ای که در زمان نوشتن این مقاله وجود دارد نسخه  ۳٫۰٫۴ می باشد که می توانید از سایت رسمی آن با آدرس 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  چطور با فایل های  رفتار کند:
Recursive  به آن  می گوید که فایل ها و دایرکتری ها را بصورت recursive  انتقال دهد و اطلاعات زمان و مجوز ها را با دو عبارت times  و perms  انتقال دهد همچنین عبارت links نشان دهنده  کپی کردن symbolic ها و عبارت Delete  نشان دهنده پاک کردن دایرکتری و فایل ها در دایرکتری مقصد که در سیستم فعلی حذف شده اند می باشد */www/ فایل هایی از سیستم من که قرار است توسط Rsync  انتقال داده شوند را نشان می دهد و webserver:simple_path_name آدرس کامپیوتر مقصد خواهد بود.
با اجرای دستور فوق تمامی فایل های شاخه www  من به کامپیوتر webserver   با حفظ تمامی مجوز ها و اطلاعات ، انتقال پیدا خواهد کرد.