آموزشچگونه

آموزش خط فرمان: قسمت چهل و نهم، همگام‌سازی فایل‌ها و دایرکتوری‌ها

Print Friendly, PDF & Email

نگهداری یک کپی پشتیبان (backup) از سیستم، مستلزم همگام‌سازی یک یا چند دایرکتوری با دایرکتوری (یا دایرکتورهای) دیگری است که بر روی سیستم local (که معمولا یک حافظه جانبی حذف شدنی مانند هارددیسک اکسترنال) و یا یک سیستم ریموت وجود دارد.

به‌عنوان مثال، ممکن است یک کپی محلی از یک وب‌سایت که در حال توسعه است بگیریم و آن را بر روی نسخه زنده یک وب‌سرور ریموت کپی کنیم.

فرمان rsync (همگام‌سازی ریموت فایل و دایرکتوری)

این برنامه، می‌تواند دایرکتوری‌های local و ریموت را همگام‌سازی کند. پروتکل rsync remoteupdate قادر است که به‌سرعت تفاوت‌های میان دو دایرکتوری را تشخیص دهد. این پروتکل موجب می‌شود که rsync در مقایسه با سایر برنامه‌های کپی بسیار سریع‌تر (و از منظر اقتصادی) مقرون به‌صرفه‌تر باشد.

فرمان rsync با این صورت به‌کار گرفته می‌شود:

که source (مبدا) و destination (مقصد) هر کدام، یکی از موارد زیر است:

  • یک فایل یا دایرکتوری local.
  • یک فایل یا دایرکتوری ریموت به شکل [user@]host:path
  • یک سرور ریموت rsync تعیین شده با URI روبرو: rsync://[user@]host[:port]/path

توجه داشته باشید که یکی از موارد source (مبدا) و destination (مقصد) می‌بایست، یک فایل local باشد. کپی ریموت به ریموت پشتیبانی نمی‌شود.

در ادامه، rsync را بر روی برخی از فایل‌های محلی امتحان می‌کنیم. ابتدا دایرکتوری foo را خالی می‌کنیم:

سپس دایرکتوری playground را با یک کپی متناظر در foo همگام می‌کنیم:

ما هر دو گزینه –a (برای آرشیو کردن که باعث بازگشت و نگهداری مشخصه‌های فایل می‌شود) و گزینه –v (verbose) را استفاده کردیم تا یک کپی از دایرکتوری playground در داخل دایرکتوری foo ایجاد کنیم. زمانی که فرمان اجرا می‌شود، لیستی از فایل‌ها و دایرکتوری‌هایی که کپی می‌شوند را مشاهده خواهید کرد. در انتها یک پیام را مشاهده خواهید کرد که خلاصه بوده و نشان‌دهنده میزان کپی انجام شده است:

اگر فرمان مجددا تکرار کنیم، تفاوت نتیجه را مشاهده خواهید کرد:

توجه داشته باشید که لیست کردن فایل صورت نمی‌گیرد. به این دلیل که rsync تشخیص داده که هیچ تفاوتی بین ~/playground و ~/foo/playground وجود ندارد، در نتیجه هیچ عمل کپی انجام نخواهد شد. اگر فایلی را در دایرکتوری playground تغییر دهیم و مجددا فرمان rsync را اجرا نماییم، مشاهده خواهیم کرد که rsync تغییر را شناسایی کرده و فقط فایل‌های به‌روز شده را کپی می‌کند.

به‌عنوان مثال، تصور کنید که یک هارددرایو اکسترنال داریم که قبلا هم از آن برای tar استفاده کرده بودیم. اگر درایو را به سیستم خود متصل کنیم، دوباره در مسیر /media/BigDisk سوار (mount) می‌شود. اکنون یک دایرکتوری /backup بر روی هارد اکسترنال ایجاد می‌کنیم. سپس با استفاده از rsync موارد مهم را به داخل هارد خود کپی می‌کنیم:

