بلاگ/ابزار Rsync برای هماهنگسازی دایرکتوریهای محلی و ریموت
بهروز شده
ابزار Rsync برای هماهنگسازی دایرکتوریهای محلی و ریموت
ابزار Rsync که عنوان آن مخفف عبارت “remote sync” است، یک ابزار هماهنگسازی فایل محلی و ریموت محسوب میشود. این ابزار با انتقال بخشهایی از فایل که دچار تغییر شدهاند، فرآیند کپی دادهها را بهینهسازی میکند. در این مطلب آموزشی، برخی ویژگیهای پایه این ابزار قدرتمند را مرور میکنیم. ابزار Rsync...
1399/09/255489 بازدید
ابزار Rsync که عنوان آن مخفف عبارت “remote sync” است، یک ابزار هماهنگسازی فایل محلی و ریموت محسوب میشود. این ابزار با انتقال بخشهایی از فایل که دچار تغییر شدهاند، فرآیند کپی دادهها را بهینهسازی میکند.
در این مطلب آموزشی، برخی ویژگیهای پایه این ابزار قدرتمند را مرور میکنیم.
ابزار Rsync چیست؟
Rsync یک ابزار هماهنگسازی سازگار با شبکه و بسیار انعطافپذیر است. به علت همهگیر بودن این ابزار در سیستمهای لینوکس و یونیکس و همچنین محبوبیت آن برای اسکریپتهای سیستمی، Rsync در بسیاری از توزیعهای لینوکس به صورت پیشفرض در دسترس قرار میگیرد.
الگوی پایه
قالب پایه ابزار Rsync بسیار ساده و قابلفهم است و عملکردی مشابه ssh، scp و cp دارد.
ابتدا با استفاده از فرمانهای زیر دو دایرکتوری و تعدادی فایلهای آزمایشی ایجاد میکنیم.
همچنین یک دایرکتوری خالی با نام dir2 خواهیم داشت. به منظور هماهنگسازی محتواهای dir1 با dir2 در همان سیستم داریم:
php
1rsync -r dir1/ dir2
گزینه -r به معنای حالت بازگشتی است که برای هماهنگسازی دایرکتوریها موردنیاز خواهد بود.
در همین حال میتوانیم از گزینه -a نیز استفاده کنیم.
php
1rsync -a dir1/ dir2
گزینه -a به صورت ترکیبی است و مخفف واژه «آرشیو» است. این گزینه هماهنگسازی را به صورت بازگشتی انجام میدهد و در همین حال، لینکهای سیمبلیک، فایلهای ویژه و دستگاهی، زمانهای ویرایش، گروه، مالک و مجوّزها را حفظ میکند. این گزینه معمولاً بیشتر از گزینه -r مورد استفاده قرار میگیرد و کارآیی بیشتری نیز دارد.
نکته مهم
شاید متوجه یک علامت اسلش (/) در پایان اولین آرگومان در فرمانهای بالا شدهاید.
php
1rsync -a dir1/ dir2
این علامت برای اشاره به محتواهای dir است. در غیر این صورت و بدون استفاده از اسلش، دایرکتوری dir1 درون دایرکتوری dir2 قرار میگیرد.
php
1~/dir2/dir1/
همیشه قبل از اجرای یک فرمان rsync، به شرایط آرگومانها دقت کنید. ابزار Rsync با استفاده از یکی از گزینههای -n یا --dry-run این کار را برایتان انجام خواهد داد. همچین گزینه -v برای بهدست آوردن یک نتیجه مناسب ضروری است.
در اینجا مشاهده میکنید که دایرکتوری انتقال پیدا کرده است.
نحوه استفاده از ابزار Rsync برای هماهنگسازی با یک سیستم ریموت
در صورتی که با ssh به یک سیستم ریموت دسترسی دارید و ابزار Rsync در هر دو طرف نصب است، بدیهی است که باید هماهنگسازی را با سرور ریموت انجام دهید. با استفاده از قالب زیر میتوانید فولدر نمونه dir1 را با یک کامپیوتر ریموت هماهنگ کندی. به خاطر داشته باشید که در اینجا میخواهیم دایرکتوری را واقعاً انتقال دهیم و بنابراین علامت اسلش را حذف کردهایم.
php
1rsync -a ~/dir1 username@remote_host:destination_directory
به این فرمان “push” نیز گفته میشود؛ چرا که باعث انتقال یک دایرکتوری در سیستم محلی به سیستم ریموت میشود. برعکس این فرمان، “pull” نام دارد. چنین فرمانی برای هماهنگسازی یک دایرکتوری ریموت با سیستم محلی به کار میرود. در صورتی که dir1 به جای سیستم محلی، در سیستم ریموت قرار داشته باشد، قالب فرمان به صورت زیر خواهد بود.
php
1rsync -a username@remote_host:/home/username/dir1 place_to_sync_on_local_machine
همانند cp و ابزارهای مشابه، منبع همیشه اولین آرگومان است و مقصد در جایگاه دوم میآید.
گزینههای مفید برای Rsync
ابزار Rsync حاوی گزینههای متعددی برای تغییر عملکرد پیشفرض است. البته ما در سطور بالا اکثر گزینههای ضروری را مرور کردهایم.
در صورتی که فایلهای انتقالی شما از نوع فشرده نباشند (مانند فایلهای متنی)، میتوانید با گزینه -z و اضافهکردن فشردهسازی، از پهنای باند مصرفی در شبکه کم کنید.
php
1rsync -az source destination
گزینه -P نیز بسیار مفید است و باعث ترکیب دو گزینه --progress و --partial میشود. گزینه --progress باعث اضافه شدن نوار وضعیت پیشرفت فرآیند انتقال میشود و گزینه --partial نیز به شما اجازه میدهد که انتقالهای مختلشده را دوباره از سر بگیرید.
در صورتی که این فرمان را دوباره اجرا کنید، یک خروجی کوتاهتر دریافت خواهید کرد. چرا که در این حالت۷ هیچگونه تغییری ایجاد نمیشود. این قابلیت ابزار Rsync در استفاده از زمانهای ویرایش برای تشخیص انجام تغییرات است.
php
1rsync -azP source destination
خروجی
php
1sending incremental file list23sent 818 bytes received 12 bytes 1660.00 bytes/sec45total size is 0 speedup is 0.00
امکان بروزرسانی زمان ویرایش در برخی از فایلها وجود دارد و خواهیم دید که ابزار Rsync به شکلی هوشمندانه، تنها فایلهایی را که تغییر داده شدهاند، کپی میکند.
برای حفظ هماهنگی واقعی بین دو دایرکتوری، باید فایلهایی را که در منبع حذف شدهاند، حتماً از دایرکتوری مقصد نیز حذف شوند. ابزار Rsync به صورت پیشفرض، چیزی را از دایرکتوری مقصد حذف نمیکند.
میتوانیم با استفاده از فرمان --delete این رفتار را تغییر دهیم. قبل از استفاده از این گزینه، با کمک گزینه --dry-run آزمایشی کار کنید تا از دست رفتن دادهها جلوگیری شود.
php
1rsync -a --delete source destination
اگر بخواهید برخی فایلها یا دایرکتوریهای خاص را درون دایرکتوری موردنظرتان برای هماهنگسازی حذف کنید، میتوانید آنها در قالب لیست با جداسازی علامت کاما وارد نمایید.
php
1rsync -a --exclude=pattern_to_exclude source destination
اگر الگوی خاصی برای حذف دارید، میتوانید حذف فایلهای مطابق را با استفاده از گزینه --include=انجام دهید.
php
1rsync -a --exclude=pattern_to_exclude --include=pattern_to_include source destination
نهایتاً گزینه --backup در ابزار Rsync میتواند برای ذخیره نسخههای پشتیبان فایلهای مهم مورد استفاده قرار گیرد. این گزینه در کنار گزینه --backup-dir مورد استفاده قرار میگیرد که مشخصکننده دایرکتوری ذخیره فایلهای پشتیبان خواهد بود.
php
1rsync -a --delete --backup --backup-dir=/path/to/backups /path/to/source destination
جمعبندی
ابزار Rsync میتواند موجب سهولت انتقال فایل در ارتباطهای شبکهای و هماهنگسازی دایرکتوریهای محلی شود. انعطافپذیری Rsync آن را به گزینهای مناسب برای بسیاری از عملیاتها بر روی فایلها بدل میکند. ضمن اینکه، ابعاد گسترده عملکردهای این ابزار موجب میشود تا شما بتوانید عملیاتهای پیچیدهای برای پشتیبانگیری طراحی کنید و کنترل مناسب بر روی دادههای انتقالی داشته باشید.