细数在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专门作储存了。

Windows远程桌面自定义证书

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

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

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

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

 

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

 

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

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

Windows NetBIOS: “Called name not present”

通过非“计算机名”访问Windows的共享时,NetBIOS会返回”Called name not present”,在一些客户端上会遇到问题。

不是什么场合都能使用计算机名访问共享,不明白Micosoft这样设计是什么心态。

 

不过,还好找到了添加NetBIOS别名的方法:

打开regedit,到[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters]下,添加一项名为OptionalNames的字符串值,编辑其值:

如图所示,一行一个别名。

一般来说,是通过IP访问共享的,把IP写进去就好了,有些客户端收到“Called name not present”后,还会尝试把IP的第一段、*SMBSERVER作为called name(详情可抓包分析),为了避免客户端报错,都写进去就好了。

 

保存后,重启系统(没找到不用重启的方法)。

何方神圣导致储存设备引导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写入成功。

 

步骤七. 开始使用。

 

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

XEN VPS上使用ISO安装Windows Server 2012(解决提示:缺少计算机所需的介质驱动程序)

今天在给一个XEN的VPS用ISO安装系统(你没看错,我也没打错,的确是XEN)。

因为是XEN,虚拟机,无DVD驱动器,也不给你从面板挂载ISO,因此只能从硬盘安装。

大概的步骤是这样的:

下载ISO到另一个分区——EasyBCD添加ISO启动项——重启——登录VNC,选择ISO的那一项……

上面这几步都很顺利,但是到安装那就出问题了:Failed

 

提示:缺少计算机所需的介质驱动程序。这可能是 DVD、U 盘或硬盘驱动程序。如果你有包含该驱动程序的 CD、DVD 或 U 盘,请立即插入。注意:如果Windows 安装介质在 DVD 驱动器或 U 盘中,你可以在这个步骤中放心地将其取出。

XEN的硬盘应该是不需要额外的驱动的,不过我记得这个问题在一次的重装系统时遇到过,貌似需要运行sourcess里面的setup.exe。

尝试着运行ISO挂载出来的X盘的sourcess里面的setup.exe,仍旧那种提示。

于是重启,进入原来的系统,把ISO解压到了D盘。再次进入Windows Server 2012的安装面界。

然后按Shift+F10召唤出CMD,切换到D盘,执行解压出来的sources/setup.exe。

SETUP

 

不过Windows Server 2012安装要KEY呢:KEY

 

没KEY还不给安装……

Google了个对应版本的KEY:

KEY Finish

成功进入下一步:

Success

 

操作分区,把原来C盘删掉,重新创建(D盘放着ISO,最好别删吧)

分区

 

开始安装:开始安装

 

整个过程十分钟不到,是VPS性能太好了?还是Windows Server 2012优化过?

设置密码(就算原来打了“●”我也要把密码位数掩盖掉)

设置密码

 

搞定:

登录面界

 

 

到此为止,这下我真的看不出KVM有什么优点了……