琪依坤 | 羽毛在飛

Good Luck To You!

虚拟机Guest OS瘦身

2013/03/22 updated.

大杀器

Step1. 已删除文件的扇区置零

Guest OS=Windows,使用SDelete。下载地址:http://technet.microsoft.com/en-us/sysinternals/bb897443.aspx。在Guest OS里执行:sdelete -c c:\ (c:\ d:\e:\ 指定盘符)

Guest OS=Linux,使用zerofree。zerofree的困难之处是必须要将目标磁盘mount为只读,有各种办法处理起来都不是很方便。经过多种尝试,可以使用内含zerofree的Parted Magic启动,只读加载硬盘,使用zerofree进行置零。Parted Magic下载: http://partedmagic.com/doku.php?id=downloads#.UUwvexzUM3A。使用其他的Linux LiveCD也可以,不过我用了CDLinux和Gentoo,启动后,mount  -n -o ro -t ext4 /dev/sda1 /meida/your mount folder之后,再执行其他命令,会出现-bash: commond not found,不是很清楚什么原因造成的。启动Parted Magic后,mount -n -o ro -t ext4 /dev/sda1 /media/sda1,zerofree /dev/sda1,执行时间很长并且无任何提示。

VMWare Player在执行完SDelete,运行cmd: 

VMTools ui don't exist so do the shrink in an (elevated) cmd prompt:

cd "C:\Program Files\VMWare\VMTools"
VMwareToolboxCmd.exe disk shrink c:\

Step2. 压缩

关闭虚拟机,使用VBOXManage modifyvdi xxx.vdi compact进行压缩

========================================================

 

==OLD==

瘦身原理: 由于虚拟硬盘不会再利用已删除文件的区域,造成虚拟硬盘不断增大。而虚拟机本身带的瘦身工具,只针对磁盘扇区字节都是00的情况。不论Guest OS是Windows还是Linux,删除文件仅仅是将文件分配表做改动,实际文件所占位置没有置零,造成虚拟机的瘦身工具无用武之地。Guest OS是Windows的情况,比较好处理,网上很多教程,下载SDelete,在虚拟机里运行,然后关闭虚拟机,使用虚拟机的瘦身工具就可以减肥了。Guest OS是Linux的,网络上只是简单介绍了一下,没有详细步骤,估计一般都卡在只读加载硬盘这里,至少我使用init 1直接挂在启动界面无反应。由于装的Guest OS是Ubuntu,这里也只能以Ubuntu为例来说明。下面的方法来源于网络,必要地方加了补充。不仅仅针对VirtualBox,其他虚拟机也适用,比如VMWare。

===============================

如果guestos是windows的话比较简单,网上有很多教程。
对于ubuntu的情况,有不少文档介绍使用remount 根文件系统为read only的方法(init 1),这种方法在文件系统为ext4时无效。
所以在这里我们采用另一种方式来实现。

1.) Install “zerofree” on your virtualbox guest machine.
2.) Boot to safe mode (recovery mode) where you can access your root partition (/dev/sda1).
进入recovery mode的方式:ubuntu启动时按住右側shift,就会出现GRUB选项,进入recovery的menu,然后选择最后一项root以根用户进入
3) vi /etc/fstab
   编辑fstab,将/dev/sda1的mount方式改为ro 。具体方法请自行查阅相关资料。
注释掉原来/dev/sda1那行
增加:
UUID=xxx /dev/sda1 ext4 ro 0 0
4.) Restart to safe mode again and then Run “zerofree /dev/sda1″
5.) Shutdown the virtual machine and run “VBoxManage modifyhd –compact /path/to/virtualboximage.vdi”
6.) Enter the recovery mode again, select "root"--->Enter "mount -o remout,rw /" ----> Enter "vi /etc/fstab", change the mode from "ro" to "rw" ---->save and exit
7.) Restart

===============================================

 

找到一个详细介绍瘦身的,转贴如下。http://cypromet.site90.net/blog/?p=41

另外,由瘦身有想到能否直接使用物理硬盘和分区,伟大的VBOX也提供了方法,同样转贴在下面。http://blog.163.com/ksharp_dabu/blog/static/1954880222011102121517766/

 

VDI大瘦身

Promet | 2010 年 06 月 09 日

