مقدمه
Rsync مخفف remote sync است و ابزاری است برای همگامسازی فایلهای ریموت و لوکال در سرور مجازی. آرسینک از الگوریتمی استفاده میکند که فقط قسمتهایی از فایلها که تغییر کردهاند را جابهجا میکند و با این روش مقدار دیتای کپیشده را به حداقل میرساند.
در این راهنما کاربردهای اصلی آرسینک را خواهیم گفت و استفاده از آرسینک برای سینک دایرکتوری های لوکال و ریموت در سرور مجازی را آموزش خواهیم داد.
در مثالها از سرور مجازی با سیستمعامل Ubuntu 12.04 استفاده خواهیم کرد ولی شما میتوانید از هرکدام از توزیعهای جدید لینوکس که خواستید استفاده کنید.
آرسینک چیست؟
آرسینک یک ابزار منعطف با قابلیت اتصال به شبکه برای سینک کردن است. البته لغت Rsync ممکن است به نوعی از پروتکل شبکه که برای استفاده از آرسینک بهبود و تغییر یافته است نیز اشاره کند.
در این مقاله وقتی میگوییم آرسینک، بیشتر به این ابزار اشاره داریم نه به پروتکل.
از آنجا که بر روی همهی سیستمهای لینوکس و شبهیونیکس هست و بهعنوان ابزاری برای اسکریپتهای سیستم بسیار محبوب است، در اکثر توزیعهای لینوکس به صورت پیشفرض قرار داده شده است.
دستور پایه
دستور پایهی آرسینک خیلی سرراست است و به روشی شبیه ssh ، scp و cp عمل میکند.
با فرمانهای (command) زیر، دو تستدایرکتوری و چند تستفایل ایجاد خواهیم کرد:
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 مخفف recursive بهمعنای بازگشتی است و برای سینک دایرکتوری لازم است.
همچنین میتوانیم بهجای آن از فِلَگ (پرچم) –a استفاده کنیم:
rsync -a dir1/ dir2
آپشن –a یک پرچم ترکیبی است. مخفف آرشیو (archive) است و بهصورت بازگشتی سینک میکند و پیوندهای نمادین (سمبولیک لینک)، فایلهای دستگاهی (دیوایس فایل) و فایلهای ویژه (اسپشل فایل)، mtime ها (زمان اصلاح)، گروه، مجوزها (permission) و مالک (owner) را نگه میدارد.
استفاده از این آپشن، معمولتر از –r است و معمولاً همان چیزی است که میخواهید استفاده کنید.
یک نکته مهم
شاید متوجه شده باشید که در فرمانهای بالا یک بکاسلش در آخر اولین آرگومان هست:
rsync -a dir1/ dir2
این برای رساندن منظورِ «محتویات dir1» لازم است.
روش جایگزین که بدون بکاسلش است باید dir1 را در داخل dir2 قرار دهد که اینچنین سلسلهمراتبی ایجاد میشود:
~/dir2/dir1/[files]
قبل از اینکه یک فرمان آرسینک را اجرا کنید همیشه آرگومانهایتان را چک کنید.
آرسینک روشی بهدست میدهد تا این را با گذر از آپشنهای –n و –dry-run انجام دهیم. همچنین فلگ –v (مخفف verbose) برای رسیدن به خروجی مناسب لازم است:
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
. . .
در اینجا میتوانید ببینید که خود دایرکتوری منتقل شده است.
چگونه از آرسینک برای سینک با یک سرور مجازی راه دور استفاده کنیم؟
سینک کردن به یک سرور مجازی ریموت (راه دور) مثل آب خوردن است البته اگر به سرور مجازی ریموت دسترسی SSH داشته باشید و در هر دو سمت آرسینک نصب کرده باشید. اگر میخواهید کلیدهای SSH را نصب کنید، اینجا کلیک کنید.
وقتی دسترسی SSH بین دو سیستم تایید شد میتوانید فولدر dir1 که از قبل بود را با استفاده از سینتکس زیر به کامپیوتر ریموت سینک کنید. توجه داشته باشید که اینجا میخواهیم دایرکتوری واقعی را انتقال دهیم پس بکاسلش را حذف می کنیم:
rsync -a ~/dir1 username@remote_host:destination_directory
این یک عملیات push است چون یک دایرکتوری را از سیستم بومی (لوکال) به یک سیستم ریموت هل میدهد.
برعکس آن میشود عملیات pull و از آن برای کشیدن یک دایرکتوری ریموت به یک سرور مجازی لوکال استفاده میشود. اگر dir1 به جای سرور مجازی لوکال ما بر روی سرور مجازی راهدور بود، سینتکس اینگونه می شد:
rsync -a username@remote_host:/home/username/dir1place_to_sync_on_local_machine
همچون cp و سایر ابزارهای مشابه، همیشه اولین آرگومان، منبع (source) و دومین آرگومان، مقصد (destination) است.
آپشنهای بهدردبخور برای آرسینک
آرسینک آپشنهای زیادی ارائه میکند تا با رفتار پیشفرض این برنامه کاربردی جایگزینشان کنید. بعضی از فلگهایی که لازمتر بودند را قبلاً توضیح دادیم.
اگر فایلهایی مثل فایلهای متنی (text files) را منتقل میکنید که قبلاً فشرده نشدهاند، میتوانید با اضافه کردن فشردهسازی بهوسیلهی آپشن –z ترنسفر شبکه را کاهش دهید:
rsync -azsourcedestination
فلگ –P خیلی مفید است چون فلگ –progress و فلگ –partial را ترکیب میکند. اولی به شما نوار پیشرفتِ انتقالها را میدهد و دومی امکان resume انتقالهای مختلشده را میدهد.
rsync -azPsourcedestination
sending incremental file list
./
file1
۰ ۱۰۰% ۰٫۰۰kB/s ۰:۰۰:۰۰ (xfer#1, to-check=99/101)
file10
۰ ۱۰۰% ۰٫۰۰kB/s ۰:۰۰:۰۰ (xfer#2, to-check=98/101)
file100
۰ ۱۰۰% ۰٫۰۰kB/s ۰:۰۰:۰۰ (xfer#3, to-check=97/101)
file11
۰ ۱۰۰% ۰٫۰۰kB/s ۰:۰۰:۰۰ (xfer#4, to-check=96/101)
. . .
اگر فرمان را دوباره اجرا کنیم، خروجی کوتاهتری خواهیم داشت چون هیچ تغییری داده نشده است.
این توانایی آرسینک را نشان میدهد که برای اینکه بفهمد آیا تغییری رخ داده است یا نه، از mtime ها استفاده میکند:
rsync -azPsourcedestination
sending incremental file list
sent 818 bytes received 12 bytes 1660.00 bytes/sec
total size is 0 speedup is 0.00
میتوانیم زمان اصلاح را در بعضی فایلها آپدیت کنیم و ببینیم که آرسینک بهطور هوشمندانه فقط فایلهایی که تغییر یافتهاند را ازنو کپی میکند:
touch dir1/file{1..10}
rsync -azPsourcedestination
sending incremental file list
file1
۰ ۱۰۰% ۰٫۰۰kB/s 0:00:00 (xfer#1, to-check=99/101)
file10
۰ ۱۰۰% ۰٫۰۰kB/s 0:00:00 (xfer#2, to-check=98/101)
file2
۰ ۱۰۰% ۰٫۰۰kB/s 0:00:00 (xfer#3, to-check=87/101)
file3
۰ ۱۰۰% ۰٫۰۰kB/s 0:00:00 (xfer#4, to-check=76/101)
. . .
برای اینکه دو دایرکتوری را کاملاً سینک نگه داریم، اگر فایلها از روی منبع حذف شدهاند، لازم است که فایلها را از دایرکتوری مقصد هم حذف (delete) کنیم. بهصورت پیشفرض، آرسینک هیچچیزی را از دایرکتوری مقصد حذف نمیکند.
با آپشن –delete میتوانیم این رفتار را عوض کنیم. قبل از استفاده از این آپشن، از آپشن –dry-run استفاده کنید و آزمایش کنید تا دادهای از بین نرود:
rsync -a –delete sourcedestination
اگر داخل دایرکتوریای که میخواهید سینک کنید، فایلها یا دایرکتوریهایی هستند که میخواهید مستثنی باشند، آنها را پس از آپشن –exclude= بنویسید و با کاما از هم جدا کنید:
rsync -a –exclude=pattern_to_excludesourcedestination
اگر الگویی (pattern) را مشخص کردهایم که مستثنی شود، میتوانیم برای فایلهایی که با الگویی دیگر تطابق دارند، با آپشن –include= آن استثنا را باطل کنیم.
rsync -a –exclude=pattern_to_exclude –include=pattern_to_includesourcedestination
نتیجهگیری
آرسینک میتواند انتقال فایل از ارتباطات تحت شبکه را ساده کند و به فرایند سینک کردن دایرکتوری لوکال نیرو ببخشد. انعطاف آرسینک از آن گزینهای خوب میسازد برای انواع بسیار مختلفی از عملیاتهایی در سطح فایل.
با تسلط بر آرسینک میتوانید عملیاتهای پیچیدهی بکآپ برای سرور مجازی طراحی کنید و بر چگونگی انتقال و چیزی که منتقل میشود، کنترلی دقیق و موشکافانه داشته باشید.
ترجمه شده توسط: بابک طهماسبی
۱ دیدگاه
بازخورد: راهنمای خرید سرور مجازی