參考:
http://www.360doc.com/content/22/0505/16/67252277_1029878535.shtml
VHDX 有個不好的問題就是,如果在里面存放過文件再刪除,那么已經使用過的空間不會壓縮,導致空間一直被占用。那么就需要想辦法壓縮空間。
還有一點,就是當文件刪除時,實際上并沒有真正的清空。需要用 0 覆蓋對應的空間,才能壓縮完成。windows下解決方案很多,linux 的比較少見,所以記錄下。
1. 取消開機啟動項,避免占用磁盤。
vi /etc/rc.local
對于我的系統,注釋掉這行即可。dpd 是我開機的自定義守護腳本,如果沒有可忽略。?
2. 卸載磁盤
可以使用 df -h 查看磁盤的掛載
可以看到我這里有
/dev/sda1? -?/dev/sde1 五塊盤
分別卸載。?
sudo umount /dev/sda1sudo umount /dev/sdb1
...
如果卸載不了,可以使用
這里的 xxx 就是剛才的掛載點
sudo lsof +D /xxx/disk/xxx
第一列的 command 就是占用的進程名稱。?
pkill 進程名稱 然后立即卸載即可。
3. 使用?zerofree 填充
沒裝就先 :
sudo yum install zerofree
4. 壓縮磁盤
Optimize-VHD -Path C:\YourVHDX.vhdx -Mode Prezeroed,這個不用在磁盤管理工具里面附加VHDX,不是NTFS,附加了對效率也沒提升。
5. 注意圖形化中的壓縮時沒用的。即使已經 zerofree 過。
還是要靠 powershell
?以下是參考的原文(因為很多網站后面內容就沒了,所以拷貝一份):
首先明確:hyper-v管理器里面“設置-硬盤驅動器-編輯-選擇操作-壓縮”并沒有明顯的效果。
然后區分幾個關鍵詞:
hyper-v里面的“壓縮(compact)”:虛機里磁盤的可用空間不變,虛擬磁盤文件大小變小(因為是回收虛機因刪除文件釋放出來的磁盤空間,所以不可能壓縮到比虛機里磁盤總已用空間還小)
hyper-v里面的“收縮”:虛機里磁盤的可用空間變小。(不可能影響已用空間)
磁盤管理工具(diskmgmt.msc)里面的“壓縮卷”:使磁盤的可用空間變小。(不可能影響已用空間)最后看方案:
1.有人給出的方案:碎片整理無效,還有反作用,應該先收縮,再壓縮,再擴展。
如:先在磁盤管理工具里面“操作-附加VHD”,然后在有可用空間的分區上右鍵“壓縮卷”(只支持NTFS,而且過程漫長,無進度條),然后分離VHD,在hyper-v管理器里面壓縮,就有效果。
2.也有方案:建一個新的虛擬磁盤,使用diskgen或者Ghost11把原來磁盤的內容(按文件或者文件系統或者partition2partition拷過來),然后把新的虛擬磁盤當原來的磁盤用。
這兩個感覺都不是很好,速度慢或根本沒有進度條不知道過程如何了;或者不支持linux;或者新磁盤的有些硬件特征會改變。看下面的:
3.對NTFS文件,用Windows Server PowerShell里面的Optimize-VHD小命令(cmdlet),操作如下:a.先在磁盤管理工具里面“操作-附加VHD”,記得勾選“read-only”(必不可少)b.打開PowerShell,輸入Optimize-VHD -Path C:\YourVHDX.vhdx -Mode Full。運行后很快就OK了,磁盤文件顯著變小了。關于Optimize-VHD詳細一點的說明可參考:https://docs.microsoft.com/zh-tw/powershell/module/hyper-v/optimize-vhd?view=win10-ps4.Linux系統,壓縮前,要在虛機層面將標記為DELETE的文件徹底刪除,也就是將虛機磁盤上的位置0。(具體置零的方法:**systemrescue cd,用該cd啟動虛機,運行zerofree,如zerofree /dev/sda1),然后再壓縮。 這是國外論壇上給的方法,老外說這個systemrescuecd小巧好用,值得一試,**網站:https://www./。然后Optimize-VHD -Path C:\YourVHDX.vhdx -Mode Prezeroed,這個不用在磁盤管理工具里面附加VHDX,不是NTFS,附加了對效率也沒提升。
這兩個方案應該是比較靠譜的,方案3親測有效。