歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> VirtualBox 壓縮VDI硬盤

VirtualBox 壓縮VDI硬盤

日期:2017/2/28 15:45:05   编辑:Linux教程

今天清理了guest系統之後,發現應該壓縮一下虛擬硬盤,在網上找了了一下,都是用 vboxmanage 工具,然而照做下來,就是不成功。

最後找了了官方文檔,才發現原因。

首先,看 vbox的官方文檔:

http://www.virtualbox.org/manual/ch08.html#vboxmanage-modifyvdi

VBoxManage modifyhd <uuid>|<filename>
[--type normal|writethrough|immutable|shareable|
readonly|multiattach]
[--autoreset on|off]
[--compact]
[--resize <megabytes>|--resizebyte <bytes>]

With the --compact option, can be used to compact disk images, i.e. remove blocks that only contains zeroes. This will shrink a dynamically allocated image again; it will reduce the physical size of the image without affecting the logical size of the virtual disk. Compaction works both for base images and for diff images created as part of a snapshot.

For this operation to be effective, it is required that free space in the guest system first be zeroed out using a suitable software tool. For Windows guests, you can use the sdelete tool provided by Microsoft. Execute sdelete -z in the guest to zero the free disk space before compressing the virtual disk image. For Linux, use the zerofree utility which supports ext2/ext3 filesystems.

Please note that compacting is currently only available for VDI images. A similar effect can be achieved by zeroing out free blocks and then cloning the disk to any other dynamically allocated format. You can use this workaround until compacting is also supported for disk formats other than VDI.

關鍵之處正在於 sdelete 應該使用 -z 選項 ,而網上所以的方法都說是使用 -c 選項,這個浪費了近3個小時。

MS的文檔也說的明白:

http://technet.microsoft.com/en-us/sysinternals/bb897443.aspx

Using SDelete

SDelete is a command line utility that takes a number of options. In any given use, it allows you to delete one or more files and/or directories, or to cleanse the free space on a logical disk. SDelete accepts wild card characters as part of the directory or file specifier.

usage: sdelete [-p passes] [-s] [-q] <file or directory> ...
sdelete [-p passes] [-z|-c] [drive letter] ...
-a Remove Read-Only attribute
-c Clean free space
-p passes Specifies number of overwrite passes (default is 1)
-q Don't print errors (Quiet)
-s or -r Recurse subdirectories
-z Zero free space (good for virtual disk optimization)

所以,總結一下,正確的方法應該是這樣:

1, 在guest os 中清理系統, windows的話可以再硬盤碎片整理一下


2, 在 guest os 中 使用 sdelete -z ; linux 使用 zerofree

3, VBoxManage modifyhd <uuid>|<filename> --compact

Copyright © Linux教程網 All Rights Reserved