演示环境: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

问题解决,撒花

卸载要根据系统版本的不同,使用不同的方法

一、不要想着通过Store去卸载,因为那里面只有安装的按钮,没有卸载的按钮

二、在win10系统版本为秋季创意者更新(Fall Creators Update),也就是RS3,也就是1709之前,可以使用lxrun命令进行卸载操作。没有图,没有命令,也不想去研究,因为我早就更新到1903了。

三、 秋季创意者更新之后,lxrun命令就被移除了,执行lxrun只会提示不是内部或外部命令,也不是可运行的程序或批处理文件。这个时候就需要用wslconfig命令来进行卸载了。

列出当前已经安装且随时可用的发行版:

wslconfig /list

列出所有发行版,包括正在安装、卸载和已损坏的发行版:

wslconfig /list /all

卸载已经安装的发行版:

wslconfig /unregister <这里填你要卸载的名称,只能填写使用wslconfig /list或者wslconfig /list /all中所包含的,不是随便填的>

卸载后也可以在 Store 重新安装发行版。

示例:wslconfig /unregister Ubuntu 会将 Ubuntu 从当前可用的WSL发行版中彻底删除,之后运行 wslconfig /list 时该发行版便不会被列出。该发行版所占用的磁盘空间也会被释放。

注意: 卸载发行版时,会永久删除所有与该发行版有关的数据和设置。

四、卸载完成之后最好再做这么一步:到开始菜单中,找到你安装的发行版,右键,卸载,以保证它彻底被卸载了

如果对wslconfig的其他用处感兴趣,可以参考这里: https://blog.z4hd.cf/wslconfig-usage/

一、被阉割过的Android设置界面

初次看到被阉割的这么惨的设置界面,如下图:

系统设置App界面

WTF??网络设置,开发者选项这些熟悉的东西都找不到了,剩下的是一些不痛不痒的功能。。。

既然找不到这些设置,照程序猿的思维,用adb命令总能有办法打开这些消失的界面吧!然而事实却是:由于被阉割了,所以这里面并没有usb调试功能的选项,那这样就没法用adb命令,用不了命令就打不开被阉割的功能。。这TM是死循环啊!

万幸,在软件的设置里面找到了这么个坑爹的设置:

坑爹的启用adb设置

这里只需要点击一下,会提示启用成功,然后就可以用adb shell连接了。。。然而!这功能仅限于模拟器开启状态,如果退出模拟器再打开的话,需要重新再到这里来点一次启用。。。

好了,现在可以使用命令来打开开发者设置界面了:

am start com.android.settings/com.android.settings.DevelopmentSettings

跳出来的开发者选项让人没啥惊喜可言,同样是阉割过的,找不到USB Debug相关选项,这将会导致部分检测是否启用USB Debug的app的部分功能受到影响,比如Helium这款备份恢复软件

既然找不到那就算了吧,我再来尝试一下打开wifi设置。首先先看了一下ip地址设置:

遂使用这个命令打开wifi设置,结果提示我找不到这个Activity:

sagit:/ $ am start com.android.settings/com.android.settings.WirelessSettings
Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.android.settings/.WirelessSettings }
Error type 3
Error: Activity class {com.android.settings/com.android.settings.WirelessSettings} does not exist.

难不成这个模拟器不用wifi的??那就打开以太网设置看看:

sagit:/ $ am start -n com.android.settings/.Settings\$EthernetSettingsActivity
Starting: Intent { cmp=com.android.settings/.Settings$EthernetSettingsActivity }
Error type 3
Error: Activity class {com.android.settings/com.android.settings.Settings$EthernetSettingsActivity} does not exist.

同样是找不到Activity。。。。OMG!

一番探索下来,这个模拟器的网络部分算是残废了,都没设置的地方让你修改的,软件设置里面也没有相应选项,网络代理设置什么的那就更不行了,除非通过一些特殊手段,比如VPN,比如SSTap+SS等。扯淡的是,模拟器还自带了Google Play Store。。。开发人员们,你们为啥就没把它给顺手阉割掉呢!?

二、坐等新的发现

槽点一:在windows上默认打开后就自动开启windows proxy

这个设置对于平常大众使用还是挺贴心的,省的再手动去点击开启,但是对于使用科学上网的系统代理功能的我来说,简直是无法忍受。每次打开软件,代理就被改变了,于是在Charles的帮助页面上找到了关闭之法:

相应的,在软件设置的这里:

选择Proxy菜单下的Proxy Settings…
取消勾选Enable Wondows proxy on launch

槽点二:字体实在是太难看了,想改一下但是改了又没效果

如下,在windows上看着实在是难受,就跟个蚯蚓似的,尤其是下面那块

但是改了后,界面上的字体还是原来的样子,根本就没效果:

改完字体后界面看上去还是那样

但是神奇的是,下部的content那边字体确实是变成了设置的字体了:

content部分字体已改变

马勒戈壁。。。为什么只能改这里的字体!!!

槽点三:。。。。还没想到,后续再补充

本文转载自: https://www.blackeep.com/1989.html

WordPress鼠标点击特效,可以实现wordpress博客的背景显示”富强”, “民主”, “文明”, “和谐”, “自由”, “平等”, “公正” ,”法治”, “爱国”, “敬业”, “诚信”等文字效果。加上了该段代码,可以让你的网站,在用户任意位置点击鼠标,显示上面文字的特效。

