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

در این مطلب آموزشی، برخی ویژگی‌های پایه این ابزار قدرتمند را مرور می‌کنیم.

ابزار Rsync چیست؟

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

الگوی پایه

قالب پایه ابزار Rsync بسیار ساده و قابل‌فهم است و عملکردی مشابه ssh، scp و cp دارد.

ابتدا با استفاده از فرمان‌های زیر دو دایرکتوری و تعدادی فایل‌های آزمایشی ایجاد می‌کنیم.


cd ~

mkdir dir1

mkdir dir2

touch dir1/file{1..100}

حالا یک دایرکتوری با نام dir1 داریم که تعداد ۱۰۰ فایل خالی در آن قرار گرفته‌اند.


ls dir1

خروجی


file1    file18  file27  file36  file45  file54  file63  file72  file81  file90

file10   file19  file28  file37  file46  file55  file64  file73  file82  file91

file100  file2   file29  file38  file47  file56  file65  file74  file83  file92

file11   file20  file3   file39  file48  file57  file66  file75  file84  file93

file12   file21  file30  file4   file49  file58  file67  file76  file85  file94

file13   file22  file31  file40  file5   file59  file68  file77  file86  file95

file14   file23  file32  file41  file50  file6   file69  file78  file87  file96

file15   file24  file33  file42  file51  file60  file7   file79  file88  file97

file16   file25  file34  file43  file52  file61  file70  file8   file89  file98

file17   file26  file35  file44  file53  file62  file71  file80  file9   file99

همچنین یک دایرکتوری خالی با نام dir2 خواهیم داشت. به منظور هماهنگ‌سازی محتواهای dir1 با dir2 در همان سیستم داریم:


rsync -r dir1/ dir2

گزینه -r به معنای حالت بازگشتی است که برای هماهنگ‌سازی دایرکتوری‌ها موردنیاز خواهد بود.

در همین حال می‌توانیم از گزینه -a نیز استفاده کنیم.


rsync -a dir1/ dir2

گزینه -a به صورت ترکیبی است و مخفف واژه «آرشیو» است. این گزینه هماهنگ‌سازی را به صورت بازگشتی انجام می‌دهد و در همین حال، لینک‌های سیمبلیک، فایل‌های ویژه و دستگاهی، زمان‌های ویرایش، گروه، مالک و مجوّزها را حفظ می‌کند. این گزینه معمولاً بیشتر از گزینه -r مورد استفاده قرار می‌گیرد و کارآیی بیشتری نیز دارد.

نکته مهم

شاید متوجه یک علامت اسلش (/) در پایان اولین آرگومان در فرمان‌های بالا شده‌اید.


rsync -a dir1/ dir2

این علامت برای اشاره به محتواهای dir است. در غیر این صورت و بدون استفاده از اسلش، دایرکتوری dir1 درون دایرکتوری dir2 قرار می‌گیرد.


~/dir2/dir1/[files]

همیشه قبل از اجرای یک فرمان rsync، به شرایط آرگومان‌ها دقت کنید. ابزار Rsync با استفاده از یکی از گزینه‌های -n یا –dry-run این کار را برایتان انجام خواهد داد. همچین گزینه -v برای به‌دست آوردن یک نتیجه مناسب ضروری است.


rsync -anv dir1/ dir2

خروجی


sending incremental file list

./

file1

file10

file100

file11

file12

file13

file14

file15

file16

file17

file18

. . .

این نتایج را با حالت عدم‌استفاده از اسلش مقایسه کنید.


rsync -anv dir1 dir2

خروجی


sending incremental file list

dir1/

dir1/file1

dir1/file10

dir1/file100

dir1/file11

dir1/file12

dir1/file13

dir1/file14

dir1/file15

dir1/file16

dir1/file17

dir1/file18

. . .

در اینجا مشاهده می‌کنید که دایرکتوری انتقال پیدا کرده است.

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

در صورتی که با ssh به یک سیستم ریموت دسترسی دارید و ابزار Rsync در هر دو طرف نصب است، بدیهی است که باید هماهنگ‌سازی را با سرور ریموت انجام دهید. با استفاده از قالب زیر می‌توانید فولدر نمونه dir1 را با یک کامپیوتر ریموت هماهنگ کندی. به خاطر داشته باشید که در اینجا می‌خواهیم دایرکتوری را واقعاً انتقال دهیم و بنابراین علامت اسلش را حذف کرده‌ایم.


rsync -a ~/dir1 username@remote_host:destination_directory

