چهارشنبه بعد از ظهر است و همه کارمندان برای گذراندن آخر هفته‌ای شاد محل کار را ترک کرده‌اند اما شما و تیمتان آماده‌اید تا تغییری در زیرساخت مجازی یکی از سرویس‌های حیاتی سازمان انجام دهید و پس از آن شما هم مانند دیگر همکارانتان آخر هفته‌ای خوب را با خانواده سپری کنید. تغییرات را انجام می‌دهید و همه چیز خوب بنظر می‌رسد و محل کارتان را ترک می‌کنید، اما تمام آخر هفته‌تان را نگران این هستید که آیا واقعا تغییرات به درستی انجام شده و صبح شنبه که به محل کار باز می‌گردید هنوز هم سرویس برقرار است؟ و یا حتی بدتر از آن ظهر پنجشنبه با شما تماس می‌گیرند و گفته می‌شود که سرویس از دسترس خارج شده و شما باید در کوتاه‌ترین زمان ممکن به حالت قبل از تغییرات بازگردید تا سرویس در دسترس قرار گیرد. همه این حالت‌ها نه‌تنها به شما و تیمتان استرس و فشار کاری زیادی وارد می‌کند بلکه در کار سازمان هم اختلال وارد می‌کند. برای اینکه از همه این ها در امان باشید و آخر هفته خوبی داشته باشید بهتر است که از Snapshot کمک بگیرید.

Snapshot چیست؟

Snapshot در لغت به معنی تصویری غیر رسمی است که با دوربین‌های دستی (=Handheld) گرفته می‌شود و یا اطلاعاتی است که درک و تصویر کلی از یک وضعیت در یک زمان خاص به ما می‌دهد. در مجازی‌سازی هم Snapshot همین کار را می‌کند؛ وضعیت و داده‌های یک ماشین مجازی را در یک زمان خاص ذخیره می‌کند. منظور از وضعیت ماشین مجازی، وضعیت روشن یا خاموش بودن آن است. و منظور از داده‌های ماشین مجازی تمام فایل‌هایی است که ماشین مجازی را می‌سازند از جمله رم، مموری، دیسک و ... . از Snapshot میتوان برای بازگرداندن ماشین مجازی به حالت قبل از تغییر استفاده کرد که اصطلاحا به این کار Revert، Restore یا Rollback می‌گویند.

Snapshot چطور کار میکند؟ 

وقتی ما اقدام به Snapshot گرفتن می‌کنیم تغییراتی در فایل‌های ماشین مجازی ایجاد می‌شود که باعث می‌شود بتوانیم در هر زمان به وضعیت مدنظر بازگردیم. اولین تغییر این است که دیسک ماشین مجازی از یک فایل به زنجیره‌ای از فایل‌ها تبدیل می‌شود. فرض  کنید دیسک ماشین مجازی ما AD.vmdk نام دارد. به این دیسک Main Disk یا Base Disk نیز گفته میشود. هنگامی که از ماشین Snapshot می‌گیریم این فایل به حالت Read Only یا فقط خواندنی در می‌آید و فایل دیسک جدیدی که به آن Child Disk یا Delta Disk گفته می‌شود ایجاد می‌گردد که نام‌گذاری آن بصورت AD-000001.vmdk است و با هر Snapshot جدید فایل دیسک جدید با شماره بالاتر ساخته می‌شود. چند نکته باید در خصوص دیسک‌ها بدانید:

  • نام Snapshotها از نام Base Disk گرفته می‌شود.
  • نام Delta Diskها برای هر دیسک‌هایی که والد یکسان داشته باشند لزوماً با یک الگوی ثابت تولید نمی‌شود و بر اساس فایل‌های موجود و نام‌هایی که پیشتر استفاده شده، انتخاب می‌گردد.
  •  اگر اندازه دیسک مجازی بیش از ۲ ترابایت باشد فایل دلتا به جای فرمت معمولی در قالب sesparse.vmdk-- ساخته می‌شود. فرمت sesparse برای مدیریت دیسک‌های بزرگ و عملکرد بهتر در سیستم فایل‌های جدیدتر طراحی شده که از ESXi6.5 معرفی شده است.
  • اگر فرمت دیسک VMFS6باشد تمام Snapshotها بصورت sesparse بدون توجه به اندازه دیسک ذخیره خواهد شد.

شمای زنجیره Snapshot

در هر Snapshot فعالی که قرار دارید اگر به Snapshotهای قبلی Revert کنید، این امکان وجود دارد که Snapshot جدیدی ایجاد کنید. این باعث می‌شود که شاخه جدیدی از Snapshot فعلی منشعب شود. برای درک بهتر به تصویر زیر دقت کنید. 

شمای درخت Snapshot

