细数在Windows 10配置Software RAID1时所遇到的坑

Windows在日常应用外的场景,给我的印象一直都不太好,特别是排错方面,异常麻烦,遇到莫名奇妙的错误,要么没有日志,要么事件查看器中只有个错误代码,或者输出一个内容不仅又臭又长还根本看不出什么问题.log文件。像Windows更新突然无法安装,Visual Studio或者某个程序一直安装失败或者别的Windows组件的各种疑难问题,除了重装Windows还有什么解决办法?所以除了日常应用,其余的一直都在避免依赖Windows。

最近给机子加了个4TB的机械硬盘,其实一开始是打算买两个4T组RAID1的,不过考虑到没那么多重要数据需要R1,而且目前也有一个1TB的,所以就只买了一个4T的,打算从4T中单独拿1T出来和旧的1T组R1。

两个硬盘容量不一样,首先就排除硬RAID了,其实我一开始也没考虑硬R,虽然我的主板带RAID功能,但得考虑更换主板的情况。如果购买阵列卡,就又得考虑阵列卡损坏,可能你会说哪有那么快损,没那么快损就是个大问题,到时坏了买不回一样的咋办?所以剩下的选择自然只有软RAID了。

第一个坑:BitLocker

在Windows上的软R1就是mirrored volume,需要把硬盘转为“动态磁盘”,第一个坑就来了,动态磁盘不支持BitLocker!

Dynamic disks are not supported by BitLocker. Dynamic data volumes will not be displayed in the Control Panel. Although the operating system volume will always be displayed in the Control Panel, regardless of whether it is a Dynamic disk, if it is a dynamic disk it cannot be protected by BitLocker.

至于为何不支持,我目前也没找到解释,自然我也不会理解为什么不能支持动态磁盘,这不是针对分区的加密吗?为什么还会依赖磁盘格式?

当然对于此问题也不是没有解决办法,那就在动态磁盘的卷里面创建VHD,然后在对VHD启用BitLocker。不过既然用VHD,我何不在两个硬盘上各创建一个1TB的VHD,然后基于这两个VHD创建mirrored volume呢?这样我就不用转移现有近1T的数据进VHD了。

第二个坑:VHD与动态磁盘

创建好VHD,附加到系统,右键,我才发现VHD是不能转换为动态磁盘的:

这里我又再次无法理解微软的操作了,既然你是虚拟硬盘,为什么不能提供与真实硬盘一样的功能?你限制这限制那是什么鬼操作?Linux有给loop device的功能加各种限制吗?

提到这个限制,我就想起Windows以前是不支持U盘多分区的,当然Windows 10后来某个更新后开始支持了。也是个无法让人理解的操作。

那好,既然你识别为VHD后不给转换为动态磁盘,那我把VHD作为虚拟机的虚拟磁盘,虚拟机识别为普通磁盘,自然可以转换为动态磁盘了吧?

于是使用Virtual Box添加VHD作为虚拟磁盘:

成功转换为动态磁盘:

不过附加到物理机上后,我才发现微软早有所准备:

动态的VHD直接显示为Invalid……

后来找了下,发现Windows有个Storage pool的功能,也可以用来创建mirrored volume,试了下,的确支持VHD:

Two-way mirror即RAID1:

创建过程一切顺利,正当我开开心心地开始用时,问题又来了……

第三个坑:diskpart

如果你去网上找系统启动后自动attach VHD的方法,你会找到利用diskpart的教程,类似我下面的操作:

也有使用PowerShell的Mount-VHD的,不过我没装Hyper-V(装了后就不能用VMWare了),所以不能使用Mount-VHD。

然后问题又来了,我发现在diskpart里面,attach vdisk居然会莫名卡在100%的位置:

在事件查看器里面你也可以找到对应的错误:

告诉你出错,丢你一个错误代码,嗯,我也知道出错了,那错误详情是什么?你这个错误代码代表什么,网上也没资料,你倒是告诉我啊?

如果在attach第一个vhd时卡住了,需要过好久才会出现successfully的提示,这里卡住也不是还没attach到系统,而是已经attach了,但是不知道遇到什么情况停了,因为在这里停了,自然暂时也不会attach第二个vhd。所以在Windows的storage pool会以单盘模式启用,次数多了,会提示你reset第二个硬盘。

既然你喜欢停在100%,但是又不影响attach,那我让你两个同时attach不就好了?所以又有了改进版:

暂时完美,两个同时停在100%也不影响使用。接下来的问题就是开机运行了。

第四个坑:计划任务与快速启动

这里的“At startup”就是个坑,你会发现,快速启动的情况下,这个任务不会运行……

当然也可以改成用户登录时调用等别的触发条件,然后第六个坑就来了。

第五个坑:快速启动

快速启动导致了第五个坑,第五个坑还有别的方法解决,不过这里的坑是真的不知如何是好。

