解决疑难问题需要一股钻劲儿

今天讲一个跟性能优化无关的案例,通过这个事情分享解决疑难问题的一些方法。

我们在做技术支持的过程中,在解决客户问题的过程中,经常会遇到各种问题和困难,有时候可能只是别人说没有办法了,只能这样了,但是,如果你能够始终保持一种怀疑的态度,坚持一种刨根问底的钻研精神,只要有一股钻劲儿,也许就能在绝望中找到一线转机,奇怪的问题就可能找到原因,艰难的事情就可能找到解决办法。

这是一个关于识别大硬盘的问题。

昨天晚上弄到1点左右,终于解决了一个曾经已盖棺定论的问题,找回了本该早就可用的2T磁盘空间。

1.前传:在新硬盘上差点把数据搞丢

事情是这样的,半年前,为了存储不断增加的重点用户数据,申请买了一块4T的硬盘,一位系统管理员给安装到一台旧服务器上,搞了一个星期多,始终有问题,只能认到1.6T的空间。他反复的重装系统、重新分区等等,最后因为分区操作不当,整个硬盘都认不到了,直接扔给我说是已经尽力了,建议找厂商换一块新的,反正是才买的,还在换新的时间范围内。

问题是,之前格式化好了1.6T的空间,拷入了两家用户的数据库,如果丢失,重新去找用户拷数据,将会比较麻烦。

我觉得一个新硬盘,不可能因为这样使用一下就坏了,于是找了一台机器来接上,通过U盘上的PE进入后,试着用磁盘管理软件DiskGenius来处理,发现硬盘是能够认识的,只是分区不见了,通过“搜索分区表“的功能把分区表给找回来了,一切数据都还在。

这个硬盘就这样安装到了那台服务器上,但是只能使用1.6T的空间,系统管理员说是因为那台机器的主板比较老,认不到超过2T的硬盘空间。

2.偶然发现:硬件是支持大硬盘的

昨天,偶然看到一篇技术文章,其中提到了”GPT分区”这个名词,于是就去了解了一下,很久没接触硬件知识,确实在这方面有知识断层了。

原来,以前的MBR分区,不能识别超过超过2T的大硬盘,所以发展出一种新的分区表方法。但是,缺省情况下,安装Windows时,微软仍然会采用MBR分区。

新硬盘是4T,当时是想让系统管理员安装一个Win2008 R2到这个新硬盘上,但是要识别这种大硬盘,必须采用GPT分区,而操作系统不支持安装到GPT分区上,所以,采用了MBR分区,也就只能识别到1.6T的空间(只划分了这么一块分区),最后也没有安装Win2008。

现在,这台机器使用的是很老的操作系统Windows 2003。

会不会是因为操作系统太老了,而无法识别大硬盘呢?

查了一下硬件情况,该服务器是至强的64位CPU,是支持超过2T的大硬盘的。

网上一搜,原来,即使是WindowsServer 2008 R2、win7也需要打补丁才能只别2T以上硬盘,Windows 2003也有补丁文件。

3.第一关:获取识别大硬盘的补丁

好不容易从CSDN上花了3个积分才下载到补丁文件,结果运行时发现是32位的,而这台服务器是64位的操作系统,装不上。好不容易找到一个64位的补丁,却无法下载,因为我的CSDN帐号积分不够了,除了CSDN,还真搜不到其他可下载的资源,各种网盘上也没有,淘宝上倒有帮人下载的服务。

这个补丁只有不到2M,安装时提示还需要先打一个安全补丁KB932168,还好,也是不到1M的小补丁,很快安装完成并按要求重启了操作系统。

4.第二关:识别超过2T的空间

重启后,仍然只能看到1.6T的空间,不管是操作系统的磁盘管理,还是分区助手这类软件。网上查资料发现,需要先将目前的MBR分区转换成GPT分区。

前面提到的磁盘管理软件DiskGenius,转换分区表类型为GUID格式,转换很快完成,进资源管理器后,发现仍然只有1.6T的分区。

再查资料,有的资料说,要在西捷的官网下载一个软件DiscWizard,安装之后才能识别超过2T那一部分分区。

这个软件居然有284M,虽然我是100M的带宽,但是西捷官网下载却非常慢,用了20几分钟才下载下来,安装时傻眼了,提示不支持服务器版操作系统。

想了想,既然打了操作系统的补丁,也转换成了GPT分区,应该是可以识别大硬盘的。决定重启一下操作系统试试,重启后,欣喜的看到了磁盘总的大小是4T了。

5.第三关:重新识别分区

新的空间是空白的,于是用傲梅分区助手把这块新空间进行分区。

完成之后,居然无法识别以前的1.6T的盘,吓了我一跳。

再次祭出重启大法,还好,重启后仍然提示两个分区盘识没有格式化。

这时已经接近凌晨1点了,有点昏昏欲睡了,提醒自己冷静想想,是不是哪一步做错了。

再次使用磁盘管理软件DiskGenius,通过“搜索分区表“的功能重建该盘的分区表,还好,一切数据都还在,终于顺利识别到了完整的磁盘空间。

解决这个问题,靠的是敢于怀疑,靠的是一股钻劲儿。

另外说一个解决疑难问题的案例,这是一个关于开发方面的问题。

在Win7操作系统中,如果开启了输入法,运行源码,显示出欢迎界面后,再显示登录窗口时,一闪而过,终止运行后,开发工具崩溃。

我们开发团队中,可能有不少的开发人员还因为这个问题而多次丢失过编写的代码,有时稍不注意,就因为忘了关闭输入法,一调试,程序就崩了。

曾经有一回,反复测试了很多次,通过跟踪分析,大致确定了是输入法的问题,但一直没有找到解决办法。

最近一位开发人员做了一个变通方法(其实之前可能很多人也这样用过,只是没有提交到代码服务器),显示出欢迎界面后,先弹出一个提示窗口,这样就可以正常显示后续的登录窗口,但这种方法每次都要去点一下“确定”按钮。

因为这样使用起来不爽,所以,我决定再试一下,看能不能找到真正的原因。

通过对代码进行一层一层的做减法,最终发现,即使没有任何额外的代码,也会再现这个问题,说明这是个通用性的问题。

既然登录窗口闪了一下就不见了,是不是可以强制让它再显示出来呢?于是用一个API函数SetActiveWindow来激活登录窗口,果然,就这样解决了这个影响大家很多年的问题。

解决这个问题,采用的是常用的解决疑难问题的办法,通过做减少来排除各种不相关的因素,最终止确认问题发生的根本原因,再用针对性办法去试探解决。

前段时间,解决的另外一个疑难问题:跨网段无法访问虚拟机上的RAC系统。

也是同样的道理,网络管理人员说,听其他人也反馈过类似的问题,可能是虚拟机软件Oracle VM VirtualBox本身的问题。最终,自己通过手动添加一条路由表记录来解决了,结果并不是虚拟机软件的问题。

别人说的原因,有时要有怀疑的态度,有自己的分析和判断。

虽然这三个事例跟性能优化无关,但是我们很多时候在做性能调优的过程中也会遇到类似的问题,有时听别人描述的问题现象可能跟事实有偏差,有时已经下了定论的事情也许还有解药,需要一种刨根问底的精神,需要一股钻劲儿,才能解决那些疑难杂症。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20171223G0RCDM00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券