بلاگ/ابزار Rsync برای هماهنگ‌سازی دایرکتوری‌های محلی و ریموت
به‌روز شده

ابزار Rsync برای هماهنگ‌سازی دایرکتوری‌های محلی و ریموت

ابزار Rsync که عنوان آن مخفف عبارت “remote sync” است، یک ابزار هماهنگ‌سازی فایل محلی و ریموت محسوب می‌شود. این ابزار با انتقال بخش‌هایی از فایل که دچار تغییر شده‌اند، فرآیند کپی داده‌ها را بهینه‌سازی می‌کند. در این مطلب آموزشی، برخی ویژگی‌های پایه این ابزار قدرتمند را مرور می‌کنیم. ابزار Rsync...

1399/09/255489 بازدید
ابزار Rsync برای هماهنگ‌سازی دایرکتوری‌های محلی و ریموت
ابزار Rsync که عنوان آن مخفف عبارت “remote sync” است، یک ابزار هماهنگ‌سازی فایل محلی و ریموت محسوب می‌شود. این ابزار با انتقال بخش‌هایی از فایل که دچار تغییر شده‌اند، فرآیند کپی داده‌ها را بهینه‌سازی می‌کند. در این مطلب آموزشی، برخی ویژگی‌های پایه این ابزار قدرتمند را مرور می‌کنیم.

ابزار Rsync چیست؟

Rsync یک ابزار هماهنگ‌سازی سازگار با شبکه و بسیار انعطاف‌پذیر است. به علت همه‌گیر بودن این ابزار در سیستم‌های لینوکس و یونیکس و همچنین محبوبیت آن برای اسکریپت‌های سیستمی، Rsync در بسیاری از توزیع‌های لینوکس به صورت پیش‌فرض در دسترس قرار می‌گیرد.

الگوی پایه

قالب پایه ابزار Rsync بسیار ساده و قابل‌فهم است و عملکردی مشابه ssh، scp و cp دارد. ابتدا با استفاده از فرمان‌های زیر دو دایرکتوری و تعدادی فایل‌های آزمایشی ایجاد می‌کنیم.
php
cd ~mkdir dir1mkdir dir2touch dir1/file{1..100}
حالا یک دایرکتوری با نام dir1 داریم که تعداد ۱۰۰ فایل خالی در آن قرار گرفته‌اند.
php
ls dir1
خروجی
php
file1    file18  file27  file36  file45  file54  file63  file72  file81  file90file10   file19  file28  file37  file46  file55  file64  file73  file82  file91file100  file2   file29  file38  file47  file56  file65  file74  file83  file92file11   file20  file3   file39  file48  file57  file66  file75  file84  file93file12   file21  file30  file4   file49  file58  file67  file76  file85  file94file13   file22  file31  file40  file5   file59  file68  file77  file86  file95file14   file23  file32  file41  file50  file6   file69  file78  file87  file96file15   file24  file33  file42  file51  file60  file7   file79  file88  file97file16   file25  file34  file43  file52  file61  file70  file8   file89  file98file17   file26  file35  file44  file53  file62  file71  file80  file9   file99
همچنین یک دایرکتوری خالی با نام dir2 خواهیم داشت. به منظور هماهنگ‌سازی محتواهای dir1 با dir2 در همان سیستم داریم:
php
rsync -r dir1/ dir2
گزینه -r به معنای حالت بازگشتی است که برای هماهنگ‌سازی دایرکتوری‌ها موردنیاز خواهد بود. در همین حال می‌توانیم از گزینه -a نیز استفاده کنیم.
php
rsync -a dir1/ dir2
گزینه -a به صورت ترکیبی است و مخفف واژه «آرشیو» است. این گزینه هماهنگ‌سازی را به صورت بازگشتی انجام می‌دهد و در همین حال، لینک‌های سیمبلیک، فایل‌های ویژه و دستگاهی، زمان‌های ویرایش، گروه، مالک و مجوّزها را حفظ می‌کند. این گزینه معمولاً بیشتر از گزینه -r مورد استفاده قرار می‌گیرد و کارآیی بیشتری نیز دارد.

نکته مهم

شاید متوجه یک علامت اسلش (/) در پایان اولین آرگومان در فرمان‌های بالا شده‌اید.
php
rsync -a dir1/ dir2
این علامت برای اشاره به محتواهای dir است. در غیر این صورت و بدون استفاده از اسلش، دایرکتوری dir1 درون دایرکتوری dir2 قرار می‌گیرد.
php
~/dir2/dir1/
همیشه قبل از اجرای یک فرمان rsync، به شرایط آرگومان‌ها دقت کنید. ابزار Rsync با استفاده از یکی از گزینه‌های -n یا --dry-run این کار را برایتان انجام خواهد داد. همچین گزینه -v برای به‌دست آوردن یک نتیجه مناسب ضروری است.
php
rsync -anv dir1/ dir2
خروجی
php
sending incremental file list./file1file10file100file11file12file13file14file15file16file17file18. . .
این نتایج را با حالت عدم‌استفاده از اسلش مقایسه کنید.
php
rsync -anv dir1 dir2
خروجی
php
sending incremental file listdir1/dir1/file1dir1/file10dir1/file100dir1/file11dir1/file12dir1/file13dir1/file14dir1/file15dir1/file16dir1/file17dir1/file18. . .
در اینجا مشاهده می‌کنید که دایرکتوری انتقال پیدا کرده است.

نحوه استفاده از ابزار Rsync برای هماهنگ‌سازی با یک سیستم ریموت

