互联网服务数据修复

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
参与4

3同行回答

qihuoqihuo信息技术经理山东天普阳光集团
谢谢版主分享资料显示全部
谢谢版主分享资料收起
工业制造其它 · 2012-06-02
浏览1317
zhenzongjianzhenzongjian软件开发工程师na
这个都是工程师积累下来的.转给大家看看显示全部
这个都是工程师积累下来的.转给大家看看收起
互联网服务 · 2012-06-02
浏览1264
jeanionjeanion存储工程师dxsed
看过类的案例,觉得挺不错的显示全部
看过类的案例,觉得挺不错的收起
系统集成 · 2012-06-01
浏览1290

提问者

zhenzongjian
软件开发工程师na
擅长领域: 服务器AIXUnix

相关问题

相关资料

相关文章

问题状态

  • 发布时间:2012-05-31
  • 关注会员:1 人
  • 问题浏览:6071
  • 最近回答:2012-06-02
  • X社区推广