تغییر دیگر ایجاد فایل AD.vmsd است. این فایل دیتابیس Snapshotها است. تمامی اطلاعات مربوط به Snapshotها که در Snapshot Manager استفاده می‌شود در این فایل ذخیره می‌شود. همچنین روابط بین Snapshot مثل اینکه هر Snapshot فرزند کدام Snapshot است نیز در این فایل قرار دارد.

فایل دیگری که با پسوند vmsn ایجاد می‌شود شامل وضعیت فعلی ماشین مجازی و مموری است. به کمک این فایل این امکان وجود دارد که دقیقا به حالتی که از آن Snapshot گرفته می‌شود بازگشت. اگر محتویات مموری در این فایل ذخیره نشود یا اصطلاحا Non-memory Snapshot تهیه شود پس از Revert ماشین در وضعیت خاموش خواهد بود و فایل vmsn فایل کوچکی است که فقط Metadataی وضعیت را نگه می‌دارد.

حذف Snapshotها 

برای حذف Snapshotها چند حالت مختلف ممکن است وجود داشته باشد و دانستن اینکه حذف هر Snapshot چه تاثیری خواهد داشت از اهمیت زیادی برخودار است زیرا ممکن است اشتباه در حذف Snapshot منجر به این شود که داده‌های درست را به اشتباه پاک کنیم.

  •  حالتی را در نظر بگیرید که در آخرین Snapshot قرار دارید و می‌خواهید همین Snapshot را حذف کنید. 

شمای حذف آخرین Snapshot فعال

در این حالت Snapshot2 با دیسک والدش که Snapshot1 باشد ادغام یا در اصطلاح فنی Consolidate می‌شود. یعنی تمامی تغییرات موجود در Snapshot2 به Snapshot1 اضافه میگردد. حجم Snapshot2 به Snapshot1 
اضافه می‌گردد.

  • حذف کردن اولین Snapshot با عث می‌شود حجم این دیسک به Base Disk اضافه شود.

شمای حذف Snapshot ماقبل Snapshot فعال

  • حذف کردن همه Snapshotها باعث میشود که اطال عات موجود در Snapshotها به ترتیب به Base Disk اضافه شوند.

شمای حذف همه Snapshotها

  • حالا نوبت حالتی که Snapshot فعال آخرین Snapshot نیست و Snapshot بعد از آن را حذف کنیم. در این حالت حذف Snapshot تاثیری بر Snapshotهای گذشته ندارد و فقط همین Snapshot و فرزندانش حذف خواهند شد.

شما حذف Snapshot بعد از Snapshot فعال

  • حذف Snapshot در حالی که چند انشعاب از یک والد وجود دارد. این یکی از خطرناکترین حالت‌هاست. چرا که همانطور که گفته شد با حذف Snapshot اطالعات موجود در آن با والد Consolidate میشود. حال اگر در Snapshotهای هم عرض یا بعبارتی دیگر آن‌هایی که والد یکسان دارند ناسازگاری داشته باشید با حذف یکی از آن‌ها و اعمال تغییرات در والد، فرزند دیگر نیز ممکن است دچار مشکل شود. برای مثال فرض کنید که در Snapshot2 یک تنظیم در سیستم عامل انجام شده، یا نرم‌افزاری نصب شده که در Snapshot4 نباید این تنظیم یا نرمافزار وجود داشته باشد. با حذف Snapshot2 تغییرات صورت گرفته در این دیسک فرزند به دیسک والد اعمال می‌شود و این ممکن است Snapshot4 را نیز دچار مشکل کند. در چنین حالتی توصیه  می‌شود از حالت مطلوب خود Snapshot تهیه کنید، سپس به Snapshot والد که در این سناریو Snapshot1 می‌باشد Revert کنید. حالا مثل حالت 4 اگر Snapshot فرزندی را حذف کنید ، خودش و فرزندانش بدون اینکه اطلاعاتشان با والد  Consolidate شود حذف خواهند شد. پس از آن می توانید به Snapshot مطلوب برگردید.

شمای حذف Snapshot هم عرض

Consolidation چیست؟

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

Consolidation دقیقا چه کار می‌کند؟

هنگامی که شما یک Snapshot را پاک می‌کنید VMWare بصورت خودکار تغییرات موجود در Delta Disk را با Base Disk (یا دیسک والدش) ادغام می‌کند. مراحل این فرآیند به صورت زیر است:

  • سیستم تغییرات ذخیره شده در Delta Disk را می‌خواند.
  • این تغییرات را روی Base Disk یا دیسک والد اعمال می‌کند.
  • پس از اطمینان از اعمال صحیح همه تغییرات فایل vmdk مربوط به Delta Disk حذف می‌شود.
  • فضای اشغال شده توسط Delta Disk آزاد می‌گردد.

