منبع اصلی نوشتار زیر در این لینک قرار دارد

پشتیبان‌گیری و بیشتر از آن با rsync

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 وجود دارد که البته مشخصا انعطاف و قابلیت‌های ابزار تحت خط فرمان آن را ندارند. با این وجود نمونه‌هایی مانند Grsync و Gadmin-Rsync بسیاری از وظایف اساسی را بخوبی انجام می‌دهند. برنامه فوق‌العاده دیگری که بر اساس دستورهای rsync، cron و diff کار می‌کند Back in Time نام داشته و شبیه به ویژگی Time Machine در سیستم‌های مکینتاش است. این ابزار ویژگی‌های پیچیده‌تری نیز ارائه می‌کند و دارای یک رابط گرافیکی مناسب و قابل درک نیز هست.
\"The
The Interface for Grsync
\"The
The GNOME view for Back In Time Application

در نتیجه، می‌توان گفت rsync یک ابزار ساده و در عین حال بسیار قدرتمند است که وقتی در کنار ابزارهای دیگر نظیر cron استفاده شود می‌تواند انعطاف و عملکرد بالایی ارائه کند که آن را هم ردیف ابزارهای پشتیبان‌گیری پیچیده و حتی تجاری قرار می‌دهد.

دیگر منابع : +

4 دیدگاه برای این نوشته:

  1. \'\'شاهین آزاد:

    ۲۷ آذر ۱۳۹۰
    ممنونم مسعود‌! خیلی وقت بود که می‌خواستم در مورد Rsync بیشتر بدونم‌، اطلاعات توی مقالت خیلی کمک کرد ;-)
  2. \'\'mFat:

    ۲۷ آذر ۱۳۹۰
    خیلی خوب بود مسعود! این مدل مقاله‌های سایتتون رو خیلی دوست دارم.
  3. \'\'مسعود:

    ۲۸ آذر ۱۳۹۰
    شاهین و مهدی عزیز،
    خواهش میکنم، قابل شما رو نداشت. :)
    خوبی این مدل مقاله‌ها اینه که معمولا تاریخ مصرف ندارن و میشه همیشه بهشون مراجعه کرد.
  4. \'\'میعاد بهرامی:

    ۲۸ آذر ۱۳۹۰
    واقعا عالی بود

\"ارسال



برچسب ها : , , , , , ,