در این مثال دایرکتوری‌های /etc، /home و /usr/local را از سیستم به هارد اکسترنال خود کپی کردیم. گزینه –delete را اضافه کرده‌ایم تا فایل‌هایی که ممکن است بر رو دیوایس بکاپ موجود باشد و دیگر بر روی دیوایس مبدا موجود نیست را حذف کنیم (البته اگر برای اولین بار بکاپ انجام می‌دهیم، این کار معنی‌دار نیست، ولی برای بکاپ‌های بعدی مفید خواهد بود). تکرار این رویه (اتصال هارد اکسترنال و اجرای فرمان rsync) می‌تواند روشی مفید، البته نه ایده‌آل برای بکاپ بخش‌هایی از سیستم باشد.

در اینجا به‌کار بردن یک alias به ما کمک خواهد کرد. می‌توانیم یک alias ایجاد کرده و آن را به فایل .bashrc اضافه نماییم تا این ویژگی فراهم شود:

اکنون تنها کاری که بایستی انجام شود، اتصال هارد اکسترنال به سیستم و سپس اجرای فرمان backup می‌باشد.

استفاده ازrsync بر روی شبکه

یکی از زیبایی‌های فرمان rsync این است که می‌توان با استفاده از آن، فایل‌ها را بر روی شبکه کپی کرد. شایان ذکر است که حرف r در rsync، سرنام واژه remote است. کپی ریموت به دو شیوه صورت می‌پذیرد:

اولین روش با سیستم دیگری است که rsync از طریق یک برنامه Shell مانندssh  بر روی آن نصب شده باشد. فرض کنید که سیستم دیگری بر روی شبکه local وجود دارد که فضای هارددیسک در دسترس زیادی دارد و ما می‌خواهیم عملیات بکاپ خود را به‌جای یک هارددیسک اکسترنال با استفاده از ریموت انجام دهیم. فرض کنید که هم‌اکنون دایرکتوری تحت عنوان /backup وجود دارد که می‌توانیم فایل‌های خود را به آن تحویل دهیم:

دو تغییر را در خط فرمان ایجاد کرده‌ایم تا کپی در شبکه را آسان کنیم.

اول اینکه گزینه –rsh=ssh را اضافه کرده‌ایم که به rsync فرمان می‌دهد تا از برنامه ssh به‌عنوان یک Remote Shell استفاده کند. به این شیوه، قادر هستیم تا از یک تانل رمزنگاری شده ssh برای ایمنی داده از سیستم local به remote host استفاده کنیم.

دوم آن‌که rsync می‌تواند فایل‌ها را از طریق شبکه و با استفاده از rysnc server همگام کند. rysnc را می‌توان به نحوی پیکربندی کرد که مثل یک شبح اجرا شود و به درخواست‌های ورودی برای همگام‌سازی گوش دهد. این کار اغلب به‌منظو کپی کردن یک سیستم ریموت صورت می‌پذیرد. برای مثال نرم‌افزار RedHat یک مخزن بزرگ از بسته‌های نرم‌افزاری نحت توسعه را برای توزیع فدورا نگهداری می‌کند. از آن‌جایی که فایل‌های موجود در مخزن، متناوبا تغییر می‌کنند، اگر یک کپی local براساس همگام‌سازی دوره‌ای نگهداری شود (به‌جای این‌که کل مخزن را کپی کنیم)، یکی از مخازن درGeorgia Tech  نگهداری می‌گردد، بسیار عالی می‌شود. می‌توانیم آن را با استفاده از کپی local خود از rsync و سرور Georgia Tech’s rsync، به این صورت معکوس کنیم:

در این مثال ما از URI سرور ریموت rsync استفاده می‌کنیم که شامل یک پروتکل (rsync://) به‌همراه نام میزبان (hostname) ریموت (rsync.gtlib.gatech.edu) به همراه نام مسیر (pathname) مخزن است.

منبع: کتاب The Linux Command Line نوشته William E. Shotts

Related Articles

پاسخی بگذارید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

Close