未attach VHD前,通过前面写的批处理成功attach VHD后,如果下次系统是快速启动的,attach VHD就会提示你已经attach,关键是,提示已经attach了,Storage pool里面也不会看到这两个VHD创建的pool:

既然你说已经attach了,那detach再attach总可以吧:

微软:“不好意思,也不行。”

后来我试了下不通过diskpart,使用磁盘管理下的Attach VHD菜单,不会遇到diskpart在100%卡住,也不会有快速启动时,VHD提示已attach的问题:

这里我又不太明白了,磁盘管理和diskpart难道attach VHD使用的是不同的实现?这又是什么操作……

难道我得放弃开机自动attach VHD,转而每次手动到磁盘管理attach?

后记

没想到在Windows上组个软RAID也能这么艰难。莫名奇妙的功能限制;不同的工具,同一功能不同的实现;PowerShell中的Mount-VHD也无法理解为何硬要依赖Hyper-V,为什么不见你diskpart或磁盘管理要求Hyper-V?系统提供VHD的支持,却又不提供开机自动attach的实现。还有快速启动导致的功能异常……

如果是在Linux上,这是个很简单的事情,根本不会有不允许基于虚拟硬盘建立RAID、物理卷不允许启用加密之类的限制,更不会限制U盘不允许多分区这种奇葩的操作。对于虚拟磁盘,按挂载物理盘的方式加个记录就可以系统启动时自动挂载。

我现在倒要考虑是不是要另外组台机子运行Linux专门作储存了。

Cygwin/X X Server TCP direct connection

网络上大都是SSH X11 Forward的资料,鲜有Client直连Server的,某些环境下,还是希望能直接一点。

安装Cygwin/X

首先要安装Cygwin/X,具体步骤,官方文档已经写得很清楚了:Installing Cygwin/X

启动Cygwin/X X Server

Cygwin/X X Server默认仅监听Unix Socket,非本地的Client连接需要启用TCP协议,加入启动参数”-listen tcp”即可,详见官方文档:xserver-nolisten-tcp-default

可以通过修改快捷方式XWin Server加入该启动参数:

或者直接通过CLI启动XServer:

允许X Client连接X Server

这个有两种方法,一种是在Cygwin/X上添加允许连接的IP,另一种是手动在X Client上设置MIT-MAGIC-COOKIE-1。

方法一:使用xhost添加允许连接X Server的IP

在Cygwin Terminal下执行:

Cygwin/X X Server默认的Display是0,如果你改成了其它的话,请自行修改DISPLAY的值。

方法二:MIT-MAGIC-COOKIE-1

方法一偶尔用着用着,就报MIT-MAGIC-COOKIE-1的错误,所以有了方法二……

查看MIT-MAGIC-COOKIE-1

在Cygwin Terminal下执行:

如图,我X Server的IP是192.168.1.5,copy输出的那行记录:

到X Client上添加MIT-MAGIC-COOKIE-1

进入要连接到此Cygwin/X X Server的系统,也就是X Client的系统的终端,执行:

如图:

设置DISPLAY环境变量

在X Client上执行(记得修改XServerIP):

Cygwin/X X Server默认的Display是0,如果你改成了其它的话,请自行修改命令。

运行X programs

在X Client的系统上直接执行X programs即可,例如xclock。

由于不是使用SSH X11 Forward,因此断开SSH后仍可以继续使用,当然你得保证SSH断开后,X programs还能继续运行,可以借助screen实现:

 

TIP:C/S之间链接一断,X programs就会退出,所以用IDE记得设置自动保存(最好是周期性自动保存)。

东莞城院校园网 – 网络共享限制解除工具

刚考完试那天,学校新版的网络刚好部署到了我的宿舍区,当天探究了一下,有了点发现,不过刚考完试,浪了好久,所以现在才弄。

来看本文的,相信都懂什么情况,我废话也少说。

 

注意事项

  • 程序目前是预览版,校园网共享的检测也不好触发,因此未经我长时间测试,不保证效果,有兴趣,有需要的欢迎尝试使用,遇到问题可在本文留言或在GITHUB上提交ISSUE。
  • 程序需要一直运行才能解除限制,且只能解除运行了此程序的计算机的限制,也就是说,你在你的Windows计算机上运行了此程序,和你使用同一个网络,但未运行此程序的计算机理论上还会受到限制,但即使使用了相同网络的其它设备受到了限制,运行了此程序的计算机也能正常上网。
  • 程序需要一直运行才能解除限制,且使用同一个网络的所有设备均运行了此程序才能解除限制(主要是避免强制下线)。当然目前手机无法运行
  • 暂不清楚程序对网络性能的影响,但即使有影响,也只是影响发送出去的80端口的HTTP请求,经过我的简单测试,对于正常网页浏览无影响。
  • 暂不清楚是否会影响某些特别网站的正常访问,若有,请提供使用的浏览器,网站页面地址。
  • 目前仅在Windows 10 64位上测试过,其它版本的Windows不保证可以运行。
  • Windows 7需要安装KB3033929方可运行本程序。
  • x86,x86_64中各提供了A版本和B版本,功能与性能无差别,请自行尝试哪个版本可以使用。
  • 目前仅有Windows版,是否提供Linux版,看测试情况,无提供iOS与Android版的计划。

 

