آموزش‌های سرور مجازی

راهنمای عملی دستور Rsync (به همراه مثال های کاربردی)

راهنمای عملی و کامل دستور rsync

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

آنچه در این مطلب می‌خوانید:

مزیت های استفاده از Rsync نسبت به روش های CP و SCP

  • دستور Rsync بهترین و موثرترین روش برای کپی و همگام سازی فایل ها و دایرکتوری ها از یک سیستم به دیگری است.
  • پشتیبانی کامل از لینک ها و دیوایس ها و ownerها و گروه ها و پرمیشن ها
  • این دستور سریعتر از SCP است (SCP همان Secure Copy است)
  • به علت فشرده سازی فایل ها در مبدا و مقصد دستور Rsync کمترین میزان پهنای باند را استفاده میکند.

نکته : علت سرعت بالای rsync استفاده از پروتکل remote-update است. با استفاده از این پروتکل فقط خط های متفاوت انتقال پیدا میکند. دراولین انتقال Rsync تمام محتوای یک فایل یا یک دایرکتوری را کپی می کند اما از دفعات بعد، تنها خط ها و بایت های تغییریافته را به مقصد کپی خواهد کرد.

آموزش استفاده و کار کردن با دستور Rsync

امکانات زیادی برای استفاده از دستور rsync وجود دارد؛ استفاده از آنها کاملا سلیقه ای بوده و هرکس با توجه به نیاز خود میتواند از آن ها استفاده کند. لازم به ذکر است برخی دستورات در rsync میتواند یک حرفی و یا چند حرفی باشد؛ به عنوان مثال اجرای rsync -a نتیجه ای مشابه با rsync -rlptgoD خواهد داد. نکته دیگری که باید مراقب بود استفاده از دستور rsync هنگام کپی کردن فرمان ها از سایت ها و یا فروم های موجود در اینترنت است، بخصوص زمانی که با دستور مورد نظر آشنایی کامل ندارید. اگر به یاد داشته باشید هنگام استفاده از ویندوز با زدن کلید f1 صفحه راهنمای مربوطه برای شما باز می شود. برای آشنایی بیشتر با دستور rsync میتوانید با استفاده از دو فرمان زیر راهنمای این دستور را مشاهده نمایید

man rsync
rsync –help

ساختار اساسی یک دستور rsync شبیه به CP و SCP است.

rsync -[options] source destination

اگر چندین مقصد برای انتقال مورد نظر شماست، باید آن ها را به انتهای فرمان خود اضافه کنید.

rsync -[options] source destination1 destination2 destination3

در ادامه جزئیات و 10 فرمان مفید و پرکاربرد دستور rsync برای شما بیان خواهد شد.

مطالعه کنید:  مقایسه انواع هارد

امکانات رایج در دستور rsync

-v

ابتدای کلمه verbose که برای توضیحات بیشتر در دستور rsync از این آپشن استفاده می شود.

-r

ابتدای کلمه recursive که داده ها را به صورت بازگشتی کپی میکند.

  • نکته: این آپشن پرمیشن و timestamp ها را در حال انتقال دیتا حفظ نمی کند.
-a

به کلمه archive اشاره دارد و مد آرشیو تمام فایل ها را به صورت بازگشتی کپی می کند

  • نکته: این آپشن لینک های سیمبولیک و پرمیشن فایل ها و user & group ownership و timestamp ها را حفظ می کند.
-z

میتوان گفت که به کلمه zip اشاره دارد و مسئولیت فشرده سازی فایل ها را بر عهده دارد.

-h

منظور کلمه human-readable است که مسئولیت خوانا کردن داده ها را برای انسان برعهده دارد.

آپشن ها و امکانات بسیار زیادی در دنیای لینوکس وجود دارد؛ اگر تمایل به یادگیری بیشتر درباره این موضوع دارید میتوانید به لینک زیر مراجعه نمایید:

https://www.computerhope.com/unix/rsync.htm

بررسی پرکاربردترین حالات دستور rsync

با استفاده از فرمان rsync میتوان کارهای زیادی انجام داد که در زیر به بررسی پرکاربردترین آنها پرداخته می شود. قبل از هرچیز باید دستور rsync در سیستم عامل شما فعال باشد.

نصب rsync در سیستم عامل لینوکس

ممکن است در برخی از توزیع های لینوکس دستور rsync نصب نباشد؛ در اینگونه مواقع با استفاده از فرمان زیر به راحتی به نصب این دستور اقدام می شود :

#yum install rsync (On Red Hat based systems)

#apt-get install rsync (On Debian based systems)

 

کپی کردن و همگام سازی فایل ها و دایرکتوری ها روی یک سیستم محلی (local)

