وبلاگ رسانگار
با ما حرفه ای باشید

سرور مجازی NVMe

آزاد کردن فضای دیسک Thin در ESx ( لینوکس و ویندوز )

0 3,232
زمان لازم برای مطالعه: 5 دقیقه

وقتی ماشین های مجازی داشته باشید که دیسک آنها بصورت thin باشد ( Thin Provisioned Disks ) احتما توجه کرده‎اید که سایز آنها همیشه با افزایش داده ها رشد می‎کند اما با پاک کردن اطلاعات مجدد کوچک نمی‎شود ! در حال حاظر vmware روش خودکاری برای Space Reclamation یا آزاد سازی مجدد فضا ندارد اما خوشبختانه ابزارهایی وجود دارند که با استفاده از آنها میتوانید فضای آزاد شده روی دیسک سرور مجازی را مجدد به فضای استفاده نشده Datastore خود اضافه کنید،

بروزرسانی : در نسخه 6 ESX دستوری به نام unmap به مجموعه دستورات esxcli اضافه شده است که به شما امکان صدور دستور آزاد سازی فضا در کل یک volume را می‎دهد

یکی از نقاط منفی روش ذکر شده در این مطلب این است که باید ماشین مجازی مد نظر را خاموش کنید ( که البته فکر نمیکنم راه دیگری در حال حاظر وجود داشته باشد)

فرمت کلی این کار و دستورات لازم به شکل زیر است که در مطلب دیگری به آن خواهم پرداخت ، البته بصورت پیشفرض در صورتی که سرور جدید نصب کرده باشید و نسخه VMFS6 باشد آزاد سازی خودکار فضا با اولویت پائین ( 25MB تا 50MB در ثانیه ) می باشد که البته در CLI میتوانید آن را تا 3 برابر ( high ) افزایش بدهید

esxcli storage vmfs unmap

خوب برای شروع باید فضای آزاد روی دیسک های ماشین مجازی را با 0 پر کنیم ، اما ابتدا اطلاعاتی در خصوص محیط سرور و volume ها نیاز داریم

گام یکم : بررسی و جمع آوری اطلاعات دیسک‎ها

دستور زیر را برای بررسی اطلاعات datasoreای که ماشین روی آن در حال اجراست بدست بیاوریم ، اطلاعات اصلی که ممکن است نیاز داشته باشیم را bold کرده ام .

# esxcli storage core device list –d naa.60a98000572d54724a346a6170627a52n
aa.60a98000572d54724a346a6170627a52
Display Name: Hitachi Fibre Channel Disk (naa.60a98000572d54724a346a6170627a52)
Has Settable Display Name: true
Size: 51200
Device Type: Direct-Access
Multipath Plugin: NMP
Devfs Path: /vmfs/devices/disks/naa.60a98000572d54724a346a6170627a52
Vendor: HITACHI
Model: LUN

Revision: 8020

SCSI Level: 4
Is Pseudo: false
Status: on
Is RDM Capable: true
Is Local: false
Is Removable: false
Is SSD: false
Is Offline: false
Is Perennially Reserved: false

Thin Provisioning Status: yes

   Attached Filters: VAAI_FILTER
   VAAI Status: supported
Other UIDs: vml.020033000060a98000572d54724a346a6170627a524c554e202020

همانطور که مشاهده می‎کنید این Device برای Thin بودن ست شده و VAAI هم پشتیبانی می کند . حالا می‎‌توانیم دستوری که برای بدست آوردن پارامترهای VAAI در کنترلر دیسک ها اجرا کنیم ، بصورت کلی با اجرای این دستور باید ببینم آیا کنترل دیسک از UNMAP کردن پشتیبانی می کند و متیواند فضاهای مرده را مجدد آزاد کند

esxcli storage core  device vaai status get -d  <naa>

naa.60a98000572d54724a346a6170627a52

VAAI Plugin Name: VMW_VAAIP_HDS

ATS Status: supported

Clone Status: supported

Zero Status: supported

Delete Status: supported

همانطور که مشاهده می‎کنید Device از حذف Delete پشتیبانی میکند بنابران قابلیت ارسال دستورات UNMAP SCSI را زمانی که عملیات آزاد سازی فضا درخواست شود دارد

پیشنهاد می‌کنیم بخوانید:  تست سرعت خواندن و نوشتن دیسک HDD/SSD/NVME در لینوکس

گام دوم : “واقعا ” فضای خالی را پاک کنید

آزاد سازی فضای دیسک در فایل سیستم ها زمانی میتواند اتفاق بی افتد که  دیسک های مجازی واقعا خالی باشند ، همانطور که میدانید پاک کردن داده فقط اطلاعات آن را از file allocation table پاک میکند ، اما بلاک آزاد شده را 0 نمیکند .در نتیجه ESXi همچنان فکر میکند که آن بلوک داده همچنان در حال استفاده است .

برای آزاد کردن فضا ( نوشتن ضفر روی دیسک ) در ویندوز و لینوکس ابزارهایی وجود دارد

 

Zero کردن فضای خالی دیسک ماشین مجازی در Windows

