但是,隨著刪刪改改,「虛擬機」中所存的資料並未實際增加多少,可是已經增大的映像檔卻不會縮小。使用 VirtualBox 提供的『VBoxManage modifyhd ... --compact』這個『緊縮』命令,也不能回復到實際大小。這是因為:
- 「虛擬機」的硬碟資料被刪除時,並未實際被清空,只在 FAT(檔案配置表)中註記為『該空間可再使用於儲存新資料』。
- VirtualBox 的命令只將內容為0值之位置回收,而被註記為『空』的位置但內容不為0值,故並未回收。
一、安裝 Windows 系統的「虛擬機」
若「虛擬機」內安裝 Windows 作業系統,將硬碟映像檔的『已刪除資料』清空為0,可借助 Microsoft 提供的工具 SDelete:- 下 載 點:SDelete v1.61
- 適用系統,Client : Windows XP 及以上版本
Server : Windows Server 2003 及以上版本 - 下載後安裝備用。
- 刪除不再需要或暫存的資料,或移除(反安裝)不需要的程式。
- 整理「虛擬機」的硬碟資料:從《所有程式》→《附屬應用程式》→《系統工具》點選「磁碟重組工具」,將硬碟資料整理一翻,使得每個檔案資料都為連續空間。此舉有助於之後的「硬碟映像檔」縮小。
- 將「已刪除資料」填入0值:在「命令提示字元」的「終端機」視窗中,將『工作目錄』切換到 SDelete 所在的目錄,再下這個命令
C:\Program Files> SDelete -z c:
其中『-z』是將『已刪除資料』皆填入0值,『c:』是指定欲清除資料的硬碟編號。等完成度到達 100% 就已經將『已刪除資料』皆清為0。若有數個硬碟,需更換硬碟編號再下一次命令。
二、安裝 Fedora 系統的「虛擬機」
當「虛擬機」中所安裝的系統是 Fedora 時,所需要的準備工作大致上與 Windows 類似,只是所使用的程式不同,或下達命令的方式不同。將『已刪除資料』填入0值的程式,可以在平時先安裝備用,
[root@VM-test ~]# yum install zerofree其它的過程,以最近有再測試過的系統(Fedora 20 及 21)為例,分述如下:
Fedora 21
因為要將『已刪除資料清為0值』,該硬碟就不能掛載使用。Fedora 21 Workstation 提供 Live 光碟,供使用者試用、安裝,完全不會用到原有的硬碟,很適合進行接下來的處理。在 VirtualBox 虛擬機中,加入『Live 光碟映像檔』並切換至『由光碟機開機』。點選『Try Fedora』(即『試用 Fedora』),使用「Live 光碟」中的 Fedora 系統。等桌面環境出現後開啟「終端機」,在「終端機」中輸入以下命令:
[root@VM-test ~]# yum install zerofree上圖中共下了 5 個命令,分別說明如下:
. . . . .
[root@VM-test ~]# parted /dev/sda print
Model: ATA VBOX HARDDISK (scsi)
Disk /dev/sda: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags 1 1049KB 525MB 524MB primary ext4 boot 2 525MB 2673MB 2147MB primary linux-swap(v1) 3 2673MB 21.5GB 18.8GB primary ext4
[root@VM-test ~]# zerofree /dev/sda1
[root@VM-test ~]# zerofree /dev/sda3
[root@VM-test ~]# shutdow -h now
命 令 | 說 明 |
---|---|
yum install zerofree | 若「虛擬機」系統未安裝將『已刪除資料填入0值』套件,可在這裏補安裝。(注意:此為暫時性安裝,未實際安裝在「虛擬機」中) |
parted /dev/sda print | 列出硬碟裝置(/dev/sda)的分割情形。Number 1~3 表分割區編號, 編號 1 為開機時的啟動分割區, 編號 2 為『虛擬記憶體』的置換分割,而 編號 3 為根目錄、家目錄等目錄所在之分割區。 |
zerofree /dev/sda1 | 將『已刪除資料』以0值取代之,則 VirtualBox 會將其視為未使用的磁碟空間,之後可執行『緊縮(compact)』命令,縮小硬碟映像檔的大小。(注意:除了 swap 之外的分割區,都要重覆此命令;若有多個硬碟,其裝置名稱可能為 /dev/sdbx) |
zerofree /dev/sda3 | |
shutdow -h now | 關閉「虛擬機」,以執行 VirtualBox 的『緊縮(compact)』命令。 |
Fedora 20
如果使用『Live 光碟映像檔』,操作的步驟類似 Fedora 21 所述。但是,一般在安裝 Fedora 20 時多使用『DVD 光碟映像檔』不能直接當『Live 光碟』用,所以要用不一樣的方式。在 VirtualBox 虛擬機中,加入『DVD 光碟映像檔』並切換至『由光碟機開機』。等開機安裝選項時
選擇《Troubleshooting》→《Rescue a Fedora system》,繼續開機程序。接下來有數個視窗,依序說明如下:
- 出現一個名為『Rescue』的文字型式的選擇視窗,點選《Read-Only》。
- 接著出現另一個視窗(亦為文字型式),說明將開啟一個『命令解譯層』。並指示使用者可以『chroot /mnt/sysimage』命令,切換到「虛擬機」原系統。直接按【OK】繼續。
sh-4.2# mount -o remount,rw -t ext4 /dev/sda3 /mnt/sysimage/上圖中共下了 5 個命令,分別說明如下:
sh-4.2# chroot /mnt/sysimage/
bash-4.2# yum install zerofree
. . . . .
bash-4.2# exit
exit
sh-4.2# mount -o remount,ro -t ext4 /dev/sda3 /mnt/sysimage/
命 令 | 說 明 |
---|---|
mount -o remount,rw ... | 將「虛擬機」硬碟的根目錄,重新掛載為『可讀寫』。 |
chroot /mnt/sysimage/ | 將「DVD 光碟」急救模式的根目錄,切換為「虛擬機」硬碟的根目錄,可安裝套件在「虛擬機」的硬碟中。 |
yum install zerofree | 安裝 zerofree 套件,因已將「虛擬機」的根目錄重新掛載為『可讀寫』,將如同在「虛擬機」正常開機狀態一般,所安裝的套件會永久存在。 |
exit | 回到「DVD 光碟」急救模式。 |
mount -o remount,ro ... | 將「虛擬機」硬碟的根目錄,重新掛載為『唯讀』。 |
若是 zerofree 套件已安裝妥,就可繼續進行接下來的步驟:
sh-4.2# df上圖中共下了 6 個命令,分別說明如下:
sh-4.2# mount -n -o remount,ro -t ext4 /dev/sda1 /mnt/sysimage/boot/
Filesystem 1K-blocks Used Available Use% Mounted on /dev/mapper/live-rw 2030995 741999 1284900 37% / devtmpfs 490472 0 490472 0% /dev . . . . . /dev/sda3 17909532 3544836 13431884 21% /mnt/sysimage /dev/sda1 487652 99263 358693 22% /mnt/sysimage/boot . . . . .
sh-4.2# mount -n -o remount,ro -t ext4 /dev/sda3 /mnt/sysimage/
sh-4.2# zerofree /dev/sda1
sh-4.2# zerofree /dev/sda3
sh-4.2# shutdow -h now
命 令 | 說 明 |
---|---|
df | 列出硬碟裝置的分割情形。其中列首為 /dev/sda3 為根目錄、家目錄等目錄所在之分割區, /dev/sda1 為開機時的啟動分割區。 |
mount ...-o remount,ro ... | 將原「虛擬機」系統的硬碟分割區,重新掛載為唯讀。使其為『不可改變』,才可用 zerofree 清除『已刪除資料』。(注意:欲清除資料的分割區,都要重覆此命令;若有多個硬碟,其裝置名稱可能為 /dev/sdbx) |
mount ...-o remount,ro ... | |
zerofree /dev/sda1 | 將『已刪除資料』以0值取代之,則 VirtualBox 會將其視為未使用的磁碟空間,之後可執行『緊縮(compact)』命令,縮小硬碟映像檔的大小。(注意:除了 swap 之外的分割區,都要重覆此命令;若有多個硬碟,其裝置名稱可能為 /dev/sdbx) |
zerofree /dev/sda3 | |
shutdow -h now | 關閉「虛擬機」,以執行 VirtualBox 的『緊縮(compact)』命令。 |
三、將「虛擬機」的「硬碟映像檔」縮小
當「虛擬機」的硬碟映像檔中的『已刪除資料』都已清除為0值,就可以用 VirtualBox 的工具將硬碟映像檔縮小,命令如下:[SiB@Core-i7 ~]$ cd VirtualBox\ VMs\VM-test其中,第一個命令是將『工作目錄』切換到該「虛擬機」所在的目錄,第二個命令才是將「虛擬機」的硬碟映像檔縮小。
[SiB@Core-i7 VM-test]$ VBoxManage modifyhd --compact VM-test.vdi
已測試版本:
- 主 機:Fedora 21 + VirtualBox 4.3.20
- 虛擬機:Fedora 20, 21
沒有留言:
張貼留言
感謝你耐心看完本文,歡迎留下任何指正、建議,筆者會儘快回應。(English is also welcome.)