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 编辑 ]
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 编辑 ]