راهنمای عملی دستور 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 برای انتقال فایل های حجیم بین سرورها استفاده میکنیم. چنانچه شما از کاربران خدمات سرور مجازی و یا سرور اختصاصی ما میباشید و یا میخواهید فایل های حجیمی را بین سرور های خود منتقل کنید، پیشنهاد میکنیم از این راهنما برای مقاصد خود استفاده کنید. چنانچه در استفاده از این دستور به مشکلی بر خوردید، با ما در تماس باشید تا تیم فنی گنجه هاست برای شما انتقال فایل ها را انجام دهد.
سلام بعد از اینکه از دستور ارسینک استفاده کردم خطای permission denied, please try again. داد ، ممنون میشم راهنمایی کنید
برای حل این مورد باید پورت هر دو سرور در یک دیگر باز باشد، به عنوان مثال اگر پورت سرور مبدا x و پورت سرور مقصد y است، باید پورتهای x و y در هر دو سرور باز باشد ؛ مورد دومی که باید به آن توجه کرد اینکه مقدار PermitRootLogin برابر yes باشد ؛ برای تغییر باید به مسیر زیر رفته و فایل را ادیت نمایید :
/etc/ssh/sshd_config
توجه داشته باشید بعد از اینکه مقدار PermitRootLogin را اصلاح نمودید حتما کارکتر # که در ابتدای خط قرار دارد حذف نمایید.
اگر مثلا بخواهیم از دستور زیر در یک سرور استفاده کنم ، و فولدری را از یک سرور دیگر بگیرم (سینک کنم) و این کار را با کرون جاب انجام دهم نیاز است که هربار پسورد را وارد نکنم ، چگونه این کار را انجام دهم ؟
[root@linux-zone]# rsync -avzhe ssh –max-size=’200k’ /var/lib/rpm/ root@192.168.0.100:/root/tmprpm
سلام
با استفاده از کلید های سرور میتونید اینکارو انجام بدید