کپی کردن و همگام سازی یک فایل بر روی یک سیستم محلی (local)

با دستور زیر یک فایل از یک مسیر به مسیر دیگر کپی و همگام سازی می شود. در این مثال فایلی به نام backup.tar به مسیر/tmp/backups/ کپی و sync شد. لازم به ذکر است در این مثال فرض شده است که مسیر مقصد وجود ندارد، در چنین مواردی فرمان rsync مسیر ذکر شده در دستور را به وجود خواهد آورد.

[root@linux-zone]# rsync -zvh backup.tar /tmp/backups/

created directory /tmp/backups

backup.tar

sent 14.71M bytes  received 31 bytes  3.27M bytes/sec

total size is 16.18M  speedup is 1.10

کپی کردن و همگام سازی یک دایرکتوری بر روی یک سیستم محلی (local)

با استفاده از دستور زیر میتوان تمام فایل های موجود در یک دایرکتوری را به دایرکتوری جدیدی در همان سیستم کپی و همگام سازی کرد. در این مثال دایرکتوری /root/rpmpkgs شامل برخی فایل های rpm می باشد که می بایست به دایرکتوری /tmp/backups/ کپی شود.

[root@linux-zone]# rsync -avzh /root/rpmpkgs /tmp/backups/

sending incremental file list

rpmpkgs/

rpmpkgs/httpd-2.2.3-82.el5.centos.i386.rpm

rpmpkgs/mod_ssl-2.2.3-82.el5.centos.i386.rpm

rpmpkgs/nagios-3.5.0.tar.gz

rpmpkgs/nagios-plugins-1.4.16.tar.gz

sent 4.99M bytes  received 92 bytes  3.33M bytes/sec

total size is 4.99M  speedup is 1.00

 

مطالعه کنید:  آموزش نصب ویندوز در سرورهای ابری

کپی کردن و همگام سازی فایل ها و دایرکتوری ها به/ از یک سرور

کپی کردن یک دایرکتوری از سرور محلی به یک سرور ریموت:

دستور زیر یک دایرکتوری را از یک سیستم محلی به یک سرور ریموت کپی و همگام سازی می شود. در این مثال فایلی به نام rpmpkgs.tar در کامپیوتر شما، شامل یک سری فایل rpm به مسیری مشخص در یک سرور ریموت که از شما دور استکپی و sync می شود.

[root@tecmint]$ rsync -avz rpmpkgs/ root@192.168.0.101:/home/

root@192.168.0.101's password:

sending incremental file list

./

httpd-2.2.3-82.el5.centos.i386.rpm

mod_ssl-2.2.3-82.el5.centos.i386.rpm

nagios-3.5.0.tar.gz

nagios-plugins-1.4.16.tar.gz

sent 4993369 bytes  received 91 bytes  399476.80 bytes/sec

total size is 4991313  speedup is 1.00

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

این دستور به شما کمک می کند یک دایرکتوری ریموت به یک دایرکتوری محلی کپی و همگام سازی شود. در این مثال، دایرکتوری /home/tarunika/rpmpkgs برروی یک سیستم راه ور(remote) می باشد. توسط دستور زیر به دایرکتوری /tmp/myrpms در سیستم محلی شما کپی خواهد شد.

[root@linux-zone]# rsync -avzh root@192.168.0.100:/home/tarunika/rpmpkgs /tmp/myrpms

root@192.168.0.100's password:

receiving incremental file list

created directory /tmp/myrpms

rpmpkgs/

rpmpkgs/httpd-2.2.3-82.el5.centos.i386.rpm

rpmpkgs/mod_ssl-2.2.3-82.el5.centos.i386.rpm

rpmpkgs/nagios-3.5.0.tar.gz

rpmpkgs/nagios-plugins-1.4.16.tar.gz

sent 91 bytes  received 4.99M bytes  322.16K bytes/sec

total size is 4.99M  speedup is 1.00

rsync تحت SSH

یکی از موارد استفاده rsync انتقال دیتا از SSH است، همانطور که می دانید استفاده از پروتکل SSH باعث افزایش امنیت فایل های شما هنگام انتقال می شود.

کپی کردن یک فایل از یک سرور ریموت به یک سرور محلی با SSH

برای مشخص کردن یک پروتکل با rsync نیاز به استفاده از آپشن –e به همراه نام پروتکل است. در این مثال، آپشن –e برای استفاده از پروتکل SSH استفاده شده است.

[root@linux-zone]# rsync -avzhe ssh root@192.168.0.100:/root/install.log /tmp/

root@192.168.0.100's password:

receiving incremental file list

install.log