برنامه SDelete را دانلود کنید ، این دستور امکانات قدرتمندی دارد که میتواند فضای های خالی را ردیابی و پاک سازی کند ، شما متوجه فضای قابل استفاده در داخل VM خود نمی شوید ، اما این به vmware این قابلیت را میدهد که فضای های بلااستفاده را شناسایی کرده و فضای های بلا استفاده را آزاد کند و مجدد  در datastore قابل استفاده کند

CMD را As Administrator (elevated) اجرا کنید و Sdelete را اجرا کنید

sdelete.exe -z [drive:]

عبارت [drive:] را با پارتیشن مد نظر خود جایگزین کنید ، توجه کنید که شما میتوانید روی یک دیسک چندین پارتیشن داشته باشید ، و باید این عملیات را برای همهپارتیشن ها اجرا کنید تا بصورت کامل موثر باشد.

Zero کردن فضای خالی دیسک ماشین مجازی Linux

لینوکس روش متفاوتی برای دستیابی به هدف فوق دارد ، بسته به فایل سیستمی که داریم ابزارهای متفاوتی برای این کار وجود دارد اما یکی از آنها که همیشه برای خالی کردن فضا با یک فایل پر از صفر کار خواهد کرد dd است !

ابتدا مطمئن شوید که همه سرویس هایی که ممکن است اطلاعاتی روی دیسک بنویسند را متوقف کنید تا مشکلی به جهت پر شدن کامل آن پارتیشن ایجاد نشود ، سپس مطابق دستور زیر از dd استفاده کنید تا کل فضا را با صفر پر کنید

$ dd if=/dev/zero of=/[mounted-volume]/zeroes && rm -f /[mounted-volume]/zeroes

عبارت [mounted-volume] را با مسیر مانت شده دیسک خود جایگزین کنید مثلا / یا /home ، و باز مانند ویندوز اگر روی فقط یک دیسک جنیدن پارتیشن دارید باید برای همه آنها دستور را اجرا کنید، در غیر این صورت همه بلوک ها با صفر پر نخواهند شد و نتیجه دلخواه و کامل حاصل نمی شود .

پیشنهاد می‌کنیم بخوانید:  آموزش نصب Patch و آپدیت Offline روی VMWare Esxi

گام سوم :  reclaim و آزاد کردن فضای دیسک در ESX

برای خالی کردن فضا و آزاد شدن آن در Datastore لازفرض بر این است که نوع دیسک شما Thin است و سپس دستورات ذکر شده در این بخش را اجرا کنید.

اگر دیسک شما Thick است باید آنرا به Thin تبدیل کنید ، بنابراین بعد از Zero کردن فضای خالی می‎توانید با Migrate کردن ( یا حتی Clone کردن ) و انتخاب نوع دیسک Thin در زمان انتقال هم نوع دیسک را عوض کنید و هم فضای آزاد شده مطابق دستورات قبلی Reclaim می شود و می‎توانید از این گام صرف نظر کنید

وقتی که فایل پر شده با صفر را پاک کردید ( مطمئن شوید فایل پاک شده و در سیستم عامل ماشین فضای آزاد را به شکل واقعی می بینید ) حالا وقت آن است که واقعا آنرا خالی کنیم ، این کار با پانج کردن صفرهای دیسک روی فایل VMDK انجام میشود.

ابتدا ماشین مجازی مد نظر را خاموش کنید و با ssh به کنسول سرور ESXi خود متصل شوید ، سپس با دستور cdبه مسیر و سپس دستور vmkfstools را با پارامترهای زیر اجرا کنید

vmkfstools -K [disk].vmdk

عبارت [disk] را با اسم فایل دیسک ماشین مجازی خود جایگرین کنید ، این فایل معمولا flat VMDK آدرس دهی میشود ، شما باید فایل Descriptor را که بدون -flat است را قرار بدهید یعنی اگر اسم دیسک شما هست

rasanegar-vm-flat.vmdk باید فایل rasanegar-vm.vmdk را در آدرس فوق قرار بدهید

با اجرای دستور فوق خروجی مانند زیر شروع به نمایش مقدار پیشرفت میکند که بسته به حجم دیسک و  سرعت Storage شما می تواند چند دقیقه تا چندین ساعت ، حتی روز !  طول بکشد.

vmkfstools -K rasanegar-vm.vmdk
vmfsDisk: 1, rdmDisk: 0, blockSize: 1048576
Hole Punching: 100% done.

نکته مهم :
همانطور که حتما متوجه شده اید ، اقدامات فوق روی دیسک های ایجاد شده بصورت thin کار میکند و در صورتی که دیسکی را بصورت Thick ایجاد کرده باشید با خطای زیر مواجه خواهید شد

Hole Punching: 0% done.Could not punch hole in disk 'rasanegar-vm2.vmdk': Function not implemented

موفق باشید

5/5 (2 رای)
دیدگاه شما در خصوص مطلب چیست ؟

آدرس ایمیل شما منتشر نخواهد شد.

لطفا دیدگاه خود را با احترام به دیدگاه های دیگران و با توجه به محتوای مطلب درج کنید