汗的教训-警惕HP命令“vparenv”

HP-UX、Linux、Tru64 UNIX、NonStop、OpenVMS、Windows Server等,数据中心、虚拟化方案等

版主: xyevolve

版面规则
1. 本版是定位于惠普软件系统及解决方案的技术讨论区。
2. 本版鼓励发帖共同讨论技术问题,不鼓励站内信件私下交流,独知知不如众知知。
3. 本版允许转贴或引用他人的作品,但必须声明原作者信息。
4. 本版禁止发表出售、求购、或其他非技术讨论等帖子。
5. 本版禁止灌水,包括但不限于任何与所讨论主题无关的回复,无意义字符,直接复制其他回复等。
6. 本站附件禁止用于商业目的,请在下载后24小时内删除,本站不对其造成的结果负任何责任。
回复
admin
网站编辑
帖子: 767
注册时间: 2010年 12月 22日 04:06 星期三

汗的教训-警惕HP命令“vparenv”

帖子 admin » 2012年 11月 15日 03:14 星期四

一篇关于npar和vpar设置的文章,让感兴趣的朋友了解一下具体的操作。
虽然内容或原因并不太和vparenv命令相关
----------

世人常说,血的教训,这里我要说一个汗的教训,和HPUX下一条命令“vparenv”相关。因为疏忽大意,导致工作量无故增加了接近五个小时。

上周做一个环境部署,将HP rx8640的一个npar分区划分为两个vpar,然后用其他分区上的磁带对这两个vpar进行系统还原。目标分区是vpar,原始分区是vm。这里简单说一下npar、vpar、vm,npar是硬件分区,以cell板为基础架构,而vpar和vm是虚拟分区,是在npar的基础上划分出来的。再简单说明一下还原操作的具体顺序:

1,用备份有vm分区操作系统的磁带还原到npar分区上;
2,在npar上划分两个vpar,这里姑且命名为vpar00和vpar01;
3,用“vparenv”命令设置系统下次以vpar方式启动;
4,重启系统,到十秒中断的时候引导进入到VPMON下;
5,使用同样的磁带对vpar01进行还原。

这里再简单的说一下为什么不用恢复vpar00而只用恢复vpar01.vpar的划分,是基于硬件路径的,和vm的划分略有区别,举个简单的例子,这里创建一个vpar,会使用到以下命令:

代码: 全选

# vparcreate -p vpar10 -a cpu::4 -a cpu:::4:4 -g ILM:1024 -g CLM:256 -a mem::12288 -a io:1/0/0/2/0.6.0:BOOT -a io:1/0/0/3/0.6.0 -a io:1/0/0/2/1.2.0 -a io:1/0/12 -a io:1/0/1 -a io:1/0/2 -a io:1/0/4 -a io:1/0/8
从这条命令中可以看个大概,创建vpar需要指定cpu个数、内存大小、启动盘以及其他一些设备比如说光驱、磁带机、网卡、光纤卡。这里的硬件路径“1/0/0/2/0.6.0”对应的磁盘就是启动盘,所以要在后面加一个“BOOT”的参数。如果这里设置的启动盘路径和npar下的启动盘路径一致,那么就意味着使用npar的启动盘作为第一个vpar的启动盘。这样一来,在npar中划分好vpar之后,第一个vpar就可以直接启动了,所以再把vpar01恢复一下就好了。

当然,如果npar下还有其他磁盘具有操作系统,同样的,只需要把对应的磁盘作为第二个vpar的启动路径,那么划分好vpar,在VPMON下vparload -all,两个vpar都可以启动了。

这里要说一下用来还原npar的那盘磁带,因为是备份的VM分区的系统,没有安装vpar软件,那么还原到npar上自然也就不能划分vpar(vpar的划分需要vpar软件的支撑),需要用光盘安装vpar软件。那么,之前的步骤就要修改了:

1,用备份有vm分区操作系统的磁带还原到npar分区上;
2,用光盘安装vpar软件;(新增步骤)
3,在npar上划分两个vpar,这里姑且命名为vpar00和vpar01;
4,用“vparenv”命令设置系统下次以vpar方式启动;
5,重启系统,到十秒中断的时候引导进入到VPMON下;
6,使用同样的磁带对vpar01进行还原。

然后才来说说vparenv这个命令,这个命令通过设置环境变量的方式来引导系统下次的启动是进入到npar模式还是进入到vpar模式,通常是这样操作的:

代码: 全选

# vparenv -m vpars/npars
再通过vparenv进行确认,比如说:

代码: 全选

