pv=clear后的修复

 chdev -l hdiskX -a pv=clear
chdev -l hdiskX -a pv=yes
之后虽然数据还在,但是PVID被更改。如果能找回原来的PVID,并覆盖掉pv=yes后新的PVID,就能找回数据。整个过程分为三个步骤:
1,找到原来的PVID
2,覆盖新的PVID
3,更新ODM

对于老手,这些操作不是很复杂,但是对于我等新手就比较麻烦了。因此我写了个工具,来帮助完成某些工作。
其实说穿了也不神奇,每个PV的头部都记录了PVID,其位置是固定。每个PV的VGDA中都有PVID列表,记录了属于该VG的所有PV的PVID。VGDA的位置是随着VG的版本不同而不同的。根据VGDA中的PVID列表,一个个去找哪些PVID在系统中是还有的,那么剩下最后一个就是pv=clear前的PVID。将这个PVID写回PV头部。这就完成了第1和第2步。第3步通过odmchange修改ODM中的PVID,修改回原来的PVID


附件解开后是chkvgda.exe可执行文件。


测试流程:
#lspv
......
hdisk4          00c10fea8e2b48ca                    testvg          active
hdisk5          00c10feac82cdafb                    testvg          active
hdisk6          00c10fead24d2663                    testvg          active
hdisk7          00c10fead24d2831                    testvg          active

#lsvg -l testvg
testvg:
LV NAME             TYPE       LPs   PPs   PVs  LV STATE      MOUNT POINT
jfs2test            jfs2       2     2     2    open/syncd    /tmp/jfs2test
loglv00             jfs2log    1     1     1    open/syncd    N/A

#lslv -m jfs2test
jfs2test:/tmp/jfs2test
LP    PP1  PV1               PP2  PV2               PP3  PV3
0001  0001 hdisk4            
0002  0001 hdisk5  

#ll /tmp/jfs2test
total 10400
drwxr-xr-x   2 root     system          256 Jan 01 02:25 lost+found
-rw-r-----   1 root     system      5324800 Jan 01 02:26 test.tar

#umount /tmp/jfs2test
#varyoffvg testvg

#chdev -l hdisk4 -a pv=clear
hdisk4 changed

#lspv
......
hdisk4          none                                None            
hdisk5          00c10feac82cdafb                    testvg         
hdisk6          00c10fead24d2663                    testvg         
hdisk7          00c10fead24d2831                    testvg

#chdev -l hdisk4 -a pv=yes
hdisk4 changed

#lspv
hdisk4          00c10fea8e521b10                    None            
hdisk5          00c10feac82cdafb                    testvg         
hdisk6          00c10fead24d2663                    testvg         
hdisk7          00c10fead24d2831                    testvg         

#varyonvg testvg
0516-008 varyonvg: LVM system call returned an unknown error code (3).         

#exportvg

#importvg -y testvg hdisk5
PV Status:      hdisk4  00c10fea8e521b10        INVPVID
                hdisk5  00c10feac82cdafb        PVACTIVE
                hdisk6  00c10fead24d2663        PVACTIVE
                hdisk7  00c10fead24d2831        PVACTIVE
                        00c10fea8e2b48ca        NONAME
varyonvg: Volume group testvg is varied on.
0516-510 synclvodm: Physical volume not found for physical volume identifier 00c10fea8e2b48ca0000000000000000.
0516-548 synclvodm: Partially successful with updating volume group testvg.
testvg
PV Status:      hdisk5  00c10feac82cdafb        PVACTIVE
                hdisk6  00c10fead24d2663        PVACTIVE
                hdisk7  00c10fead24d2831        PVACTIVE
                        00c10fea8e2b48ca        NONAME
varyonvg: Volume group testvg is varied on.

#lspv
hdisk4          00c10fea8e521b10                    None            
hdisk5          00c10feac82cdafb                    testvg          active
hdisk6          00c10fead24d2663                    testvg          active
hdisk7          00c10fead24d2831                    testvg          active

#lsvg -l testvg
testvg:
LV NAME             TYPE       LPs   PPs   PVs  LV STATE      MOUNT POINT
jfs2test            jfs2       2     2     2    closed/syncd  N/A
loglv00             jfs2log    1     1     1    closed/syncd  N/A

#dd if=/dev/hdisk4 of/tmp/hdisk4 bs=4m count=1
#dd if=/dev/hdisk5 of/tmp/hdisk5 bs=4m count=1
#dd if=/dev/hdisk6 of/tmp/hdisk6 bs=4m count=1
#dd if=/dev/hdisk7 of/tmp/hdisk7 bs=4m count=1

将/tmp/下的hdisk4~hdisk7下载到本地的testvg目录中,testvg目录和chkvgda.exe在相同一个目录中。至少要有3个hdisk的头部,只支持svg
执行chkvgda两次,第一次会产生信息说hdisk4的pvid不正确,告知了正确的PVID,并修复。第二次就正常了,没有报错信息

将hdisk4上传到机器上,例如/tmp/hdisk4,并用dd覆盖掉/dev/hdisk4的头部
#dd if=/tmp/hdisk4 of=/dev/hdisk4 bs=4m count=1

#odmget -q "name=hdisk4 and attribute=pvid" CuAt > /tmp/CuAt.txt

#编辑/tmp/CuAt.txt,修改回正确的PVID

#odmchange -o CuAt -q "name=hdisk4 and attribute=pvid" /tmp/CuAt.txt

#lspv
hdisk4          00c10fea8e2b48ca                    None            
hdisk5          00c10feac82cdafb                    testvg          active
hdisk6          00c10fead24d2663                    testvg          active
hdisk7          00c10fead24d2831                    testvg          active

#exportvg

#importvg -y testvg hdisk5
testvg

#

#lsvg -l testvg
testvg:
LV NAME             TYPE       LPs   PPs   PVs  LV STATE      MOUNT POINT
jfs2test            jfs2       2     2     2    closed/syncd  /tmp/jfs2test
loglv00             jfs2log    1     1     1    closed/syncd  N/A

#mount /tmp/jfs2test

#df -k
......
/dev/jfs2test      131072    125524    5%        5     1% /tmp/jfs2test

[ 本帖最后由 mike79 于 2009-1-1 23:27 编辑 ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值