rsync یک ابزار مستقل از پلتفرم است که تحت سیستمعاملهای لینوکس، مک و ویندوز (البته با Cygwin) قابل اجراست و به راحتی میتواند در ترکیب با cron و SSH در یک اسکریپت استفاده شود. این موضوع باعث میشود این برنامه، یکی از ابزارهای ضروری در جعبهابزار هر فرد باشد؛ حتی اگر از آن برای پشتیبانگیری استفاده نکند. یکی دیگر از مزایای rsync این است که این ابزار در اغلب توزیعهای بزرگ گنو/لینوکس بصورت پیشفرض قرار دارد.
پشتیبانگیری افتراقی (differential backup) ویژگی خاص این ابزار است و بدین معناست که rsync با الگوریتم منحصر به فرد خود به شما این امکان را میدهد که به جای انتقال کل اطلاعات، فقط به انتقال تغییرات رخ داده در یک فایل/دایرکتوری بپردازید. این ویژگی زمانی اهمیت خود را نشان میدهد که قصد همسانسازی (synchronization) فایلها و یا دایرکتوریهای بزرگ و سنگین، با حجم چندین گیگابایت را داشته باشید. در این مواقع rsync فقط به انتقال بخشهای تغییر یافته میپردازد و فقط تغییرات را بر روی کپیِ فایل یا شاخهی اصلی ماشین پشتیبان اعمال میکند. در صورتی که میخواهید بر روی خود سیستم اصلی اقدام به ایجاد یک نسخهی پشتیبان کنید (مثلا بر روی یک درایو جداگانه، مثل یک دیسک USB) میتوانید از rsync برای انجام این کار کمک بگیرید. در مجموع، از آنجا که ما حتی مجبور به نصب هیچ ابزار پشتیبانگیری پیچیدهای هم نیستیم، استفاده از rsync میتواند یک راه حل ساده، راحت و موثر باشد.
نصب و پیکربندی
معمولا، میتوان تنها با مشخص کردن دایرکتوری مبدا و مقصد اقدام به استفاده از rsync کرد، با این حال ما آن را بر روی یک ماشین به حالت دیمون (به شکل یک rsync server) به کار میگیریم. به این ترتیب، ماشین مورد نظر میتواند درخواستهای همسانسازی را دریافت کند. این ابزار میتواند به دو صورت همسانساز یکطرفه و یا دوطرفه و یا بصورت دیمون مستقل، و یا وابسته به inetd راهاندازی شود. انتخاب پیکربندی مناسب به میزان ترافیکی که دیمون ما قرار است دریافت کند، بستگی دارد.
برای زمانی که ترافیک عبوری زیاد و قابل توجه است، داشتن یک daemon مستقل بهتر و منطقیتر است، در غیر اینصورت از پیکربندی inetd استفاده میکنیم. همچنین واضح است که برای همگامسازی دوطرفه مجبور به اجرا کردن rsync در حالت دیمون و بر روی هر دو ماشین خواهیم بود. برای پیکربندی rcync در حالت daemon فایل etc/rsyncd.conf/
را مطابق نمونه زیر ویرایش کنید.
motd file = /etc/rsyncd.motd log file = /var/log/rsyncd.log pid file = /var/run/rsyncd.pid lock file = /var/run/rsync.lock [path_1] path = /directories/here comment = something to comment uid = nobody gid = nobody auth users = username secrets file = /etc/rsyncd.scrt
همانگونه که مشاهده میکنید، این فایل شامل دو بخش است؛ پارامترهای کلی و تنظیمات تعیین مسیر. تمامی مشخصات، نظیر motd file (message of the day file), log file, pid file, lock file, و.. تحت عنوان پارامترهای کلی قرار میگیرند و پارامترهایی که به دنبال [path_1]
آمدهاند مربوط به تنظیمات تعیین مسیر هستند ([path_1]
نام یک مسیر خاص است).
امکان قرار دادن بیش از یک مسیر نیز در فایل پیکربندی وجود دارد. از آنجا که ما فقط تنظیمات مهم و مرتبط را ذکر کردیم، شما میتوانید برای دستیابی به لیست کامل پارامترهای کلی و تعیین مسیر، به صفحه راهنمای man مراجعه کنید.
man rsync
در هر حال، میتوانید خلاصهای از آنها را در جدول زیر بیابید.
اکنون که rsync بر روی سرویسدهنده (server) پیکربندی شد، وقت آن رسیده تا daemon مستقل را با فرمان rsync --daemon
اجرا کنیم.
کلاینت rsync
حال، سرویسدهندهی rsync میتواند توسط کلاینت با استفاده از دستور زیر مورد استفاده قرار گیرد.
rsync -avz host::path_1 /directory/at/destination
این دستور کلیه فایلهای موجود در دایرکتوری ذکر شده در پارامتر path_1
را در مسیر تعیین شده در ماشین کلاینت کپی خواهد کرد. به اینگونه دستورها، دستور pull (کشیدن) میگویند و اگر دایرکتوری مقصد بر روی ماشین پشتیبان باشد آن را push (هل دادن) مینامند.
حال بیایید به یک مثال دیگر توجه کنیم، که در آن به کپی محلی فایلها بوسیله چند سوییچ اختیاری میپردازیم.
rsync --verbose --progress --stats --compress --recursive --times --perms \\ --links --delete --exclude *.pdf /home/user/Folder1/ /home/user/Folder2
برخی از آپشنها نظیر --progress، --verbose و --stats
خود گویا بوده و نیازی به توضیح ندارند. فشردهسازی (compress–) یکی از ویژگیهایی است که توسط rsync برای افزایش سرعت انتقال فایلها فراهم شده است که این ویژگی در حقیقت در زمان همسانسازی با remote host به کار میآید. در زیر توضیحات مربوط به بقیه آپشنها را مشاهده میکنید.
--recursive
ـــــ برای کپی قابل برگشت تمامی زیرپوشهها؛--times
ـــــ برای نگهداری برچسبهای زمانی (timestamps) پیشین--perms
ـــــ برای بدون تغییر نگاه داشتن سطوح دسترسی--links
ـــــ برای کپی کردن پیوندهای نمادین، بصورت لینک (نه بصورت ارجاع)
در این قسمت آپشنهای دیگری نیز وجود دارد که میتوانید از آنها استفاده کنید؛ نظیر --copy-links
و --safe-links
که اولی به جای کپی کردن خود پیوندها (لینکها) اقدام به کپی کردن فایل/دایرکتوریهای لینک شده میکند و دومی بطور کامل از ارجاع پیوندهای خارج از شاخه مورد نظر جلوگیری میکند.
آپشنِ --delete
زمانی به کار میرود که مایل باشید فایلهایی که طی همسانسازی قبلی، در دایرکتوری مقصد کپی شدهاند ولی اکنون از دایرکتوری مبدا پاک شدهاند نیز حذف شوند و در نهایت، --exclude *.pdf
از کپی شدن هرگونه فایل با پسوند PDF جلوگیری میکند.
توجه : حضور یا عدم حضور کاراکتر اسلشِ (/) عقب در مسیر منبع/مقصد بسیار مهم است، چرا که نحوه کپی کردن فایلها را بهکلی تغییر میدهد. وجود کاراکتر اسلش در دایرکتوری منبع /home/user/Folder1/
، در دستور فوق بدین معناست که محتوای (فایلها و زیرپوشهها) موجود در پوشهی Folder1 باید در پوشهی مقصد کپی شوند. بدون اسلشِ عقب، rsync ابتدا اقدام به ایجاد پوشهی Folder1 در دایرکتوری مقصد نموده و سپس محتوای منبع را در پوشهی جدید کپی خواهد کرد. بطور خاص اگر میخواهید از دو یا سه پوشه پشتیبان بگیرید (مثلا از پوشههای projA، projB، projC موجود در مسیر /home/ankit/Projects
) و یا مثلا دستور rsync شما به شکل زیر است، به این مورد توجه ویژه داشته باشید، چرا که در صورت بیدقتی شما، کار به کلی به هم ریخته خواهد شد.
rsync –recursive –delete /home/ankit/Projects/projA/ /media/BACKUP/currentprojects rsync –recursive –delete /home/ankit/Projects/projB/ /media/BACKUP/currentprojects rsync –recursive –delete /home/ankit/Projects/projC /media/BACKUP/currentprojects
currentprojects
موجود در درایو BACKUP، شما یک پوشه با نام projC خواهید داشت که حاوی فایلهای مشابه در مبدا است؛ ولی فایلها و زیرپوشههای موجود در پوشههای projA و projB با یکدیگر ترکیب شده و به جای کپی شدن در پوشههای مربوط به خود، در پوشهی currentprojects
قرار خواهند گرفت! دلیل اصلی این آشفتگی عدم استفاده صحیح شما از اسلش عقب بوده است… تصور کنید وقتی مجبور به بازگردانی فایلها از این پشتیبان شوید، با چه آشفتگی و چه دردسرهایی برای مرتب کردن آن روبرو خواهید شد.در نتیجه، میتوان گفت rsync یک ابزار ساده و در عین حال بسیار قدرتمند است که وقتی در کنار ابزارهای دیگر نظیر cron استفاده شود میتواند انعطاف و عملکرد بالایی ارائه کند که آن را هم ردیف ابزارهای پشتیبانگیری پیچیده و حتی تجاری قرار میدهد.
دیگر منابع : +
4 دیدگاه برای این نوشته:
شاهین آزاد:
۲۷ آذر ۱۳۹۰
ممنونم مسعود! خیلی وقت بود که میخواستم در مورد Rsync بیشتر بدونم، اطلاعات توی مقالت خیلی کمک کرد ;-)mFat:
۲۷ آذر ۱۳۹۰
خیلی خوب بود مسعود! این مدل مقالههای سایتتون رو خیلی دوست دارم.مسعود:
۲۸ آذر ۱۳۹۰
شاهین و مهدی عزیز،
خواهش میکنم، قابل شما رو نداشت. :)
خوبی این مدل مقالهها اینه که معمولا تاریخ مصرف ندارن و میشه همیشه بهشون مراجعه کرد.میعاد بهرامی:
۲۸ آذر ۱۳۹۰
واقعا عالی بود