بکاپ در لینوکس با استفاده از rsync
Rsync چیست؟
Rsync یک ابزار بسیار منعطف برای همگامسازی شبکههای فعال است. شما همچنین برای استفاده از این ابزار میتوانید به پروتکل توسعهیافته شبکه مراجعه کنید.
هنگامیکه ما در این مقاله به Rsyns رجوع میکنیم درواقع به سودمندی این ابزار اشاره میکنیم نه پروتکل.
با توجه به اینکه لینوکس و سیستمهای Unix-like در همه جا حضور دارند و به عنوان یک ابزار دارای اسکریپت سیستم، محبوبیت بسیاری دارند باعث شده که این مورد در اکثر توزیعهای لینوکس به صورت پیشفرض قرار داده شود.
این ابزار واسه خودش یک محیط گرافیکی هم داره به نام Grsync که توی یک مقاله دیگه اونو بررسی می کنیم.
يکي از نکات مهمی که هر SysAdmin باید به اون توجه ويژه داشته باشه بکاپ گیری از فایل ها وسیستم عامل هاست.
در محیط های سازمانی بزرگ، روش های مختلفی برای Backup گرفتن از يک سرويس هست. محيط پياده سازی هم مي تونه روي روش انتخاب شده براي بکاپ گیری تأثیر گذار باشه. به عنوان مثال اگر سرور شما در محيط هاي مجازی سازی شده راه اندازی شده باشه، اين مسئله مي تونه تأثیر زیادی روي تکنولوژي و روش انتخابي شما براي بکاپ گیری شما داشته باشه.
روش بکاپگیری که امروز مي خوايم بررسيش کنيم روشی هستش فارغ از محيط پياده سازی شما، يکي از کارامد ترین روش هاي بکاپ گرفتن از سیستم عامل هاي لينوکسی هستش به نام rsync و خيلي از نرم افزارهاي بکاپ که از محيط هاي GUI برخوردار هستند درواقع از اين همين ابزار در لايه هاي پايين تر استفاده مي کنن.
برای بکاپ گیری از سیستم به طور کامل با استفاده از rsync از دستور زیر استفاده می کنیم:
sudo rsync -aAXv / --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/mnt/*","/media/*","/lost+found"} /mnt/BACKUP
سوئیچهای پایهای Rsync بسیار ساده هستند و اجرای آنها شبیه به ssh, scp, و cp است.
خب، بریم سراغ تحلیل اين کامند:
در ابتدای دستور از sudo استفاده شده که اگه عمليات Backup گيري رو با یوزر root انجام نميديد باید زده بشه. چونکه قرار به فايلهايي دسترسی داشته باشیم که نياز به سطح دستری root داریم.
اون عبارت / که مي بينید (که قبل و بعدش هم space خورده) آدرس مبدأ هست، به اين معنا که تمامي فایل های موجود در Root Directory رو مي خوايم ازش کپی بگیریم، به استثنای Directoryهايي که exclude شده.
عبارت /mnt/BACKUP/ که مي بینید، مقصد عمليات بکاپ گیریمون هست. يعني از فايل ها، بکاپ گرفته میشه و توي اين مسیر قرار مي گیره که مي تونه یک مسیر local باشه، يک دسک mount شده باشه يا يک Directory تحت شبکه باشه…
بعد از معرفي مبدأ بکاپگیری، از آپشن exclude استفاده شده که از اهميت بسیار بالايي برخوردار هست. از اين directory هاي نباید بکاپ گرفته بشه که مورد به مورد بررسیشون مي کنيم:
مسیر /media/ مسیری هست که معمولا به عنوان mount point دیفالت براي مدياهاي usb و… ازش استفاده می شه که قرار نیست از محتويات اين مدياهاي خارجي بکاپ گرفته بشه. براي مسیر /mnt/ هم به همين صورت.
مسیر /lost+found/ براي ذخیره فايل هاي Corrupted و فايل هايي که دچار مشکل شدن توسط سیستم عامل مورد استفاده قرار مي گیرن، که هم خيلي به درد نمي خورن و هم اين که بعضي وقتا سيستم عامل، اين فايل هارو نمي تونه بخونه. اگه یه همچين فايلي در اين مسیر وجود داشته باشه، عمليات rsync با مشکل مواجه میشه.
مسیر هاي /dev/ و /proc/ و /sys/ شامل فايل هايي هستند که واقعا فايل نیستن و اصطلاحاً pseudo file هستند. اين فایل ها نماينده هايي هستند براي سخت افزارتون، processهايي که توسط cpu سیستم در حال اجرا هستند و… از اين فايل ها هم نبايد بکاپ گرفته بشه چرا که سیستم عامل در زمان boot شدن اين فايل ها رو ايجاد مي کنه و محتوياتش تغيير خواهد کرد.
مسیر /tmp/ هم که شامل فايل هاي موقتي هستند که توسط سیستم عامل ايجاد مي شن و ارزش بکاپ گیری ندارن.
حالا شما با توجه به خصوصياتي که سرورتون داره ممکنه نياز باشه یه سری مسیرهارو به قسمت exclude اضافه بکنید مثل /var/ يا مسیری که DB توش دارید و…
توجه داشته باشید که عبارت
" --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/mnt/*","/media/*","/lost+found"} "
رو می تونید به صورت زیر هم بنویسید:
--exclude=/dev/* --exclude=/proc/* --exclude=/sys/* --exclude=/tmp/* --exclude=/mnt/* --exclude=/media/* --exclude=/lost+found
و هيچ تفاوتی باهم ندارن.
خب، حالا بریم سراغ چهارتا آپشن aAXv و چند تا آپشن دیگه که مي تونيد ازشون استفاده کنین:
v- که مخفف verbose هست آپشنی هست که باعث میشه در زمان اجرای دستور بهتون خروجي بيشتری نمايش داده بشه.
a- باعث میشه که Attributeهاي اصلي فايل ها (مثل Permissionها، ownerها و…)، در عمليات کپی تغيير نکنه و ثابت باقي بمونه.
A- باعث میشه که اگه رو فايل هاتون ACL دارید، مقادرش در عمليات کپی تغيير نکنه و ثابت باقي بمونه.
X- باعث میشه مقادیر Extended Attributeهاي فايل هاتون در عمليات کپی تغيير نکنه و ثابت باقي بمونه.
چندتا Option مفید ديگه هم مي تونيد ازش استفاده کنید در ادامه توضیح مي دم:
اگه فايلي دارید که حجمش زیاد هست و زمان کپي کردنش طول مي کشه مي تونيد از Progress– استفاده کنید. اين آپشن باعث مي شه که درصد کپي شده فايل نمايش داده بشه.
با استفاده از آپشن dry-run– قبل از اينکه عمليات بکاپتون رو انجام بديد مي تونيد کامندي که زدید رو و شرايط موجود رو تست کنيد بدون اينکه عمليات بکاپ گیری رو انجام بدید.
delete– يک آپشن خيلي مهم در rsync محسوب مي شه که با استفاده از اون عمليات بکاپ به صورت Incremental انجام می شه. یعنی فایل هاي جديد که در مبدأ تشکيل شدند رو در مقصد کپی مي کنه و فايل هايي که در مبدأ تغيير کردن رو مياد Overwrite مي کنه. اگه فايلي هم در مبدأ پاک شده باشه، مياد و اون فايل رو از مقصد هم پاک مي کنه.
چگونه از rsync برای همگامسازی یک Remote system استفاده کنیم؟
همگامسازی به یک Remote system بسیار واضح و بدیهی است اگر دسترسی SSH به یک remote machine داشته باشید و Rsync درهر دو سمت نصب شده باشد. اگر نیاز به راهاندازی کلید SSH دارید set up SSH keys را کلیک کنید.
هنگامیکه شما دسترسی SSH بین دو ماشین دارید، میتوانید قبل از remote computer با استفاده از syntax همگام سازی کنید ( توجه داشته باشید که ما میخواهیم دایرکتوریهای واقعی را در این مورد انتقال دهیم، بنابراین / را حذف می کنیم).
$ sudo rsync -a ~/dir1 username@remote_host:destination_director
این کار Push عملیات نامیده میشود چون دایرکتوری را از یک سیستم Local به یک Remote سیستم فشار (Push) میدهد.
pull” عملیات مخالف با Push است. عمل Pull برای همگامسازی یک دایرکتوری از Remote سیستم به یک سیستم Local است. اگر dir1 به جای سیستم Local بر روی Remote سیستم قرار داشته باشد Syntax به صورت زیر است:
$ sudo rsync -a username@remote_host:/home/username/dir1 place_to_sync_on_local_machine
مانند CP و ابزارهای مشابه، اولین آرگومان به عنوان مبدا و دومین آرگومان مقصد است.
چند نکنه
نکته اول اينکه خیلی از نرم افزارهاي بکاپ هستن که خروجي هر کدوم از بکاپ هايي مي گیرن يک (یا حالا دو سه تا) فايله.
Rsync اين طوری نیست. Rsync مياد و از تک تک فايل هاتون کپي مي گیره و شما به تمام فايل ها به صورت مستقیم دسترسی داريد. این نکته مي تونه مزايا و معايبی داشته باشه که باید مد نظر قرار بدید.
نکته دوم هم اين که rsync به Disk Layout شما کاری نداره و صرفا مياد و فايل هارو از مبدأ به مقصد کپی مي کنه و کاری نداره که مبدأ شما از چه Partitionهايي تشکیل شده. براي سیستم هاي تک پارتیشن اين مسئله مهم نيست ولي زماني که شما چندتا پارتیشن دارید، LVM دارید و… در زمان بازگرداني بکاپ بايد حتما به اين نکته توجه داشته باشید. پس قبل از بازگردانی باید Disk Layout رو به شکلي که باید تغيير بدید.
نکته سوم اینکه encrypt کردن بکاپ ها می تونه مزیت های امنيتي بالايي به همراه داشته باشه.
نکته بعدي اين که اگر مي خوايد از سیستم عاملتون در چندین State بکاپ داشته باشید، یا باید آدرس مقصد رو در بکاپهاتون تغيير بديد يا گزینه بهتر اين که بکاپ قبلی رو یه جا کپی کنید و از سیستمتون نسبت به بکاپ کپی شده Incremental بکاپ بگیرید (استفاده از rsync با آپشن delete–)
نکته مهم بعدي اين که حتما هر از چند گاهی (يا حد اقل يک بار) بکاپ هارو بازگردانی کنید تا از صحت اونها اطمينان حاصل کنید.
نکته اخر هم اين که به rsync به عنوان به ابزار copy فايل نگاه کنید که Optionهاي زیادی داره. اصن یکی از کاربردهای مهم rsync کپي فايل هاست ولي اين رو هم بدونيد که براي بکاپ گيري يکي سیستم عامل های لینوکسی از مهم ترین ابزارها محسوب میشه.
پیروز و سربلند باشید…