در صورتی که با ssh به یک سیستم ریموت دسترسی دارید و ابزار Rsync در هر دو طرف نصب است، بدیهی است که باید هماهنگ‌سازی را با سرور ریموت انجام دهید. با استفاده از قالب زیر می‌توانید فولدر نمونه dir1 را با یک کامپیوتر ریموت هماهنگ کندی. به خاطر داشته باشید که در اینجا می‌خواهیم دایرکتوری را واقعاً انتقال دهیم و بنابراین علامت اسلش را حذف کرده‌ایم.
php
rsync -a ~/dir1 username@remote_host:destination_directory
به این فرمان “push” نیز گفته می‌شود؛ چرا که باعث انتقال یک دایرکتوری در سیستم محلی به سیستم ریموت می‌شود. برعکس این فرمان، “pull” نام دارد. چنین فرمانی برای هماهنگ‌سازی یک دایرکتوری ریموت با سیستم محلی به کار می‌رود. در صورتی که dir1 به جای سیستم محلی، در سیستم ریموت قرار داشته باشد، قالب فرمان به صورت زیر خواهد بود.
php
rsync -a username@remote_host:/home/username/dir1 place_to_sync_on_local_machine
همانند cp و ابزارهای مشابه، منبع همیشه اولین آرگومان است و مقصد در جایگاه دوم می‌آید.

گزینه‌های مفید برای Rsync

ابزار Rsync حاوی گزینه‌های متعددی برای تغییر عملکرد پیش‌فرض است. البته ما در سطور بالا اکثر گزینه‌های ضروری را مرور کرده‌ایم. در صورتی که فایل‌های انتقالی شما از نوع فشرده نباشند (مانند فایل‌های متنی)، می‌توانید با گزینه -z و اضافه‌کردن فشرده‌سازی، از پهنای باند مصرفی در شبکه کم کنید.
php
rsync -az source destination
گزینه -P نیز بسیار مفید است و باعث ترکیب دو گزینه --progress و --partial می‌شود. گزینه --progress باعث اضافه شدن نوار وضعیت پیشرفت فرآیند انتقال می‌شود و گزینه --partial نیز به شما اجازه می‌دهد که انتقال‌های مختل‌شده را دوباره از سر بگیرید.
php
rsync -azP source destination
خروجی
php
sending incremental file list./file10 100%    0.00kB/s    0:00:00 (xfer#1, to-check=99/101)file100 100%    0.00kB/s    0:00:00 (xfer#2, to-check=98/101)file1000 100%    0.00kB/s    0:00:00 (xfer#3, to-check=97/101)file110 100%    0.00kB/s    0:00:00 (xfer#4, to-check=96/101). . .
در صورتی که این فرمان را دوباره اجرا کنید، یک خروجی کوتاه‌تر دریافت خواهید کرد. چرا که در این حالت۷ هیچ‌گونه تغییری ایجاد نمی‌شود. این قابلیت ابزار Rsync در استفاده از زمان‌های ویرایش برای تشخیص انجام تغییرات است.
php
rsync -azP source destination
خروجی
php
sending incremental file listsent 818 bytes received 12 bytes 1660.00 bytes/sectotal size is 0 speedup is 0.00
امکان بروزرسانی زمان ویرایش در برخی از فایل‌ها وجود دارد و خواهیم دید که ابزار Rsync به شکلی هوشمندانه، تنها فایل‌هایی را که تغییر داده شده‌اند، کپی می‌کند.
php
touch dir1/file{1..10}rsync -azP source destination
خروجی
php
sending incremental file listfile10 100%    0.00kB/s    0:00:00 (xfer#1, to-check=99/101)file100 100%    0.00kB/s    0:00:00 (xfer#2, to-check=98/101)file20 100%    0.00kB/s    0:00:00 (xfer#3, to-check=87/101)file30 100%    0.00kB/s    0:00:00 (xfer#4, to-check=76/101). . .
برای حفظ هماهنگی واقعی بین دو دایرکتوری، باید فایل‌هایی را که در منبع حذف شده‌اند، حتماً از دایرکتوری مقصد نیز حذف شوند. ابزار Rsync به صورت پیش‌فرض، چیزی را از دایرکتوری مقصد حذف نمی‌کند. می‌توانیم با استفاده از فرمان --delete این رفتار را تغییر دهیم. قبل از استفاده از این گزینه، با کمک گزینه --dry-run آزمایشی کار کنید تا از دست رفتن داده‌ها جلوگیری شود.
php
rsync -a --delete source destination
اگر بخواهید برخی فایل‌ها یا دایرکتوری‌های خاص را درون دایرکتوری موردنظرتان برای هماهنگ‌سازی حذف کنید، می‌توانید آنها در قالب لیست با جداسازی علامت کاما وارد نمایید.
php
rsync -a --exclude=pattern_to_exclude source destination
اگر الگوی خاصی برای حذف دارید، می‌توانید حذف فایل‌های مطابق را با استفاده از گزینه --include=انجام دهید.
php
rsync -a --exclude=pattern_to_exclude --include=pattern_to_include source destination
نهایتاً گزینه --backup در ابزار Rsync می‌تواند برای ذخیره نسخه‌های پشتیبان فایل‌های مهم مورد استفاده قرار گیرد. این گزینه در کنار گزینه --backup-dir مورد استفاده قرار می‌گیرد که مشخص‌کننده دایرکتوری ذخیره فایل‌های پشتیبان خواهد بود.
php
rsync -a --delete --backup --backup-dir=/path/to/backups /path/to/source destination

جمع‌بندی

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