# vparenv
vparenv: The next boot mode setting is "vPars".
vparenv: The ILM granule size setting is 1024.
vparenv: The CLM granule size setting is 256.
vparenv: Note: Any changes in the above settings will become effective
only after the next system reboot.
vparenv: Note: The maximum possible CLM granules per cell is 256.
vparenv: Note: The maximum possible ILM granules for this system is 1024.
这里只需要查看引号里面的部分是npar还是vpar就可以了,是npar就从npar启动,是vpar就从vpar引导。
vpar到npar比较简单,只需要重新启动,让系统自己引导就可以了,但是从npar到vpar,必须手工在十秒中断的时候停下来,然后引导系统进入到VPMON状态下,在这个地方启动vpar,比如说:

代码: 全选

VPMON>vparload -p vpar00

在我的实际操作过程中,vpar00是以npar的磁盘引导的,所以能够直接启动不用磁带恢复,而vpar01是需要通过磁带恢复的。

这里又要说说在vpar模式下以磁带机方式安装操作系统,这跟在npar下以磁带机方式安装操作系统略有不同。在npar下有十秒中断这个东西,可以在这里重新扫描所有设备,然后手工方式从磁带机进行引导,而vpar下是没有所谓的十秒中断存在的。如果想通过磁带机方式引导来安装操作系统,就必须通过一个活动的vpar来设置非活动vpar的引导路径,引导它从磁带机启动,然后开始操作系统的还原。简单举例如下:
(假设vpar00是有操作系统的vpar,vpar01是需要磁带还原的vpar)

代码: 全选

vpar00# vparreset -p vpar01 -h
vpar00# vparmodify -p vpar01 -a io:1/0/4/1/1.2.0:TAPE(将磁带机的硬件路径添加到vpar01下)
vpar00# vparboot -p vpar01 -B TAPE
然后在扫描出来的设备里选择磁带机进行引导,就可以用磁带还原操作系统了。这里要提到一种意外,因为我遇到过,就是即使把硬件路径给加到目标vpar里面去了,加载的时候还是无法扫描到磁带机设备。遇到这种情况比较麻烦,但也不是没有解决方法,解决办法如下:

1,以vparenv命令设置系统下次启动到npar模式;
2,reboot系统,在十秒中断的时候停下来;
3,在shell模式下search all,扫描所有的设备;
4,以磁带机方式安装操作系统(这里千万选择正确的磁盘,也就是vpar01对应的那块磁盘,否则容易将之前的npar操作系统给覆盖掉);
5,待系统恢复完成,进入到操作系统中通过setboot命令改变磁盘引导顺序,重新从之前的磁盘进行引导,并reboot系统;
6,待系统起来之后,通过vparenv命令设置vpar启动模式。

这样一来,第二个vpar也安装完成了。

这里就要说到汗的教训了,因为悲剧从这个时候开始。之前我提到用来恢复的磁带是在VM分区上备份的,没有vpar软件,所以恢复好vpar01分区之后会出现错误,导致这个分区不断的crash dump,然后reboot,然后不停的crash dump,周而复始。在crash dump之前有一条报错信息值得关注:

代码: 全选

Error: kernel does not contain required vPars components.
什么情况?内核不包括所需要的vpar组件。这个错误提示其实说得很清楚了,那就是vpar的操作系统也是需要vpar软件支持的,因为在安装了vpar软件的同时,系统内核会相应做一些更改,来满足所需。但我在这里干了一件相当愚蠢的事情,从而导致悲剧全面爆发。

大概是头脑发晕吧,系统说内核不包括所需的vpar软件,那么我把vpar软件给卸载了说不定系统就能够正常启动了,于是我在系统环境变量仍然是vpars模式的时候擅自将vpar00上的vpar软件给卸载了,然后系统重启。
(编者注:其实原作者这里还是理解有误,系统提示是缺少必要的vPars组件,卸载vPars完全是相反的操作了)

接回上篇,我在一个vpar无法启动,另一个vpar正常的情况下被我删除了vpar软件,之后系统自动重启,然后悲剧的一幕发生了。由于vpar00和vpar01都没有了vpar软件,导致两个vpar都无法启动,想重返npar进行设置也不可能,因为环境变量停留在vpar模式下,无法进入npar。

如若是往常,有两个办法,一个办法是在十秒中断下的HPUX提示符下输入vparconfig reboot npars来切入到npar;一个办法是通过带vpar软件的、备份的磁带来恢复受损的两个vpar。但现在这两种情况都无法解决,首先因为vpar软件的“被删除”,在VPMON下输入vparconfig这样的命令已经无法识别了,其次无论通过带vpar的备份带抑或是标准带都无法进行系统恢复,系统仍然会提示因为vpar模式被破坏,无法进行安装。

