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

سرور مجازی NVMe

چطور فضای دیسک را در دیسک Thin Esxi آزاد کنیم ( لینوکس و ویندوز )

0 38
زمان لازم برای مطالعه: 4 دقیقه
چطور فضای دیسک را در دیسک Thin Esxi آزاد کنیم ( لینوکس و ویندوز )
5 (100%) 1 رای

وقتی ماشین های مجازی داشته باشید که دیسک آنها بصورت 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 ها نیاز داریم

گام 1: دستور زیر را برای بررسی اطلاعات 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

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

esxcli storage core  device vaai status get -d  
naa.60a98000572d54724a346a6170627a52

VAAI Plugin Name: VMW_VAAIP_HDS

ATS Status: supported

Clone Status: supported

Zero Status: supported

Delete Status: supported

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

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

 

گام دوم  : “واقعا ” ، فضای آزاد را پاک کنیم

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

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

آزاد کردن فضای بلا استفاده دیسک ماشین مجازی در Windows

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

 

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

sdelete.exe -z [drive:]

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

آزاد کردن فضای بلا استفاده دیسک ماشین مجازی در Windows

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

پیشنهاد می‎کنیم بخوانید:
VMware vRealize Log Insight 4.7.1

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

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

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

گام 3 : اجرای reclaim در ESX

وقتی که فایل پر شده با صفر را پاک کردید ( مطمئن شوید فایل پاک شده و در سیستم عامل ماشین فضای آزاد را به شکل واقعی می بینید ) حالا وقت آن است که واقعا آنرا خالی کنیم ، این کار با پانج کردن صفرهای دیسک روی فایل 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

موفق باشید

عضو خبرنامه وبلاگ رسانگار شوید
عضو خبرنامه وبلاگ رسانگار شوید
با عضویت در خبرنامه ایمیلی، از جدیدترین اخبار و بروزرسانی ها و همچنین پیشنهادات ویژه ما بصورت دوره ای مطلع خواهید شد
در هر زمان می توانید عضویت خود را با یک کلیک لغو کنید