使用動態分配的映像時,什麼 FS 可以將未使用的塊回收到 VirtualBox?
我喜歡在 VirtualBox 中使用動態分配的圖像。
如果您想分發圖像,這是首選方式(還記得 Vagrant 嗎?)。
使用動態分配的映像時,哪些 Linux FS 可以將未使用的塊回收到 VirtualBox?
我看到使用者執行:
sudo dd if=/dev/zero of=/EMPTY bs=1M || : ; rm -f /EMPTY
縮小 VDI 映像。
此外,我們都知道 SSD 驅動器的 TRIM ATA 命令(
discard
選項mount
)…
官方文件狀態:https ://www.virtualbox.org/manual/ch08.html#vboxmanage-storageattach
VBoxManage storageattach <UUID> --nonrotational
:此開關允許為虛擬硬碟啟用非旋轉標誌。一些客戶機(即 Windows 7+)將此類磁碟視為 SSD,並且不在此類媒體上執行磁碟碎片。
VBoxManage storageattach <UUID> --discard
:此開關啟用虛擬硬碟的自動丟棄功能。這指定 VDI 映像將被縮小以響應來自來賓作業系統的修剪命令。必須滿足以下要求:
磁碟格式必須是 VDI。
清除區域的大小必須至少為 1MB。
VirtualBox 只會修剪整個 1MB 塊。VDI 本身被組織成 1MB 塊,因此只有在 TRIM-ed 的空間在 1MB 邊界處至少是 1MB 連續塊時才有效。在 Windows 上,偶爾進行碎片整理(使用“defrag.exe /D”),或在 Linux 下將“btrfs 文件系統碎片整理”作為後台 cron 作業執行可能是有益的。
注意:客戶作業系統必須配置為發出修剪命令,這通常意味著客戶作業系統被設置為將磁碟“視為”SSD。Ext4 支持 -o 丟棄掛載標誌;OSX 可能需要額外的設置。Windows 應該自動檢測和支持 SSD - 至少在版本 7、8 和 10 中。Linux exFAT 驅動程序(由三星提供)支持 trim 命令。
目前尚不清楚 Microsoft 的 exFAT 實施是否支持此功能,儘管該文件系統最初是為快閃記憶體設計的。
或者,有一些特別的方法來發出 trim,例如 Linux fstrim 命令,它是 util-linux 包的一部分。早期的解決方案要求使用者將未使用的區域清零,例如使用 zerofree,並明確壓縮磁碟 - 只有在 VM 離線時才有可能。
所以儲存定義為:
<AttachedDevice discard="true" nonrotational="true" type="HardDisk">
使用像Ext4 / Btrfs / JFS / XFS / F2FS / VFAT安裝的FS
-o discard
應該可以工作……VirtualBox 中的UPDATE TRIM 支持仍然不穩定:https ://www.virtualbox.org/ticket/16795
另請參閱https://superuser.com/questions/646559/virtualbox-and-ssds-trim-command-support