請問前輩,怎麼維護windows虛擬機的thin provision type的虛擬硬碟,windows虛擬機上的虛擬硬碟將空間釋放出來,但是vCenter上的vmfs儲存區的空間還是沒釋放
windows虛擬機版本 : windows server 2008R2和windows server 2016都有這個狀況
vCenter和vSphere host版本都是6.7
圖一,vCenter控管介面顯示此虛擬機使用1.15TB
圖二,但是實際上,windows虛擬機的thin provision type的虛擬硬碟只使用大概172GB
你要把 VM Free 的空間全部填成 Zero, 他才能被回收;
這個工作要在 VM 關機狀態下做, 官方 KB 有工具和程序:
https://kb.vmware.com/s/article/2136514
大神請教一下
VM如果一開始就選擇Thin模式,不是使用多少才佔用多少空間嗎?然後犧牲的是磁帶I/O存取效能
我的理解正確嗎?
如果是,那為何會發生發問者的狀況?
https://www.google.com/amp/s/kenwu0310.wordpress.com/2017/10/03/vmware-esxi-vm-%25E7%25A1%25AC%25E7%25A2%259F%25E6%25A0%25BC%25E5%25BC%258F%25E5%25B7%25AE%25E7%2595%25B0%25E8%2588%2587%25E5%25BB%25BA%25E8%25AD%25B0/amp/
先簡單問兩個問題:
這兩個問題的答案, 可以解釋你的疑問...
我正要出門, 晚點有時間再詳細說明....
感謝大神的開釋
大概知道原因了?
如果您方便,請再詳細說明,謝謝
第一個問題:
File system 刪除一個檔案, 他只會去刪 Index table, 並不會去動到真正的檔案本體. 他就是把 Index 裡面, 指向這個檔案的指標刪掉或者歸零而已, 檔案內容完全不會去動.....
但是你每次在瀏覽檔案區的時候, 都是要從 Index 開始查找, 所以 Index 刪掉就等於你找不到這個檔案了, 計算容量的時候, 也不會去計入已經刪掉的 Index;
雖然檔案本身仍然存在, 仍然佔用空間, 但從 File System 角度看, 他認為: 這個容量是不存在的, 直到其他空間用滿, 沒有空間可用又需要寫入的時候, 他才會把後面要寫的資料, 直接覆蓋到這個一直存在的區域內.
所以, 對實體硬碟來說, 根本就沒有所謂: 刪除檔案, 這樣的動作, 只是把後面的資料, 不斷覆蓋到舊的/已經不用的檔案位置上去, 一直疊上去. 所以也不會有: 空間被清出來, 這樣的動作.
ESXi VM Disk 也只是在反映實體硬碟的這些動作而已.
既然你實體硬碟上面不會真的刪掉, ESXi 也不會刪掉.
第二個問題:
ESXi Disk 模擬的動作, 就是一連串的 BIOS Disk 呼叫: 根據 Cylinder/Head/Sector 參數, 找到資料定位, 然後讀/寫資料. 他只認得: C/H/S 和 Read/Write 這樣的指令, 也不會再傳遞任何具有人類意識的備註或說明;
所以他根本不知道你是要幹嘛? 你要讀, 他就讀給你; 你要寫, 她就幫妳寫; 至於你讀寫的資料, 對他有甚麼意義? 他完全不知道!
當 File System 在 Index Table 標記說: 這個檔案要刪除! 他的動作就可能只是: 下令給 BIOS 到 C12/H64/S33 這個位置, 在這裡寫入, 假設: 0x10/0x54/0x12, 代表已經刪除掉了. 要刪另外一個檔案? 那就叫 ESXi 去 C67/H23/S89 這個位置, 寫入: 0x64/0x28/0x75 這個資料, 代表已經刪除了......
ESXi 又如何能了解這些代表甚麼意義?
他頂多也只能照單全收, 按表操課而已.
刪除一個檔案/刪除幾個檔案/刪除全部檔案....
這些都只是對人類有意義而已, 他是透過 File system 去紀錄和演繹出來的; 至於比 File System 更底層的 Disk Subsystem, 他只有聽命行事, 沒有思考能力, 完全不了解你想做甚麼
因此當你在 Guest OS 裡面刪掉資料之後, 雖然 OS 的 File System 能幫你回收並算出正確的可用容量, 但實際上這些資料仍然佔用著實體位置, 直到下一個資料蓋掉他之前, 都會一直存在磁碟子系統裡面. ESXi Thin Provision 就是忠實反映這個狀況.
感謝大神開釋
第一個問題,嗯,完全理解,基本的電腦概論
第二個問題,以前完全沒去思考過...,枉費VMWare摸那麼久了...,慚愧...
以上,謝謝
Dear Ray:
後來我找了一台之前預計要砍掉的虛擬機來測試
以下為測試前的狀況
虛擬機在vCenter上的Storage Usage(測試前)
虛擬機實際windows file system的磁碟Usage(測試前)
虛擬機實際windows file system的磁碟Usage(測試sdelete之後)
虛擬機在vCenter上的Storage Usage(測試sdelete之後),反而比使用sdelete之前,占用vCenter上的Storage Usage還高,請問這樣正常嗎?
我還可以做下一步驟嗎?
這是正常的, sdelete 會把 VM Guest OS 沒用到的 disk block 全部填 0 進去, 等於是把你整個 ESXi 4TB disk 的資料全部寫滿, 所以你在 ESXi 上看到的會是被寫滿的容量.....
這要等到你去執行 vmkfstools -K 之後才會開始裁減這些多餘的 block....
Dear Ray:非常感謝您的耐心回覆,請問那這個ESXi 4TB disk執行 vmkfstools -K起來可能要花不少時間,對吧??? 在執行期間是否
會拉高IOPS影響到同VMFS Datastore上的其他virtual machines呢??? 建議是在離峰時段做嗎?
另外想請教Ray一個問題,是否以下作法也可以讓VMFS Datastore釋放空間???
1.透過storage vMotion或將此虛擬主機關機並移動到其他VMFS Datastore上,那這個虛擬機在vCenter上的Storage Usage也會被釋放???
2.直接刪除掉此虛擬機
搭版詢問一下,請問如果要將C槽多餘的空間回收的話也是使用這個方式去做嗎?
樓上正確喔....
1.透過storage vMotion或將此虛擬主機關機並移動到其他VMFS Datastore上,那這個虛擬機在vCenter上的Storage Usage也會被釋放???
2.直接刪除掉此虛擬機
vmkfstools -K起來可能要花不少時間,對吧???
是的, 必須留意你的 IOPS 被消耗光....
通常如果空間足夠的話, 另外新開一個 Thin Disk, 在 Guest OS 裡面先把檔案搬過去, 再砍掉舊的, 這樣操作速度會比上面的方法快, 而且可以控制 IOPS 的上限....
突然覺得VMware真是博大精深阿?我還沒有做下一步驟vmkfstools -K disk_name.vmdk,虛擬機占用Storage Usage的空間居然自己變小...真是不知道怎麼理解它........