sent 30 bytes  received 8.12K bytes  1.48K bytes/sec

total size is 30.74K  speedup is 3.77

ب) کپی کردن یک فایل از یک سرور محلی به یک سرور راه دور با SSH

[root@linux-zone]# rsync -avzhe ssh backup.tar root@192.168.0.100:/backups/

root@192.168.0.100's password:

sending incremental file list

backup.tar

sent 14.71M bytes  received 31 bytes  1.28M bytes/sec

total size is 16.18M  speedup is 1.10

 

نمایش پیشرفت در حال انتقال دیتا با rsync

برای نمایش پیشرفت در حال انتقال دیتا از یک سیستم به سیستم دیگر، ما می توانیم از آپشن –progress استفاده کنیم. این آپشن تمام فایل ها و زمان باقی مانده برای کامل شدن انتقال را نشان خواهد داد.

[root@linux-zone]# rsync -avzhe ssh --progress /home/rpmpkgs root@192.168.0.100:/root/rpmpkgs

root@192.168.0.100's password:

sending incremental file list

created directory /root/rpmpkgs

rpmpkgs/

rpmpkgs/httpd-2.2.3-82.el5.centos.i386.rpm

1.02M 100%        2.72MB/s        0:00:00 (xfer#1, to-check=3/5)

rpmpkgs/mod_ssl-2.2.3-82.el5.centos.i386.rpm

99.04K 100%  241.19kB/s        0:00:00 (xfer#2, to-check=2/5)

rpmpkgs/nagios-3.5.0.tar.gz

1.79M 100%        1.56MB/s        0:00:01 (xfer#3, to-check=1/5)

rpmpkgs/nagios-plugins-1.4.16.tar.gz

2.09M 100%        1.47MB/s        0:00:01 (xfer#4, to-check=0/5)

sent 4.99M bytes  received 92 bytes  475.56K bytes/sec

total size is 4.99M  speedup is 1.00

 

استفاده ازگزینه ی -include و-exclude

این دو گزینه به ما امکان include و exclude فایل ها توسط پارامتر های بخصوص را می دهد، به کمک exclude از کپی و همگام سازی شدن فایل هایی که نمیخواهیم جلوگیری کنیم و به کمک include آن فایل ها و یا دایرکتوری ها را شامل تغییرات وهمگام سازی کنیم

در این مثال، دستورrsync تمام فایل ها و دایرکتوری هایی را که با R شروع شده اند را include کرده و بقیه را exclude می کند.

[root@linux-zone]# rsync -avze ssh --include 'R*' --exclude '*' root@192.168.0.101:/var/lib/rpm/ /root/rpm

root@192.168.0.101's password:

receiving incremental file list

created directory /root/rpm

./

Requirename

Requireversion

sent 67 bytes  received 167289 bytes  7438.04 bytes/sec

total size is 434176  speedup is 2.59

 

مطالعه کنید:  نحوه اتصال به سرور مجازی ویندوز

استفاده ازگزینه ی -delete

گاها حالتی پیش می آید که یک فایل یا دایرکتوری در مبدا وجود نداشته باشد، اما پیش از این در مقصد بوده است. اگربخواهید فایل یا دایرکتوری موجود را در حین همگام سازی حذف کنید می توانید از آپشن –delete برای فایل هایی که در دایرکتوری مبدا وجود ندارند استفاده کنید. مبدا و مقصد همگام هستند. حالا فایل جدید test.txt را در مقصد ایجاد کنید.

[root@linux-zone]# touch test.txt

[root@linux-zone]# rsync -avz --delete root@192.168.0.100:/var/lib/rpm/ .

Password:

receiving file list ... done

deleting test.txt

./

sent 26 bytes  received 390 bytes  48.94 bytes/sec

total size is 45305958  speedup is 108908.55

تنظیم Maximum فایل ها برای انتقال

ماکزیمم سایز فایل برای انتقال یا همگام سازی قابل نتظیم و کنترل است. شما می توانید با استفاده از گزینه ی max-size این کار را انجام دهید. در این مثال، ماکزیمم سایز فایل 200k است؛ بدین ترتیب تنها فایلهایی را که برابر یا کوچکتر از 200k هستند انتقال داده خواهند شد.

[root@linux-zone]# rsync -avzhe ssh --max-size='200k' /var/lib/rpm/ root@192.168.0.100:/root/tmprpm

root@192.168.0.100's password:

sending incremental file list

created directory /root/tmprpm

./

Conflictname

Group

Installtid

Name

Provideversion

Pubkeys

Requireversion

Sha1header

Sigmd5

Triggername

__db.001

sent 189.79K bytes  received 224 bytes  13.10K bytes/sec

total size is 38.08M  speedup is 200.43

حذف اتوماتیک فایل های مبدا بعد از انتقال موفق

اکنون فرض کنید که شما یک وب سرور و یک سرور پشتیبان دارید، شما یک پشتیبان گیری و همگام سازی روزانه با سرور پشتیبان تان ایجاد کرده اید، حالا نمی خواهید که کپی از پشتیبانی که گرفته اید را روی همان وب سرور خود نگه دارید. بنابراین بجای منتظر ماندن تکمیل عملیات انتقال بکاپ گیری فایل روی سرور اصلی آن هم بصورت دستی؛ این حذف می تواند به صورت اتوماتیک با استفاده از گزینه ی –remove-source-files انجام شود.

[root@linux-zone]# rsync --remove-source-files -zvh backup.tar /tmp/backups/

backup.tar

sent 14.71M bytes  received 31 bytes  4.20M bytes/sec

total size is 16.18M  speedup is 1.10

[root@linux-zone]# ll backup.tar

ls: backup.tar: No such file or directory

اجرای آزمایشی دستورrsync

اگر شما یک تازه وارد هستید و از rsync استفاده می کنید و نمی دانید دقیقا این دستور چه کار می کند باید بگویم که Rsync واقعا می تواند فولدر مقصد را به هم بریزد و متعاقبا برگرداندن اطلاعات با undo هم کار خسته کننده ای است.

استفاده از این گزینه هیچ تغییراتی را اعال نخواهد کرد و تنها دستور rsync را به صورت آزمایشی انجام داده و خروجی دستور را نشان می دهد، اگر خروجی همان چیزی باشد که شما می خواهید انجام شود، شما می توانید باز هم از همان دستور و این بار با حذف گزینه ی –dry-run استفاده کنید.

root@linux-zone]# rsync --dry-run --remove-source-files -zvh backup.tar /tmp/backups/

backup.tar

sent 35 bytes  received 15 bytes  100.00 bytes/sec

total size is 16.18M  speedup is 323584.00 (DRY RUN)

تنظیم محدودیت پهنای باند و انتقال فایل

شما می توانید برای انتقال داده ها از یک ماشین یه ماشین دیگر محدودیت پهنای باند تنظیم کنید، با استفاده از آپشن –bwlimit این کار را انجام دهید. این گزینه برای محدود کردن پهنای باندI/O به ما کمک می کند.

[root@linux-zone]# rsync --bwlimit=100 -avzhe ssh  /var/lib/rpm/  root@192.168.0.100:/root/tmprpm/

root@192.168.0.100's password:

sending incremental file list

sent 324 bytes  received 12 bytes  61.09 bytes/sec

total size is 38.08M  speedup is 113347.05

همچنین، به صورت پیش فرض rsync   بلاک ها و بایت ها را تغییر می دهد، اگر شما می خواهید صریحا همگام سازی همه ی فایل ها را انجام دهید از گزینه ی –W با آن استفاده کنید.

[root@linux-zone]# rsync -zvhW backup.tar /tmp/backups/backup.tar

backup.tar

sent 14.71M bytes  received 31 bytes  3.27M bytes/sec

total size is 16.18M  speedup is 1.10

 

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

تیم تولید محتوای گنجه

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

نوشته های مشابه

‫4 نظرها

  1. سلام بعد از اینکه از دستور ارسینک استفاده کردم خطای permission denied, please try again. داد ، ممنون میشم راهنمایی کنید

    1. برای حل این مورد باید پورت هر دو سرور در یک دیگر باز باشد، به عنوان مثال اگر پورت سرور مبدا x و پورت سرور مقصد y است، باید پورتهای x و y در هر دو سرور باز باشد ؛ مورد دومی که باید به آن توجه کرد اینکه مقدار PermitRootLogin برابر yes باشد ؛ برای تغییر باید به مسیر زیر رفته و فایل را ادیت نمایید :
      /etc/ssh/sshd_config

      توجه داشته باشید بعد از اینکه مقدار PermitRootLogin را اصلاح نمودید حتما کارکتر # که در ابتدای خط قرار دارد حذف نمایید.

  2. اگر مثلا بخواهیم از دستور زیر در یک سرور استفاده کنم ، و فولدری را از یک سرور دیگر بگیرم (سینک کنم) و این کار را با کرون جاب انجام دهم نیاز است که هربار پسورد را وارد نکنم ، چگونه این کار را انجام دهم ؟

    [root@linux-zone]# rsync -avzhe ssh –max-size=’200k’ /var/lib/rpm/ root@192.168.0.100:/root/tmprpm

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا