演示环境:Windows 10 主机 + Ubuntu 18.04 客户机 + VMware Workstation Pro 15,虚拟机磁盘设置在一块256G的SSD上

目标:虚拟机磁盘占用了Windows 10主机的SSD大量空间,现在要压缩这块vmdk来减少磁盘占用

这块vmdk的设置如下,并没有预分配磁盘空间:

虚拟磁盘的设定

看,它占了95GB的SSD空间!简直不可思议!实际上:

实际上这个盘只用了9.5GB

实际上他喵的才仅仅用了9.5GB啊!那么问题来了,该如何才能把那么大的磁盘空间压缩压缩?

接下来就是痛苦的尝试各种 解决方案:

  • 1. 很自然的就想到直接去点击设置里面的那个压缩按钮,然后1秒钟,提示压缩完成。满心欢喜原来压缩这么快,然后看了一下windows资源管理器中的文件大小就知道,根本就没给你压缩
  • 2. dd命令填充0,然后删除文件,然后关闭客户机,然后再去点击那个压缩按钮。过程我就不罗嗦了,dd的过程花了好几分钟,结果还然是1秒钟提示压缩完成。
  • 3. 首先先做个defrag。 sudo e4defrag / 执行完之后再重复2中的步骤,结果依旧是1秒钟。 fuck you~
  • 4. 在3的步骤中执行到删除文件后,再加上一个压缩命令 sudo vmware-toolbox-cmd disk shrinkonly 。结果是不支持?
emm…..?

为什么他喵的不支持???看了一下这个错误的搜索结果,大致分为两种情况:有磁盘快照或者是预分配磁盘。然而我并没有使用任何磁盘快照,也不可能去预分配磁盘。

  • 5. 既然上面这些办法都不好使,那么就用vmware宿主机中的vmware-vdiskmanager吧!执行结果是:Failed to shrink the disk ‘D:\xxx.vmdk’ : An error occurred while writing a file; the disk is full. Data has not been saved. Free some disk space and try again (0x8).

disk is full。。。嗯,什么意思?是说我宿主机的磁盘空间不够了吗?

于是我默默的查看了一下D盘的可用空间,提示为79GB。难道说我得有150GB剩余空间才能成功压缩吗?

抱着试试看的想法,把SSD盘中的乱七八糟的文件搬到其他盘中,现在剩余空间是135GB,先来试试看好不好用。

剩余135GB,试一下看看

首先是关闭客户机 ,以防万一,我把vmware也给X了,重新执行命令。。。

开始压缩了。。。

喔激动一下,它开始shrink了,看来确实是宿主机磁盘空间不够了,所以shrink不了?

压缩完成之后,这个vmdk的大小变成了:

成功压缩了

吃惊,大小居然能压缩到8.83GB这么小!


总结:通过上述实践过程,发现一个要压缩Linux格式的vmdk文件大小的前提条件,而这个前提条件却是各种高票回答都没有提及的:存放vmdk文件的磁盘一定要有足够大的可用空间才能压缩,否则就会1秒钟或者压缩失败。由于磁盘已经被我压缩掉了,而且还是那么多操作都做过来的,所以有些疑问:是否真的需要这么多步骤?是否只要dd后删除dd出来的文件,然后直接点击vmware设置中的压缩按钮就可以了?这些就留待日后有时间吃饱了撑的慢慢测试了

问题现象1:可以看到出错对话框上有类似PUR-Authentication failure提示,下一步可能会让你登录Microsoft账户,等你满心欢喜输入好账号密码后,提示你个错误界面

问题现象2:无法登录microsoft账户

解决思路:不要着急按照百度上的提示来,什么新建用户,什么重置电脑,虽然能够达到所需的效果,但是:重置电脑后那么多软件一个个再重新安装重新配置也得花上好半天功夫;新建个用户看上去省事,但是这是不是代表只能用新建的用户去下app?如果真的是这样,那就跟重置电脑没太大区别,还不如重置电脑了。。。

于是乎,在Google上有一个用户也发现了类似问题: https://social.technet.microsoft.com/Forums/en-US/7e3c7ee9-0ac5-4357-8247-6c439b53d415/purauthentication-failure-when-installing-an-app-from-microsoft-store-from-hybrid-azure-ad-joined?forum=win10itprogeneral

按照他的说法,只要启动了Microsoft Account Sign-in Assistant服务,就可以登录了

回过头看了一下系统的服务,确确实实,这个服务被禁用了。。。然后就是手动恢复这个服务,然后后面就相当顺利的登录账号,下载app

问题解决,撒花

最近从Eclipse转到Android Studio后,发现了不少的问题,其中一个让人头疼的问题是不能用AS来Debug,这一点是无法让我接受的。趁着周末有空就研究一下这个问题。

调试用的手机是小米3电信/联通版,AS版本是1.3.2 build 141.2178183,具体的问题如下:

QQ20150927213926

AS中点击Debug选择设备后就卡在了这里:Waiting for process:

相应的,手机上则卡在了这个界面:

Screenshot_com.example.luci.myapplication_2015-09-27-21-40-39

只是偶尔一两次可以进行Debug,如果点击Run则一点问题都没有。Oh no!

起初怀疑是手机问题,但是很快就被我否定了,因为之前用Eclipse调试的时候没出现过这种问题,而且手机插在别的有AS的电脑上也没出现这种问题。

于是怀疑是电脑问题,为此我特意准备了一个虚拟机,安装同样的操作系统,用同样的软件搭建同样的编程环境,却发现在虚拟机中一切正常,能正常调试!看来是电脑的问题了

然后开始怀疑驱动,由于之前用的是刷机精灵的驱动,于是我把驱动删了,换上了国外的某个软件下载的驱动,尝试后发现不行。删除驱动后我下载了我最反感的360,让这货给我装驱动。结果这个360驱动居然也不行。。。

百思不得其解后,百度找了下,找到一篇帖子提到了这个问题。按照帖子里讲的,禁用MDB设备,结果无效。。。到此我心想,换台手机试试呢?于是我找出了N年前的一台2.3.5系统的手机插上去后居然能正常调试,非常好使,至此我开始迷糊了。。。

在Goodle上找了一会儿,就找到一个StackOverflow上说项目的设置问题,把android:debug去掉即可。但是我在我的项目中压根就没看见有过这个属性,所以排除之。

结束语:折腾了一天结果还是没搞明白到底是什么原因,我也不想上论坛发帖子去问,因为这种帖子一发就铁定石沉大海了,就算有人回复那也是以灌水回复捞积分的居多。说句实话,百度知道上面真正懂技术的人是少之又少,大部分问题的回答都是牛头不对马嘴,完全不看问题问的是什么就在那边乱回答,参考意义实在是不大