همگامسازی فایلها و دایرکتوریها
نگهداری یک کپی پشتیبان (backup) از سیستم، مستلزم همگامسازی یک یا چند دایرکتوری با دایرکتوری (یا دایرکتورهای) دیگری است که بر روی سیستم local (که معمولا یک حافظه جانبی حذف شدنی مانند هارددیسک اکسترنال) و یا یک سیستم ریموت وجود دارد.
بهعنوان مثال، ممکن است یک کپی محلی از یک وبسایت که در حال توسعه است بگیریم و آن را بر روی نسخه زنده یک وبسرور ریموت کپی کنیم.
فرمان rsync (همگامسازی ریموت فایل و دایرکتوری)
این برنامه، میتواند دایرکتوریهای local و ریموت را همگامسازی کند. پروتکل rsync remoteupdate قادر است که بهسرعت تفاوتهای میان دو دایرکتوری را تشخیص دهد. این پروتکل موجب میشود که rsync در مقایسه با سایر برنامههای کپی بسیار سریعتر (و از منظر اقتصادی) مقرون بهصرفهتر باشد.
فرمان rsync با این صورت بهکار گرفته میشود:
1 |
rsync options source destination |
که source (مبدا) و destination (مقصد) هر کدام، یکی از موارد زیر است:
- یک فایل یا دایرکتوری local.
- یک فایل یا دایرکتوری ریموت به شکل [user@]host:path
- یک سرور ریموت rsync تعیین شده با URI روبرو: rsync://[user@]host[:port]/path
توجه داشته باشید که یکی از موارد source (مبدا) و destination (مقصد) میبایست، یک فایل local باشد. کپی ریموت به ریموت پشتیبانی نمیشود.
در ادامه، rsync را بر روی برخی از فایلهای محلی امتحان میکنیم. ابتدا دایرکتوری foo را خالی میکنیم:
1 |
[me@linuxbox ~]$ rm -rf foo/* |
سپس دایرکتوری playground را با یک کپی متناظر در foo همگام میکنیم:
1 |
[me@linuxbox ~]$ rsync -av playground foo |
ما هر دو گزینه –a (برای آرشیو کردن که باعث بازگشت و نگهداری مشخصههای فایل میشود) و گزینه –v (verbose) را استفاده کردیم تا یک کپی از دایرکتوری playground در داخل دایرکتوری foo ایجاد کنیم. زمانی که فرمان اجرا میشود، لیستی از فایلها و دایرکتوریهایی که کپی میشوند را مشاهده خواهید کرد. در انتها یک پیام را مشاهده خواهید کرد که خلاصه بوده و نشاندهنده میزان کپی انجام شده است:
1 2 |
sent 135759 bytes received 57870 bytes 387258.00 bytes/sec total size is 3230 speedup is 0.02 |
اگر فرمان مجددا تکرار کنیم، تفاوت نتیجه را مشاهده خواهید کرد:
1 2 3 4 |
[me@linuxbox ~]$ rsync -av playgound foo building file list ... done sent 22635 bytes received 20 bytes 45310.00 bytes/sec total size is 3230 speedup is 0.14 |
توجه داشته باشید که لیست کردن فایل صورت نمیگیرد. به این دلیل که rsync تشخیص داده که هیچ تفاوتی بین ~/playground و ~/foo/playground وجود ندارد، در نتیجه هیچ عمل کپی انجام نخواهد شد. اگر فایلی را در دایرکتوری playground تغییر دهیم و مجددا فرمان rsync را اجرا نماییم، مشاهده خواهیم کرد که rsync تغییر را شناسایی کرده و فقط فایلهای بهروز شده را کپی میکند.
1 2 3 4 5 6 |
[me@linuxbox ~]$ touch playground/dir-099/file-Z [me@linuxbox ~]$ rsync -av playground foo building file list ... done playground/dir-099/file-Z sent 22685 bytes received 42 bytes 45454.00 bytes/sec total size is 3230 speedup is 0.14 |
بهعنوان مثال، تصور کنید که یک هارددرایو اکسترنال داریم که قبلا هم از آن برای tar استفاده کرده بودیم. اگر درایو را به سیستم خود متصل کنیم، دوباره در مسیر /media/BigDisk سوار (mount) میشود. اکنون یک دایرکتوری /backup بر روی هارد اکسترنال ایجاد میکنیم. سپس با استفاده از rsync موارد مهم را به داخل هارد خود کپی میکنیم:
1 2 3 |
[me@linuxbox ~]$ mkdir /media/BigDisk/backup [me@linuxbox ~]$ sudo rsync -av --delete /etc /home /usr/local /media/BigDisk/ backup |
در این مثال دایرکتوریهای /etc، /home و /usr/local را از سیستم به هارد اکسترنال خود کپی کردیم. گزینه –delete را اضافه کردهایم تا فایلهایی که ممکن است بر رو دیوایس بکاپ موجود باشد و دیگر بر روی دیوایس مبدا موجود نیست را حذف کنیم (البته اگر برای اولین بار بکاپ انجام میدهیم، این کار معنیدار نیست، ولی برای بکاپهای بعدی مفید خواهد بود). تکرار این رویه (اتصال هارد اکسترنال و اجرای فرمان rsync) میتواند روشی مفید، البته نه ایدهآل برای بکاپ بخشهایی از سیستم باشد.
در اینجا بهکار بردن یک alias به ما کمک خواهد کرد. میتوانیم یک alias ایجاد کرده و آن را به فایل .bashrc اضافه نماییم تا این ویژگی فراهم شود:
1 2 |
alias backup='sudo rsync -av --delete /etc /home /usr/local /media/BigDisk/bac kup' |
اکنون تنها کاری که بایستی انجام شود، اتصال هارد اکسترنال به سیستم و سپس اجرای فرمان backup میباشد.
استفاده ازrsync بر روی شبکه
یکی از زیباییهای فرمان rsync این است که میتوان با استفاده از آن، فایلها را بر روی شبکه کپی کرد. شایان ذکر است که حرف r در rsync، سرنام واژه remote است. کپی ریموت به دو شیوه صورت میپذیرد:
اولین روش با سیستم دیگری است که rsync از طریق یک برنامه Shell مانندssh بر روی آن نصب شده باشد. فرض کنید که سیستم دیگری بر روی شبکه local وجود دارد که فضای هارددیسک در دسترس زیادی دارد و ما میخواهیم عملیات بکاپ خود را بهجای یک هارددیسک اکسترنال با استفاده از ریموت انجام دهیم. فرض کنید که هماکنون دایرکتوری تحت عنوان /backup وجود دارد که میتوانیم فایلهای خود را به آن تحویل دهیم:
1 2 |
[me@linuxbox ~]$ sudo rsync -av --delete --rsh=ssh /etc /home /usr/local remotesys:/ 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، به این صورت معکوس کنیم:
1 2 3 |
[me@linuxbox ~]$ mkdir fedora-devel [me@linuxbox ~]$ rsync -av -delete rsync://rsync.gtlib.gatech.edu/fedoralinux- core/development/i386/os fedora-devel |
در این مثال ما از URI سرور ریموت rsync استفاده میکنیم که شامل یک پروتکل (rsync://) بههمراه نام میزبان (hostname) ریموت (rsync.gtlib.gatech.edu) به همراه نام مسیر (pathname) مخزن است.
منبع: لینوکسسیزن نوشته فرشید نوتاش حقیقتدرباره فرشید نوتاش حقیقت
همیشه نیازمند یک منبع آموزشی فارسی در حوزه نرمافزارهای آزاد/ متنباز و سیستمعامل گنو/لینوکس بودم. از این رو این رسالت رو برای خودم تعریف کردم تا رسانه «محتوای باز» رو بوجود بیارم.
نوشتههای بیشتر از فرشید نوتاش حقیقتاین سایت از اکیسمت برای کاهش هرزنامه استفاده می کند. بیاموزید که چگونه اطلاعات دیدگاه های شما پردازش میشوند.
دیدگاهتان را بنویسید