Rsync یک برنامه ساده و کوچک، همانند یک برنامه انتقال فایل می باشد، آخرین نسخه ای که در زمان نوشتن این مقاله وجود دارد نسخه ۳٫۰٫۴ می باشد که می توانید از سایت رسمی آن با آدرس http://samba.anu.edu.au/rsync دریافت کنید.
با این برنامه حتی می توان فقط تغییراتی که بر روی یک فایل انجام شده را انتقال داد ، در نظر بگیرید که شما سروری دارید که مدام مجبورید اطلاعات آن را با سرور دیگر بروز رسانی کنید، برای این کار لازم نیست هر بار اطلاعات مورد نظر را تماما انتقال دهید ، با کمک Rsync می توان فقط فایل هایی را که در کامپیوتر مبدا و یا مقصد تغییر کرده اند، انتقال داد. این کار فواید بسیاری از جمله ، آپلود سریع تر و کم تر شدن ترافیک شبکه و صرفه جویی در پهنای باند مصرفی را بدنبال خواهد داشت.
در واقع Rsync یک برنامه چند منظوره است که کارهای Backup & Mirroring را برای شما انجام خواهد داد.
بعضی امکانات Rsync عبارت اند از :
- پشتیبانی از حفظ اطلاعات فایل منتقل شده ، همانند مالک فایل ، گروه فایل ، مجوز های فایل و …
- عدم نیاز به مجوز کاربر ریشه
- ترانسپرنت شدن با پروتکل هایی نظیر ssh ، rsh
- قابلیت استفاده بصورت anonymous یا authenticated
برای شروع ابتدا مطمئن شوید که برنامه مورد نظر در سیستم شما نصب میباشد من از CentOS 5.2 استفاده می کنم کلیه دستوران نوشته شده در این مقاله هم بر اساس همین توزیع می باشد.
برای این کار می توانید دستور rsync را اجرا کنید و یا خروجی دستور زیر را ببینید :
#rpm -q rysnc
و خروجی بمانند زیر خواهد بود :
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 با حفظ تمامی مجوز ها و اطلاعات ، انتقال پیدا خواهد کرد.