به این فرمان “push” نیز گفته می‌شود؛ چرا که باعث انتقال یک دایرکتوری در سیستم محلی به سیستم ریموت می‌شود. برعکس این فرمان، “pull” نام دارد. چنین فرمانی برای هماهنگ‌سازی یک دایرکتوری ریموت با سیستم محلی به کار می‌رود. در صورتی که dir1 به جای سیستم محلی، در سیستم ریموت قرار داشته باشد، قالب فرمان به صورت زیر خواهد بود.


rsync -a username@remote_host:/home/username/dir1 place_to_sync_on_local_machine

همانند cp و ابزارهای مشابه، منبع همیشه اولین آرگومان است و مقصد در جایگاه دوم می‌آید.

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

ابزار Rsync حاوی گزینه‌های متعددی برای تغییر عملکرد پیش‌فرض است. البته ما در سطور بالا اکثر گزینه‌های ضروری را مرور کرده‌ایم.

در صورتی که فایل‌های انتقالی شما از نوع فشرده نباشند (مانند فایل‌های متنی)، می‌توانید با گزینه -z و اضافه‌کردن فشرده‌سازی، از پهنای باند مصرفی در شبکه کم کنید.


rsync -az source destination

گزینه -P نیز بسیار مفید است و باعث ترکیب دو گزینه –progress و –partial می‌شود. گزینه –progress باعث اضافه شدن نوار وضعیت پیشرفت فرآیند انتقال می‌شود و گزینه –partial نیز به شما اجازه می‌دهد که انتقال‌های مختل‌شده را دوباره از سر بگیرید.


rsync -azP source destination

خروجی


sending incremental file list

./

file1

0 100%    0.00kB/s    0:00:00 (xfer#1, to-check=99/101)

file10

0 100%    0.00kB/s    0:00:00 (xfer#2, to-check=98/101)

file100

0 100%    0.00kB/s    0:00:00 (xfer#3, to-check=97/101)

file11

0 100%    0.00kB/s    0:00:00 (xfer#4, to-check=96/101)

. . .

در صورتی که این فرمان را دوباره اجرا کنید، یک خروجی کوتاه‌تر دریافت خواهید کرد. چرا که در این حالت۷ هیچ‌گونه تغییری ایجاد نمی‌شود. این قابلیت ابزار Rsync در استفاده از زمان‌های ویرایش برای تشخیص انجام تغییرات است.


rsync -azP source destination

خروجی


sending incremental file list

sent 818 bytes received 12 bytes 1660.00 bytes/sec

total size is 0 speedup is 0.00

امکان بروزرسانی زمان ویرایش در برخی از فایل‌ها وجود دارد و خواهیم دید که ابزار Rsync به شکلی هوشمندانه، تنها فایل‌هایی را که تغییر داده شده‌اند، کپی می‌کند.


touch dir1/file{1..10}

rsync -azP source destination

خروجی


sending incremental file list

file1

0 100%    0.00kB/s    0:00:00 (xfer#1, to-check=99/101)

file10

0 100%    0.00kB/s    0:00:00 (xfer#2, to-check=98/101)

file2

0 100%    0.00kB/s    0:00:00 (xfer#3, to-check=87/101)

file3

0 100%    0.00kB/s    0:00:00 (xfer#4, to-check=76/101)

. . .

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

می‌توانیم با استفاده از فرمان –delete این رفتار را تغییر دهیم. قبل از استفاده از این گزینه، با کمک گزینه –dry-run آزمایشی کار کنید تا از دست رفتن داده‌ها جلوگیری شود.


rsync -a --delete source destination

اگر بخواهید برخی فایل‌ها یا دایرکتوری‌های خاص را درون دایرکتوری موردنظرتان برای هماهنگ‌سازی حذف کنید، می‌توانید آنها در قالب لیست با جداسازی علامت کاما وارد نمایید.


rsync -a --exclude=pattern_to_exclude source destination

اگر الگوی خاصی برای حذف دارید، می‌توانید حذف فایل‌های مطابق را با استفاده از گزینه –include= انجام دهید.


rsync -a --exclude=pattern_to_exclude --include=pattern_to_include source destination

نهایتاً گزینه –backup در ابزار Rsync می‌تواند برای ذخیره نسخه‌های پشتیبان فایل‌های مهم مورد استفاده قرار گیرد. این گزینه در کنار گزینه –backup-dir مورد استفاده قرار می‌گیرد که مشخص‌کننده دایرکتوری ذخیره فایل‌های پشتیبان خواهد بود.


rsync -a --delete --backup --backup-dir=/path/to/backups /path/to/source destination

جمع‌بندی

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