好不容易終於找到一些比較進階的東西可以寫了。(拖

虛擬化大行其道的今天,相信很多人家中都應該有裝VirtualBox/VMware玩玩才是。

一般的家用虛擬機器,由於不涉及重大的操作,在建立虛擬硬碟的時候,多會選用「動態延伸存放功能」,就是說,當我建立一個20GB的虛擬硬碟的時候,並不會馬上佔用20GB的硬碟空間,而只有一個300多KB的映像檔,隨後映像檔會隨著實際的使用而增長,直到設定的20GB完全用完為止。這樣的功能,聽起來很有彈性,但我玩了VM三、四年,直到最近才發現這種功能有個很大的問題 - 虛擬硬碟只會大不會小!如果一度在虛擬系統內安裝了很多軟體,再將它們統統移除,你會發現,那極速膨脹的硬碟映像檔,根本不會隨著軟體的移除而縮小,最後只會越來越肥大……

我使用的VM軟體是VirtualBox,Google一下的話,會發現處理這種情形的方法有很多,不過再仔細看看,大部份的相關資料都有一段時日了,而且要命的是眾說紛云,有人說這個方法好,有人說那個方法不行…….事情到最後,是我新安裝好、編譯了近一週的Gentoo被玩壞了。Orz

可幸的是,後來我在壓縮我的Arch Linux虛擬硬碟的時候,取得了很好很有用的經驗。

其實要壓縮VDI的體積只需兩步功夫:
1.將硬碟映像檔內的資料變得分散
2.利用VirtualBox的文字模式管理指令VBoxManage將VDI壓縮

不完成第一步的話,使用VBoxManage的壓縮指令其實是得不到效果的。如果你VBox裡裝的是Windows,那麼第一步很簡單,微軟本身提供了一個名為SDelete的工具,只要運行sdelete -c就可以了。

如果你的虛擬機器裡面裝的是Linux的話,傳統上可以用dd指令來完成這個效果,不過dd指令本身很複雜、效率很慢,而且據說在壓縮前反而會讓映像檔急速脹大;鑑於dd的種種不便,有人就開發了zerofree這個小程式取代。你只需要下載zerofree的原始碼,解壓縮,再直接用make編譯好,一個zerofree的執行檔就會出現了,你可以將它複製到/usr/bin或/usr/sbin中方便之後使用(個人覺得不複製也沒關係,不過一定要記得zerofree擺放的位置)。

接下來的步驟才是問題所在:很多人建議直接在你的虛擬系統裡轉到Single User Mode(init 1)使用zerofree,個人卻發現這個方法不怎麼可行。這個方法是建議在Single User Mode中remount根目錄所在的硬碟,然後執行zerofree,但我在進行這個操作時,卻遇到不少問題。首先是系統經常抱怨Device /dev/hda1(我的根目錄硬碟) is busy而不能重新掛載;就算掛載成功,zerofree運行起來也怪怪的,最終導致我的Gentoo毀於一旦了……..

後來終於在VBox的Trac裡一個討論串中找到一個可行的辦法 - 用LiveCD執行zerofree!!

討論串裡面的人建議用Ubuntu的安裝光碟作為執行zerofree的LiveCD,我個人則建議可以找更輕便的LiveCD代替,比如Parted Magic或者Gentoo的Minimal LiveCD都是不錯的選擇(個人更推崇後者,因為後者只有純文字模式操作,boot起來快多了)。啟動之後,先掛載你的Linux系統的硬碟(先假定你的硬碟是hda1):
# mount -n -o ro -t ext4 /dev/hda1 /mnt/hda1記得必須要將硬碟掛載成ro(唯讀)
然後執行zerofree
# /mnt/hda1/usr/bin/zerofree /dev/hda1若果當初將zerofree放在虛擬系統的/usr/sbin裡的話,改成/mnt/hda1/usr/sbin/zerofree即可
雖然zerofree號稱速度快,但個人的經驗是,兩個系統(Arch和Debian)執行zerofree的時間分別需要90分鐘和75分鐘,所以請耐心等待,不要以為沒反應就覺得出事了。

等到zerofree執行完畢後,可以安全卸載硬碟,然後關閉虛擬機器。這時候再用VBoxManage指令壓縮vdi:
VBoxManage modifyvdi XXX.vdi compact
要留意VBoxManage指令要以創建該VDI的使用者的身分執行,比如你以用戶tom身分建立了該VDI,必須要以tom的身分下此指令,否則即使用root亦不能對該vdi進行壓縮;此外VDI亦必須要標明其絕對路徑,比如上面的XXX.vdi是放在/home/tom/.VirtualBox/XXX.vdi裡面的話,你在指令中要清楚指示,所以上面的指令不能夠照搬,否則VBoxManage會抱怨出錯。

VBoxManage指令事實上相當好用,我的Arch和Debian兩個虛擬硬碟在壓縮前分別為4.5GB及4.1GB,壓縮之後只有2.5及2.9GB而已,差異可謂相當的大。

 

 

 

VirtualBox直接使用物理硬盘(linux,windows XP)  

2011-11-21 14:15:17|  分类: 虚拟机|字号 订阅

 
 

Ps:这个还是比较有用的,因为本人也长用这个命令,省去了在虚拟机中从新安装系统的时间,还有我那可怜硬盘损害,virtualbox的命令其实还用很多,最好能取官网看下他的相关文档,o(︶︿︶)o唉,命令一大堆的 ,挑自己要的 学下就行了,我常用的还有就是conver命令了,因为毕竟还是觉的vm的更加强大些。


VirtualBox直接使用物理硬盘(linux,windows XP)
2010-10-23 14:14

(引用:http://hi.baidu.com/%C3%FA%D3%E3 ... ceacc37b894736.html

VirtualBox直接使用物理硬盘(linux,windows XP)
2010-09-14 08:31

    安装VirtualBox(略)建议使用最新版的程序,旧版可能不支持
    官方:http://www.virtualbox.org/
    将当前用户加入到vboxusers用户组sudo usermod -G vboxusers -a `whoami`
    需重新登录
    对指定的硬盘设备添加访问权限sudo chmod o+rw /dev/设备(如:/dev/sda 整块硬盘,/dev/sda1 某分区)
    建立一个虚拟硬盘镜像VBoxManage internalcommands createrawvmdk -filename ~/winxp.vmdk -rawdisk /dev/sda -partitions 1 -relative -register
    新建一虚拟机并指定上面建立好的虚拟硬盘镜像(略)

For Windows:

以下测试有效:

1.运行cmd,cd进入你的VirtualBox目录,如: cd C:\Program Files\Sun\VirtualBox
2.命令行运行VBoxManage.exe,如:VBoxManage internalcommands createrawvmdk -filename d:\x30.vmdk -rawdisk \\.\PhysicalDrive1
\\.\PhysicalDrive1 表示我的机器上的第二块硬盘,\\.\PhysicalDrive0是第一块,\\.\PhysicalDrive3是第三块,以此类推。
网上有朋友说在windows 的磁盘管理中能看到硬盘的分区路径,格式如\\.\PhysicalDrive0。但是我没有找到,如果有朋友能知道这个怎得来的请告诉我,谢谢。

附 VBoxManage internalcommands createrawvmdk 命令:
VBoxManage internalcommands createrawvmdk 创建一个vmdk格式的硬盘
-filename <filename> vmdk格式的硬盘所对应的vmdk文件
-rawdisk <diskname> vmdk文件所对应的物理硬盘
[-partitions <list of partition numbers> vmdk文件对应的物理硬盘的分区
[-mbr <filename>] ] 将这个文件包含的引导记录写到vmdk文件
[-register] 将这个新创建的硬盘注册到virtualbox
[-relative] 激活这个新创建的硬盘的分区

    步骤参见for linux,其中步骤2和3不用
    步骤4中的vmdk文件和物理硬盘的分区路径使用windows的格式
    物理硬盘的分区路径的获取
    在windows的磁盘管理中能看到的
    格式如\\.\PhysicalDrive0

注意事项:

    直接使用物理硬盘有一定的危险性,不建议新手使用.如仅仅为了主机和虚拟机资源互访,不妨使用“主机共享文件夹,虚拟机映射磁盘”的方式来实现.
    不要主机和虚拟机同时访问同一分区的文件(尤其是写操作),可能造成文件系统损坏.


附录:
VBoxManage internalcommands createrawvmdk 命令

VBoxManage internalcommands createrawvmdk   创建一个vmdk格式的硬盘
   -filename <filename> vmdk格式的硬盘所对应的vmdk文件
  -rawdisk <diskname>   vmdk文件所对应的物理硬盘
[-partitions <list of partition numbers>   vmdk文件对应的物理硬盘的分区
[-mbr <filename>] ] 将这个文件包含的引导记录写到vmdk文件
[-register] 将这个新创建的硬盘注册到virtualbox
[-relative] 激活这个新创建的硬盘的分区
例如:VBoxManage internalcommands createrawvmdk -filename   d:\xVMData\host_harddisk\d_.vmdk -rawdisk \\.\PhysicalDrive0 -partitions 5 -mbr winxp.mbr -relative
更多精彩请关注公众号:

发表评论:

Powered By Z-BlogPHP 1.7.2

沪ICP备12032294号-1