源代码如下,尽情复制:

<script type="text/javascript">
/*  深夜笔记博客  www.blackeep.com  */
var a_idx = 0;
jQuery(document).ready(function($) {
$("body").click(function(e) {
var a = new Array("富强", "民主", "文明", "和谐", "自由", "平等", "公正" ,"法治", "爱国", "敬业", "诚信", "友善");
var $i = $("<span/>").text(a[a_idx]);
a_idx = (a_idx + 1) % a.length;
var x = e.pageX,
y = e.pageY;
$i.css({
"z-index": 999999999999999999999999999999999999999999999999999999999999999999999,
"top": y - 20,
"left": x,
"position": "absolute",
"font-weight": "bold",
"color": "#ff6651"
});
$("body").append($i);
$i.animate({
"top": y - 180,
"opacity": 0
},
1500,
function() {
$i.remove();
});
});
});
</script>

将上面的代码添加到主题页脚(footer.php)文件的 wp_footer() 一行之前即可,然后保存代码上传到服务器,即可实现,如下图红框所示:

注:这里的网络调试包括但不限于使用Wifi,以太网,甚至移动数据网络等

一、开启方法

手机如果插入了数据线,那么就可以使用下列命令来开启网络调试功能。(5555是端口号)

adb tcpip 5555

二、关闭方法

如果手机插入了数据线,可以用这个命令来关闭网络调试功能

adb usb

本文转载自: https://www.moerats.com/archives/612/

说明:Ubuntu 18.04改变挺大的,内核也直接升到了正式版4.15,而BBR内核要求为4.9,也就是说满足了,所以我们不需要换内核就可以很快的开启BBR,这里简单说下方法。

* 提示:Ubuntu 18.10依然可以用该方法开启BBR,而对于19.04、貌似官方直接给你开启了BBR,不需要重复开启了。


1、修改系统变量

echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf

2、保存生效

sysctl -p

3、查看内核是否已开启BBR

sysctl net.ipv4.tcp_available_congestion_control

显示以下即已开启:

# sysctl net.ipv4.tcp_available_congestion_control
net.ipv4.tcp_available_congestion_control = bbr cubic reno

4、查看BBR是否启动

lsmod | grep bbr

显示以下即启动成功:

# lsmod | grep bbr
tcp_bbr                20480  14


本篇讲述如何制作WinPE。我参考了微软的技术文档:
https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/winpe-create-usb-bootable-drive

首先打开开始菜单,找到Windows Kits并展开,右键“部署和映像工具环境”,以管理员身份运行,如下图所示:

在弹出的cmd窗口中,键入以下命令并按回车。此命令的目的是将PE的工作文件创建到你指定的文件夹中

# 要制作64位WinPE,使用下面这个命令。强烈建议使用64位的WinPE
copype amd64 C:\WinPE_amd64
# 如果是要32位的WinPE,则使用这条命令
copype x86 C:\WinPE
# WinPE和WinPE_amd64目录可以更换成你想要的名称,我自己怕麻烦就选择不更改
PE复制完成

接下来就是将PE烧录到U盘中了,使用如下命令:

# 64位
MakeWinPEMedia /UFD C:\WinPE_amd64 P:
# 32位
MakeWinPEMedia /UFD C:\WinPE P:

注意,P:是U盘的盘符。该命令会格式化U盘(FAT32格式),所以建议找个小容量U盘或者SD卡来操作(几年前淘汰下来的存储设备又可以重新发光发热)。盘符一定不能输入错误,否则就会呵呵。烧录时间根据存储设备的性能不同而不同,请耐心等待结束。

C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Deployment Tools>MakeWinPEMedia /UFD C:\WinPE_amd64 E:
WARNING, ALL DATA ON DISK DRIVE E: WILL BE LOST!
Proceed with Format [Y,N]?Y
Formatting E:...

Setting the boot code on E:...

Copying files to E:...


Success

制作完成,可以把U盘插到VMWare中来测试一下效果:

WinPE界面

Emm…看到这个界面就表示WinPE已经制作成功了,这个就是微软的,原汁原味的WinPE。现在可以通过命令行来执行各种命令了。

好了,本篇教程就到这里,下次会讲如何个性化WinPE

首先,让我们去从微软官网上下载ADK。下载地址:
https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/download-winpe–windows-pe

微软官网上的说明

然后,确认一下要制作的WinPE的内核版本。如果要制作1809版本及以上的,需要下载ADK和WinPE插件两个程序;如果是1803或者更早期的内核,则只需要下载一个ADK程序即可。注意,两个ADK并不是同一个程序。这里我选择使用1809的版本

下载完成后得到两个程序,上面一个是ADK,下面那个是WinPE Add-on

ADK程序

首先运行上面个adksetup.exe,因为目的是制作WinPE,所以在选择功能的时候,除了部署工具以外的其他功能统统用不到。点击安装后等待完成安装。

选择“部署工具”即可

接着安装下面那个adkwinpesetup.exe。过程中可能会多次跳出下面这个对话框,表示没有网络连接,这种情况下首先检查自己的网络,确认网络没问题的话只需多点几次Retry,基本就能下载成功。

没有网络连接?

下载过程中请耐心等待。。。。下载完成之后,WinPE的部署环境就搭建好了