فرآیند Consolidate معمولا به صورت خودکار شروع می‌شود اما ممکن است نیاز باشد که بصورت دستی نیز آن را انجام دهید. در این هنگام وقتی رو گزینه Consolidate کلیک می‌کنید:

  • VMWare کل زنجیره Snapshot را بررسی می‌کند.
  • Delta Diskهای جدا شده یا ناقص را به والدش Merge می‌کند.
  • Snapshotهایی که در vCenter دیده نمی‌شود ولی در datastore وجود دارد را پاک می‌کند.
  • زنجیره Snapshot را یک دست می‌کند.

چطور Snapshot بگیریم؟

برای ایجاد Snapshot از یک ماشین مجازی وارد محیط VMWare ESXI  شوید و بر روی ماشین مورد نظر کلیک راست کنید و گزینه ...Snapshots >Take Snapshot را انتخاب کنید. 

انتخاب گزینه Take snapshot در VMWare ESXi

پنچره جدید مانند آنچه در تصویر زیر مشاهده میکنید باز میشود که در ادامه به توضیح گزینه های این پنجره میپردازیم:

  • Name: در این کادر نامی برای Snapshot تعیین می‌کنید.
  • Description: در این کادر متنی توضیحاتی برای Snapshot می‌توانید بنویسید. برای مثال می‌توانید تغییراتی را که ایجاد کرده‌اید را ذکر کنید یا تغییراتی که بعد از این Snapshot می‌خواهید اعمال کنید را ذکر کنید.
  • Snapshot the virtual machine’s memory: اگر تیک این گزینه را بزنید اطلاعات موجود در مموری هم در Snapshot گنجانده می‌شود. برای اینکه از این گزینه استفاده کنید ماشین مجازی باید حتما روشن باشد. توجه داشته باشید که اگر این گزینه را فعال کنید فرآیند Snapshot گرفتن طولانی‌تر خواهدشد. در این حالت یک فایل با نام AD-snapshot.vmem ایجاد می‌شود که دقیقا به اندازه رم حجم دارد و محتویات رم را شامل می‌شود.
  • Quiesce guest file system (Needs VMWare tools installing): اگر این گزینه را فعال کنید و هنگام Snapshot گرفتن ماشین مجازی روشن باشد، VMWare Tools از Quiesce در فایل سیستم استفاده می‌کند. Quiesce کردن فایل سیستم به این معناست که شرایط مناسبی را برای داده‌های ماشین مجازی فراهم می‌کند تا بتوان از آن ها بکاپ گر فت بدون اینکه یکپارچگی آن از بین برود.

در نهایت بر روی گزینه Take Snapshot کلیک کنید تا فرآیند Snapshot گیری شروع شود.

پنجره Take Snapshot در VMWare ESXi

مدیریت Snapshotها

برای مدیریت Snapshotهای ایجاد شده دوباره بر روی ماشین مجازی مورد نظر کلیک راست کنید گزینه Snapshots>Manage snapshots را انتخاب کنید.

انتخاب گزینه Manage snapshots در VMWare ESXi

پنجره Manage snapshots باز میشود که لیستی از Snapshotهای گرفته شده را به شما نشان میدهد.در باالی این پنجره تعداد دکمه به چشم میخورد که عبارتند از:

  • Take snapshot: این دکمه پنجره Take snapshotرا باز می‌کند. که پیشتر در موردش توضیح داده شد.
  • Restore snapshot: با انتخاب این دکمه می‌توانید Snapshot انتخاب شده را Restore کنید.
  • Delete snapshot: برای حذف Snapshot انتخاب شده این دکمه را بزنید.
  • Delete all: تمام Snapshotهای موجود را پاک می‌کند.
  • Edit Snapshot: برای ویرایش نام و توضیحات استفاده می‌شود.
  • Refresh: برای بروزرسانی لیست Snapshotها استفاده می‌شود.

پنجره Manage snapshots در VMWare ESXi

جمع بندی

Snapshot مکانیزمی است که به ما این اطمینان خاطر را می‌دهد که در صورت بروز هرگونه اتفاق ناگواری در صورت ایجاد تغییرات بتوانیم به نقطه‌ای از زمان که امن و پایدار است باز گردیم. با این حال Snapshot مانند یک چاقوی دو لبه است که علاوه‌بر اینکه دستگیر و اطمینان بخش است، استفاده نادرست از آن میتواند پاشنه آشیل زیرساخت مجازی ما باشد. به همین دلیل نباید از Snapshot به عنوان نسخه پشتیبان استفاده کرد و آن‌ها را به مدت طولانی نگه‌داشت چون:

  • هر Snapshot یک لایه I/O اضافه ایجاد می‌کند.
  • VM مجبور می‌شود داده را میان چند Delta Disk دنبال کند.
  • این امر در سرورهای IOPS-Sensitive مشکل ساز می‌شود.

در نتیجه همه این‌ها باعث می‌شود کارایی سیستم کاهش یابد.