زود تند سریع یه backup لینوکسی بگیریم

البته منظورم از زود تند سریع مراحل کار هست وَاِلّا بدیهی که Backup اونم از کل سیستم مخصوصا بار اول زود تند سریع نمیشه!

خب دستور های مثل dd یا dc3dd یا حتی کپی کردن فایل های مهم تو هارد دیگه یا حتی سرویس ابری از راه حل هایی هست که اکثرمون وقتی فایلامون مهم میشن ازشون استفاده میکنیم.

اما و اما !

اگر بعد از یکبار backup گرفتن از سیستم بخوایم دوباره از کل اون سیستم backup بگیریم؛
backup قبلی رو پاک میکنیم و جدیده رو جایگزین می کنیم ؟!
backup جدید رو روی یه دیسک دیگه نگه میداریم ؟!
یا میشینیم دونه دونه فایل هارو بررسی میکنیم ببینیم کدومشون تغییر کردن فقط اونارو جایگزین کنیم ؟!

راه حل اول و دوم ایراداتی داره :

  • چون دوباره باید کل اطلاعات سیستم از نو نوشته بشه (حالا یا جایگزین backup قبلی بشه یا یه جای جدید ذخیره بشه) زمان خیلی زیادی میبره، هیچ کس دوست نداره سیستمش مدت طولانی اشغال باشه.
  • اگر مرتباً به این روش back up گرفته بشه به علت Read & write بالا خیلی زود هارد مستهلک میشه
  • وقتی زمان پشتیبانگیری طولانی میشه در حین عملیات backup کلی فایل اضافه یا کم میشه یا حتی تغییر میکنه که این اتفاق backup رو فاقد اعتبار میکنه.

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

پس از RSYNC استفاده میکنیم

کار این دستور این که یک مبداء و یک مقصد بهش میدیم . مقصد رو با مبداء مقایسه میکنه هر چی اضافه یا کم داشته باشه رو تو مقصد تغییر میده . backup گرفتم به این روش اولین بار با کپی فایل معمولی هیچ فرقی نداره چون تو مقصد هیچی نیست و کل مبداء رو تو مقصد کپی میکنه.

اما برای بار دوم که از کل سیستم backup میگیرم با این روش فقط اون قسمت هایی که تغییر کردن رو کپی یا حذف میکنه (برای حذف کردن باید تعیین کنیم براش به صورت پیشفرض اینکارو نمیکنه).

و نکته جذاب این برنامه اینه که خیلی خیلی سریع اینکارو میکنه. من بار اول که از کل فایل های سیستمیم backup گرفتم کل حجمی که کپی کرد ۱۲۷ گیگ شد که شامل کل دایرکتوری های bin/ و lib/ و lib64/ و var/ بود که همونطور که میدونید این دایرکتوری های پر از فایل های ریز ریز هستن.

بار دوم تمام این فایل هارو تو ۴۱ ثانیه چک کرد و ۸۴ مگ که اضافه شده بود رو به مقصد اضافه کرد که غالبا log file بودن . طبیعی اگر فایل حجیمی اضافه شده باشه به سیستم، زمان این پشتیبان گیری به نسبت حجم فایل های جدید بیشتر میشه.سریع بودن این عملیات و زمان کمی که لازم داره باعث میشه هم backup ما معتبر باشه هم طول عمر دیسک ها بالاتر بره.

پایان کار اولین backup از کل سیستم با rsyn
پایان کار اولین backup از کل سیستم با rsyn

یک مزیت دیگه ی این برنامه اینه که میتونید بهش بگید یه سری آدرس هارو نادیده بگیره.

خب این به چه درد میخوره؟ یه سری از دایرکتوری ها نیازی به backup گرفتن ندارن چون تو هر بار boot شدن سیستم، محتواشون به کلی عوض میشه مثلا دایرکتوری proc/ که پروسس ها رو نگه میداره با tmp/ که فایل های موقتی رو نگهداری میشه ویا حتی cach های سیستم و برنامه ها.

خب بریم سراغ دستور :

شکل دستور اینطوری که:

  • اول rsync رو مینویسیم.
  • دوم آرگومان های کوتاه رو اضافه میکنیم که اینجا من زدم aArXv که جلوتر توضیح میدم هرکدوم چی هست.
  • سوم آرگومان های بلند مثل delete - - و exclude - -
  • چهارم آدرس مبداء که من زدم */ یعنی کل سیستم.
  • پنجم آدرس مقصد که من زدم media/hal900/backup/ که آدرس هارد اکسترنالم هست.
rsync -aArXv --delete --exclude={"/home/hal9000/.cache/*","/home/hal9000/.mozilla/*",
"/dev/*","/media/*","/proc/*","/run/","/mnt/*","/tmp/*","/sys/*","/lost+found/*"} /* /media/hal9000/backup/

دستور بالا رو مستقیم میتونید کپی پیست کنید البته با تغییر مقصد.

خب rsync که مشخص بود بریم سراغ توضیح آرگومان های کوتاه :

a : آرشیو میکنه یا به بیان ساده تر یه کپی برمیداره دقیقا کاری که ما میخوایم انجام بده
v : با این پارامتر تمام کارهایی که انجام میشه رو صفحه نمایش داده میشه

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


A : ها ACL حفظ
o : حفظ مالک فایل
X : حفظ اتریبیوت های فایل مثل دسترسی ها و بیت چسبناک و غیره
g : حفظ گروه فایل
t : حفظ زمان ایجاد فایل

حالا بریم سراغ آرگومان های بلند،مثل همه دستورات دیگه قبل از آرگومان دوتا دَش یا خط فاصله بدون فاصله میاد ولی اینجا من مجبور شدم فاصله اش بدم که دیده بشه.

آرگومان delete - - مشخص میکنه اگر فایلی در مبداء پاک شد موقع backup، از مقصد هم پاک بشه.

و exclude - - که در ادامه مسیر هایی رو داخل {}= اضافه کردیم بهش رو نادیده میگیره یعنی ازشون بکاپ نمیگیره، انگار اصلا وجود ندارن.

مسیر هایی که بهش میدیم باید داخل دابل کوتیشن باشن و با کاما از هم جدا بشه اینطوری:

 {"مسیر اول"," مسیر دوم"}=
  • و بعد از اسم دایرکتوری حتما */ بزنید مثل */proc/ که تمام فایل های داخلش هم نادیده بگیره.

مسیر هایی که لازم نادیده گرفته بشن اینا هستن :

dev - media - proc - run - mnt - tmp - sys - lost+found -

و cach خود سیستم و برنامه هایی که اطلاعات زیادی رو cach میکنن مثل مرورگر وب:

{"/home/hal9000/.cache/*","/home/hal9000/.mozilla/*"}

در کل خیلی ساده بود ،اگر از یک هارد اکسترنال مشخص استفاده میکنید میتونید برای راحتی بیشتر، کل دستور رو alias کنید و با هر بار تایپ یک کلمه راحت backup تون رو بگیری.

alias backup="کل دستور رو بذارید اینجا"

بدرد خودم که خیلی خورد، امیدوارم شما هم استفاده کنید.