分类:
2009-04-27 10:12:02
最近实际工作中解决的一个问题:HBA删除重认后,其下的子设备hdisk2-hdisk44全部乱套,用下面的方法可以将“源”批量改成“目标”。
源:
08:30:32
hdisk1 00c82a80c691ee54 rootvg active
hdisk2 00c82a8017627c02 None
hdisk3 00c82a8036110994 None
hdisk4 00c82a803efabd77 None
hdisk0 none None
hdisk5 00c82a403b68c3b2 None
hdisk6 00c82a8062c095e1 None
hdisk7 00c82a80638dabbd None
hdisk8 00c82a80d586334d None
hdisk9 00c82a80e5128bc4 None
hdisk10 00c82a801513f3a9 None
hdisk11 00c82a80299f02fa None
hdisk12 00c82a80284fc95c None
hdisk13 00c82a802a2b9612 None
hdisk14 00c82a80443cd914 None
hdisk15 00c82a80461f41ec None
hdisk16 00c82a8092702dbb None
hdisk17 00c82a80a2ffb524 None
hdisk18 00c82a80939cbc45 None
hdisk19 00c82a8093910239 None
hdisk20 00c82a808a5d7048 None
hdisk21 00c82a80b524b83e None
hdisk22 00c82a40e79c563c None
hdisk23 00c82a801797a7a8 None
hdisk24 00c82a803a952500 None
hdisk25 00c82a804ef9a4de None
hdisk26 00c82a80277b78e5 None
hdisk27 005d99aca8532f6a None
hdisk28 00c82a805a60c23c None
hdisk29 00c82a805a5deddf None
hdisk30 00c82a80788d0158 None
hdisk31 00c82a8072983a39 None
hdisk32 00c82a403cbd2cbf None
hdisk33 00c82a403cbd2374 None
hdisk34 00c82a403ceea584 None
hdisk35 00c82a4083752ec8 None
hdisk36 00c82a80ff38e3ad None
hdisk37 00c82a80001391e7 None
hdisk38 00c82a8011b372e8 None
hdisk39 00c82a80102a492e None
hdisk40 00c82a80ba056fe5 None
hdisk41 00c82a8072be2be7 None
hdisk43 00c82a4091670f11 None
hdisk44 00c82a809e99600c None
hdisk45 00c82a8072e326f7 None
08:31:15 ]#
目标:
08:59:57
hdisk1 00c82a80c691ee54 rootvg active
hdisk0 none None
hdisk2 00c82a40e79c563c None
hdisk3 00c82a801797a7a8 None
hdisk4 00c82a8017627c02 None
hdisk5 00c82a8036110994 None
hdisk6 00c82a803a952500 None
hdisk7 00c82a803efabd77 None
hdisk8 00c82a403b68c3b2 None
hdisk9 00c82a4083752ec8 None
hdisk10 00c82a804ef9a4de None
hdisk11 00c82a80277b78e5 None
hdisk12 00c82a805a60c23c None
hdisk13 00c82a805a5deddf None
hdisk14 00c82a8062c095e1 None
hdisk15 00c82a80638dabbd None
hdisk16 00c82a80788d0158 None
hdisk17 00c82a80d586334d None
hdisk18 00c82a8072983a39 None
hdisk19 00c82a80e5128bc4 None
hdisk20 00c82a801513f3a9 None
hdisk21 00c82a80299f02fa None
hdisk22 005d99aca8532f6a None
hdisk23 00c82a403cbd2cbf None
hdisk24 00c82a403cbd2374 None
hdisk25 00c82a403ceea584 None
hdisk26 00c82a80ff38e3ad None
hdisk27 00c82a80001391e7 None
hdisk28 00c82a80284fc95c None
hdisk29 00c82a802a2b9612 None
hdisk30 00c82a8011b372e8 None
hdisk31 00c82a80102a492e None
hdisk32 00c82a80443cd914 None
hdisk33 00c82a80461f41ec None
hdisk34 00c82a80ba056fe5 None
hdisk35 00c82a8092702dbb None
hdisk36 00c82a80a2ffb524 None
hdisk37 00c82a80939cbc45 None
hdisk38 00c82a8093910239 None
hdisk39 00c82a8072be2be7 None
hdisk40 00c82a8072e326f7 None
hdisk41 00c82a808a5d7048 None
hdisk42 00c82a80b524b83e None
hdisk43 00c82a4091670f11 None
hdisk44 00c82a809e99600c None
09:00:00 ]#
方法:
#要在任意机器上使用,只有前三行需要根据实际修改
#CFGMGR说明:我的环境里fcs0、fcs1的父设备的父设备都是pci12。也可以直接用cfgmgr不指定-l。
#MKDEV_FAKE说明:VIO SERVER 1.5下,可以这样做出一块假的磁盘。
#RMDEV_ALL_FAKE说明:作用是删除所有的假磁盘,注意 $1前有个“\”。也可以通过使用函数的方式避免这个问题。
CFGMGR='cfgmgr -l pci12'
MKDEV_FAKE='mkdev -p scsi0 -w 1,0 -c disk -s scsi -t scsd -d'
RMDEV_ALL_FAKE="lsdev -Ccdisk | awk '/Other SCSI Disk Drive/ {print \$1}' | xargs -I {} rmdev -dl {}"
#写个函数,方便重复调用。作用是将大盘号改小,如:将hdisk18改成hdisk7。
Big2Small() {
SDISK=hdisk$1
DDISK=hdisk$2
#cat <rmdev -dl $DDISK
$MKDEV_FAKE
$CFGMGR
rmdev -dl $DDISK
rmdev -dl $SDISK
$CFGMGR
$MKDEV_FAKE
#!!
}
#第一次批量执行Big2Small()
lspv >source
awk 'NR==FNR{a[$2]=$1}NR>FNR&&substr(a[$2],6)>substr($1,6){print substr(a[$2],6),substr($1,6)}' source target |\
sort -n | while read Snumber Tnumber; do Big2Small $Snumber $Tnumber; done
eval $RMDEV_ALL_FAKE
#第二次批量执行Big2Small()
lspv >source2
awk 'NR==FNR{a[$2]=$1}NR>FNR&&substr(a[$2],6)>substr($1,6){print substr(a[$2],6),substr($1,6)}' source2 target |\
sort -n +1 | while read Snumber Tnumber; do Big2Small $Snumber $Tnumber; done
eval $RMDEV_ALL_FAKE
#第三次批量执行Big2Small()
lspv >source3
awk 'NR==FNR{a[$2]=$1}NR>FNR&&substr(a[$2],6)>substr($1,6){print substr(a[$2],6),substr($1,6)}' source3 target |\
sort -n | while read Snumber Tnumber; do Big2Small $Snumber $Tnumber; done
eval $RMDEV_ALL_FAKE
#最后对比下“源”与“目标”是否有异
lspv | tee source4
diff source4 target
========================================================================
任何形式的转载,请写明出处:
email:
blog: http://www.cublog.cn/u/739/
========================================================================
chinaunix网友2009-04-29 19:59:35
http://www.loveunix.net/thread-99001-1-1.html 11楼的方法看起来效率更高,但估计作者king_ni 写得有点小错误,不太好懂,特帮他修改了一下: 欲实现如下两盘符对调 hdisk2 000a8fcc48cb34ce None hdisk3 000d078ce4232371 None 可用下面的步骤 # lsdev -Cl hdisk2 -Fconnwhere 0,0 # lsdev -Cl hdisk2 -Ftype osdisk # lsdev -Cl hdisk3 -Ftype osdisk # lsdev -Cl hdisk3 -Fconnwhere 8,0 # rmdev -dl hdisk2 # rmdev -dl hdisk3 # mkdev -c disk -s 'scsi' -p 'scsi1' -w '0,0' -t 'osdisk' -l hdisk3