使用方法

首先,可以到GITHUB上的Release页面下载程序(CCDGUTNetCracker-0.2.zip):https://github.com/yzsme/CCDGUTNetCracker/releases

下载后解包,进入文件夹里面,可以看到有x86与x86_64两个文件夹,根据你的操作系统版本进行选择,例如64位操作系统,就使用x86_64:

进入对应版本的文件夹后,右键“CCDGUTNetCracker.exe”,选择“以管理员身份运行”:

看到此界面,表示程序运行成功:

 

高级使用

其实也没多高级。

程序支持两个可选参数:

不提供任何参数时,程序默认使用四个线程进行工作,可以通过第二个参数指定线程数,例如要使用16个线程进行工作:

如果提供了第三个参数,则输出调试信息,如果启用调试信息的输出,建议把线程数改为1:

Windows远程桌面自定义证书

首先准备需要使用的证书,如果证书不是PKCS #12格式的,需要先转换,可以通过OpenSSL完成:

执行certlm.msc(注意不是certmgr.msc),打开本地计算机的证书管理器:

转到个人证书,在窗口右边空白处右键 – 所有任务 – 导入:

然后选择PKCS #12格式的证书文件进行导入。

 

导入完毕后,在证书列表双击导入后的证书,查看其指纹,并复制:

 

接下来以管理员身份执行cmd或者powershell,执行命令:

见到“successful”字样的话,那就恭喜你啦!

何方神圣导致储存设备引导Windows NT 6安装程序失败

最近使用三款不同的可移动储存设备给三台不同的计算机安装Windows NT 6内核的操作系统,第一台运行良好,第二第三台使用相同的方法,均遇到一些疑难问题,遂对此进行了探讨。

1. 分配单元大小

Unit Size

 

恐怕大家都不会想到这一项会导致引导失败,但是经过多次测试,确实如此。

当分区格式为NTFS时,分配单元最大仅能为4096 字节,亦即4 Kbytes,超过此数值,则会返回类似”Disk error”的错误:

ntfs

 

当分区格式为FAT32时,使用32 Kbytes时成功,64 Kbytes即出现错误。

exFAT未测试。

 

2. 活动分区

如果没有设置活动分区,则MBR无法寻找到活动分区,从而导致引导失败。

 

3. MBR

寻找活动分区依靠它,如果使用UEFI,则不受影响。

 

4. 分区MBR

用于引导交接。

 

通过搜索引擎搜索关键词: U盘安装Windows,基本上会找到使用UltraISO的文章。

但经本人多年来的多次使用,可以确定本方法的成功率并非100%。

 

下面就来说说如何在储存设备上制作可引导的Windows安装程序。

理论上需要准备:

1. Windows NT 6内核的操作系统ISO

2. WinRAR或UltraISO

 

步骤一. 对储存设备需要存放Windows安装程序的分区进行格式化,务必注意分配单元大小。

步骤二. 将存放Windows安装程序的分区设置为活动分区,一般可以使用diskpart的active命令。

Diskpart

看不懂?

幸好此操作还可通过Diskgenius 免费版完成:

运行Diskgenius 免费版,右键单击存放Windows安装程序的分区,点击激活当前分区,再点击保存更改或右键单击储存设备(非其中的分区),点击保存分区表。

步骤三. 使用WinRAR或UltraISO对操作系统的ISO进行解包。

Unpackage

步骤四. 把解包所得的所有文件都复制到存放Windows安装程序的分区。

步骤五. 右键单击储存设备(非其中的分区),点击“重建主引导记录(MBR)”。

步骤六. 提取ISO中的boot文件夹中的bootsect.exe文件,bootsect.exe除了不能存放到”存放Windows安装程序的分区”以外,存放到其他任何位置都行(如果制作可引导的可移动储存设备的操作系统位数为32位,而ISO的操作系统为64位,这就额外需要一个x86的bootsect.exe :http://pan.baidu.com/s/1dDHFVot,解包后可得到i386与amd64两个文件夹,其中分别有x86的bootsect.exe, amd64的bootsect.exe,功能是一模一样的),接下来以管理员权限启动命令提示符(cmd.exe),使用绝对路径(完整的路径)执行bootsect.exe程序,对分区进行写MBR操作,格式为:

例如:

看到”successfully”或”成功”字样,则代表分区的MBR写入成功。

 

步骤七. 开始使用。

 

虽然以上步骤部分跳过也能成功,但并不代表该步骤在任何情况下都可以跳过。