给老大反映了这个事情,表示了我的束手无策,希望得到救助。老大首先也试图通过带vpar软件操作系统的磁带来引导,未果。于是想到vparenv写入的信息或许驻留在硬盘内无法删除,建议我将npar对应的两块本地硬盘和其他闲置分区的硬盘进行置换,然后重新用磁带机引导,不想仍然报之前同样的错误。

停顿数秒之后,老大又想到一招,就是将这个npar分区合并到其他完好的npar分区中去,重新规划启动路径,通过重新引导的方式让系统从合并过来分区的磁盘上引导,然后安装vpar软件,然后对另一个vpar进行重装。这样说着不是很详细,以步骤的方式进行总结如下:

1,换回原来的两块磁盘(既然换磁盘的方法没有用,那还是换回来好了);
2,对崩溃的npar分区进行停机处理,使其处于inactive状态(这样的状态下才能进行npar合并操作);
3,在NPAR0的命令行下,通过“parmodify”命令将NPAR1对应的cell加入NPAR0(假定崩溃的是NPAR1,目标合并分区是NPAR0);
4,对NPAR0进行shutdown -Ry重新识别方式引导,这样在系统起来之后NPAR1就合并到NPAR0中去了;
5,通过parstatus命令确认NPAR0现在包含有两个cell板,再次reboot,让系统从NPAR1对应的磁盘进行引导;
6,在NPAR0的光驱里插入光盘进行vpar软件的安装;
7,通过setboot命令重新设置启动盘顺序,让下次系统重启从NPAR0对应的磁盘引导,同时通过parmodify命令将NPAR1对应的cell从NPAR0中释放出去,完成NPAR的拆分;
8,shutdown -Ry 0进行重新引导,让NPAR0恢复原样;
9,在其他活动的NPAR上,比如说NPAR2/NPAR3等等,通过parcreate命令重新创建NPAR1;
10,启动NPAR1,通过vparremove命令删除之前的vpar信息,按照以前的规划重新创建vpar00以及vpar01;
11,通过vparenv命令设置系统下次从vpar模式引导,并对剩下的vpar01进行带vpar软件磁带的系统恢复过程。

按照上面提到的步骤一步步走下来,就算是结束了,两个vpar也能够正常引导起来。从发生故障到解决故障,时间严重耽误了五个多小时,这个时候就应该总结一下了,如果一开始在卸载vpar之前将vparenv调整到npar模式下,系统重启自然进入到npar模式下,就不会出现接踵而至的这么一大堆麻烦。

与此同时,我产生了一个疑问,那就是vparenv这个命令执行完成之后究竟把脚本写入到什么地方?按说如果写入到磁盘中,通过更换磁盘的方式应该可以解决,实际不是这么回事,所以排除了脚本是写到磁盘中这个假设。在十秒中断后的FS0:/EFI/HPUX目录下查看配置文件,发现无论怎样更换磁盘,一个含“vparconfig”关键字的文件始终存在,这就有理由相信配置信息实际并不是存在于磁盘上。而之后通过NPAR的合并、拆分,又一致解决了不能进入到NPAR中进行修复这一问题,那么vparenv设置后,信息很有可能是驻留在cell,或者是某某东西的缓存中,与磁盘无关。

NPAR的分拆合并势必会破坏掉被合并分区的配置信息,也就无怪乎被分拆出来之后,配置信息发生了变化,之前通过命令vparenv得到的结果很可能就不复存在了,原有的vpar环境变量被破坏,启动到npar下就是很顺利的事情。暂且这样认为着吧。

再有,使用什么磁带恢复什么系统也显得很重要,最好做到一一对应,也就是用备份了npar分区的磁带来恢复npar分区,用备份了vpar分区的磁带来恢复vpar分区,用备份了VM分区的磁带来恢复VM分区,这就不容易混淆了。用备份了VM分区的磁带来恢复vpar分区,还是存在着一些缺陷的,就好比这次操作中忽略了备有VM系统并不包含有vpar软件,一不小心就铸成大错了。

暂时总结到这里,虽然这次因为失误多加了近五个小时的工作量,但也收获不小,收获知识的同时也要像老大解决问题那样从多个角度出发去分析问题,而不是在一颗树上吊死。比如像换磁盘、合并拆分NPAR这些我连想也没去想过,而这些想法当中却正隐藏着解决问题的方法。纸上得来终觉浅,绝知此事要躬行,经验的积累还是很重要的,潜移默化中就会培养出一整套解决问题的方法论来。

=========
原文来自chinaunix.net,感谢原作者penguinstorm

回复