系统集成

实战LVCB的恢复

首先建立一个LV并在上面建立FS,建好后的情况如下:

/dev/sjhlv         0.08      0.08    1%        6     1% /lvcbtest

#lsvg -l sjhvg
sjhvg:
LV NAME             TYPE       LPs   PPs   PVs  LV STATE      MOUNT POINT
sjhlv               jfs2       10    10    1    open/syncd    /lvcbtest
loglv02             jfs2log    1     1     1    open/syncd    N/A

#cd /lvcbtest
#ls
config.xml        lost+found        webAppConfig.xml
man getlvcb
Manual entry for getlvcb not found or not installed.
#getlvcb -TA sjhlv
         AIX LVCB
         intrapolicy = m
         copies = 1
         interpolicy = m
         lvid = 00c2c87200004c00000001203c5bee8a.1
         lvname = sjhlv
         label = /lvcbtest
         machine id = 2C8724C00
         number lps = 10
         relocatable = y
         strict = y
         stripe width = 0
         stripe size in exponent = 0
         type = jfs2
         upperbound = 32
         fs = vfs=jfs2:log=/dev/loglv02 :  options=rw:account=false
         time created  = Wed Mar 25 14:03:55 2009
         time modified = Sat Apr 11 09:46:45 2009

--以上简单的列了一下FS中的文件,同时给出了lvcb的内容作为以下实验的参考。

dd if=/dev/zero of=/dev/sjhlv bs=512 count=1   --破坏lvcb的内容。
1+0 records in
1+0 records out

#getlvcb -TA sjhlv
         
         intrapolicy =  
         copies = 0
         interpolicy =  
         lvid =  
         lvname =  
         label =  
         machine id =  
         number lps = 0
         relocatable =  
         strict =  
         stripe width = 0
         stripe size in exponent = 0
         type =  
         upperbound = 0
         fs =  
         time created  =         time modified =  

--此时lvcb的内容被清空了。

#cd /lvcbtest
#ls
config.xml        lost+found        webAppConfig.xml
#more config.xml


  
    Provides the following main targets:
   
#umount /lvcbtest
#mount /lvcbtest
#cd /lvcbtest
#ls
config.xml        lost+found        webAppConfig.xml

--从上面的输出我们可以看到虽然lvcb被清空,但LV及其上的FS都没有问题,依然可以正常使用。

下面我们开始对LVCB的内容进行恢复:

#echo "AIX LVCB" | dd of=/dev/sjhlv bs=1 count=9
9+0 records in
9+0 records out

--这一步是必须的,否则会报这样的错:

#synclvodm -vP sjhvg sjhlv
synclvodm: Physical volume data updated.
0516-622 synclvodm: Warning, cannot write lv control block data.
synclvodm: Logical volume sjhlv updated.
#getlvcb -TA sjhlv
         AIX LVCB
         intrapolicy =  
         copies = 0
         interpolicy =  
         lvid =  
         lvname =  
         label =  
         machine id =  
         number lps = 0
         relocatable =  
         strict =  
         stripe width = 0
         stripe size in exponent = 0
         type =  
         upperbound = 0
         fs =  
         time created  =         time modified =  

--把逻辑卷标志写到从逻辑卷开始的9个字节中。

#synclvodm -vP sjhvg sjhlv
synclvodm: Physical volume data updated.
synclvodm: Logical volume sjhlv updated.
#getlvcb -TA sjhlv
         AIX LVCB
         intrapolicy = m
         copies = 1
         interpolicy = m
         lvid = 00c2c87200004c00000001203c5bee8a.1
         lvname = sjhlv
         label =  
         machine id =  
         number lps = 10
         relocatable = y
         strict = y
         stripe width = 0
         stripe size in exponent = 0
         type = jfs2
         upperbound = 32
         fs =  
         time created  =         time modified = Sat Apr 11 10:34:11 2009

--用VGDA的数据同步ODM,ODM多的VGDA不管,不更新。然后会把ODM库中关于这个LV的参数写入LV卷头4KB中。最后我们看到一些信息还是没有恢复,比如:label = ,machine id =  ,fs =等。LVCB的信息存在三份,分别在lv的头部,VGDA,ODM。我猜测VGDA,ODM只含有LVCB的部分信息。通过这个命令可以看到vgda的内容:#readvgda -v /dev/hdisk5 我们只看sjhlv的信息:

**********  Logical Volume: sjhlv  ***********
lve.lvname:             0
lve.maxsize:            512
lve.lv_state:           1
lve.mirror:             1
lve.mirror_policy:      2
lve.num_lps:            10
lve.permissions:        1
lve.bb_relocation:      1
lve.write_verify:       2
lve.mirwrt_consist:     1
lve.stripe_exp:         0
lve.striping_width:     0
lve.lv_avoid:           0
lve.child_minor_num:    0


#chfs -a log=/dev/loglv02 /lvcbtest
#getlvcb -TA sjhlv
         AIX LVCB
         intrapolicy = m
         copies = 1
         interpolicy = m
         lvid = 00c2c87200004c00000001203c5bee8a.1
         lvname = sjhlv
         label =  
         machine id = 2C8724C00
         number lps = 10
         relocatable = y
         strict = y
         stripe width = 0
         stripe size in exponent = 0
         type = jfs2
         upperbound = 32
         fs = vfs=jfs2:log=/dev/loglv02 :   options=rw:account=false
         time created  =         time modified = Sat Apr 11 10:40:50 2009

--用chfs命令按照ODM数据库中的其它内容,进行恢复。到现在位置还有label,time created条目没有恢复。

#putlvcb -L /lvcbtest sjhlv
[test1:/]#getlvcb -TA sjhlv
         AIX LVCB
         intrapolicy = m
         copies = 1
         interpolicy = m
         lvid = 00c2c87200004c00000001203c5bee8a.1
         lvname = sjhlv
         label = /lvcbtest
         machine id = 2C8724C00
         number lps = 10
         relocatable = y
         strict = y
         stripe width = 0
         stripe size in exponent = 0
         type = jfs2
         upperbound = 32
         fs = vfs=jfs2:log=/dev/loglv02:  options=rw:account=false
         time created  =         time modified = Sat Apr 11 10:58:16 2009

--The putlvcb command writes the control block information into block 0 of the
logical volume lvname. Only the fields specified are written. putlvcb can be
used to write a new control block or update an existing one.直接修改LVCB的条目。time created条目依然没有恢复,暂时不管它。

#varyoffvg sjhvg
#exportvg sjhvg

--OK,我们现在在其他机器上importvg试试看,这个LV有没有问题。

#importvg -y sjhvg hdisk7
sjhvg

#mount /lvcbtest
#cd /lvcbtest
#ls
config.xml        lost+found        webAppConfig.xml
#more config.xml


  
    Provides the following main targets:
   
      * installService: Installs Apache as service (on Windows only).  Input
        properties are:

#getlvcb -AT sjhlv
         AIX LVCB
         intrapolicy = m
         copies = 1
         interpolicy = m
         lvid = 00c2c87200004c00000001203c5bee8a.1
         lvname = sjhlv
         label = /lvcbtest
         machine id = 2C8724C00
         number lps = 10
         relocatable = y
         strict = y
         stripe width = 0
         stripe size in exponent = 0
         type = jfs2
         upperbound = 32
         fs = vfs=jfs2:log=/dev/loglv02:  options=rw:account=false
         time created  =         time modified = Sat Apr 11 10:58:16 2009

#lslv sjhlv
LOGICAL VOLUME:     sjhlv                  VOLUME GROUP:   sjhvg
LV IDENTIFIER:      00c2c87200004c00000001203c5bee8a.1 PERMISSION:     read/write
VG STATE:           active/complete        LV STATE:       opened/syncd
TYPE:               jfs2                   WRITE VERIFY:   off
MAX LPs:            512                    PP SIZE:        8 megabyte(s)
COPIES:             1                      SCHED POLICY:   parallel
LPs:                10                     PPs:            10
STALE PPs:          0                      BB POLICY:      relocatable
INTER-POLICY:       minimum                RELOCATABLE:    yes
INTRA-POLICY:       middle                 UPPER BOUND:    32
MOUNT POINT:        /lvcbtest              LABEL:          /lvcbtest
MIRROR WRITE CONSISTENCY: on/ACTIVE                              
EACH LP COPY ON A SEPARATE PV ?: yes                                    
Serialize IO ?:     NO                                    

--经测试一切OK。

我们继续搞破坏。

#dd if=/dev/zero of=/dev/sjhlv bs=512 count=1
1+0 records in
1+0 records out

#getlvcb -AT sjhlv
         
         intrapolicy =  
         copies = 0
         interpolicy =  
         lvid =  
         lvname =  
         label =  
         machine id =  
         number lps = 0
         relocatable =  
         strict =  
         stripe width = 0
         stripe size in exponent = 0
         type =  
         upperbound = 0
         fs =  
         time created  =         time modified =  

--上面这个过程是在本机上继续上次破坏的操作。

下面的操作是在异机恢复lvcb。注意异机的ODM库已经没有sjhvg的任何信息。

#importvg -y sjhvg hdisk7
0516-622 synclvodm: Warning, cannot write lv control block data.
sjhvg

--无法得到此LV的信息,因为信息在LVCB上。

#lsvg -l sjhvg
sjhvg:
LV NAME             TYPE       LPs   PPs   PVs  LV STATE      MOUNT POINT
sjhlv                          10    10    1    closed/syncd  N/A
loglv02             jfs2log    1     1     1    closed/syncd  N/A

--LV能看到。

#mount /lvcbtest
mount: /lvcbtest is not a known file system

--但无法mount FS

#getlvcb -AT sjhlv
         
         intrapolicy =  
         copies = 0
         interpolicy =  
         lvid =  
         lvname =  
         label =  
         machine id =  
         number lps = 0
         relocatable =  
         strict =  
         stripe width = 0
         stripe size in exponent = 0
         type =  
         upperbound = 0
         fs =  
         time created  =         time modified =  

--什么信息都没有。

开始按照本机的恢复方法在异机恢复lvcb的内容

#echo "AIX LVCB" | dd of=/dev/sjhlv bs=1 count=9
9+0 records in
9+0 records out

#getlvcb -AT sjhlv
         AIX LVCB
         intrapolicy =  
         copies = 0
         interpolicy =  
         lvid =  
         lvname =  
         label =  
         machine id =  
         number lps = 0
         relocatable =  
         strict =  
         stripe width = 0
         stripe size in exponent = 0
         type =  
         upperbound = 0
         fs =  
         time created  =         time modified =  

#synclvodm -vP sjhvg sjhlv
synclvodm: Physical volume data updated.
synclvodm: Logical volume sjhlv updated.

#getlvcb -AT sjhlv
         AIX LVCB
         intrapolicy = m
         copies = 1
         interpolicy = m
         lvid = 00c2c87200004c00000001203c5bee8a.1
         lvname = sjhlv
         label =  
         machine id =  
         number lps = 10
         relocatable = n
         strict = y
         stripe width = 0
         stripe size in exponent = 0
         type =  
         upperbound = 32
         fs =  
         time created  =         time modified = Sat Apr 11 11:53:09 2009

#chfs -a log=/dev/loglv02 /lvcbtest
chfs: No record matching '/lvcbtest' was found in /etc/filesystems.

--我把本机/etc/filesystems中关于lvcbtest的信息copy到异机。内容如下:

/lvcbtest:
        dev             = /dev/sjhlv
        vfs             = jfs2
        log             = /dev/loglv02
        mount           = false
        check           = false
        options         = rw
        account         = false

#chfs -a log=/dev/loglv02 /lvcbtest  --需要注意lv不要与异机的lv同名。

#getlvcb -AT sjhlv
         AIX LVCB
         intrapolicy = m
         copies = 1
         interpolicy = m
         lvid = 00c2c87200004c00000001203c5bee8a.1
         lvname = sjhlv
         label =  
         machine id = 2C8724C00
         number lps = 10
         relocatable = n
         strict = y
         stripe width = 0
         stripe size in exponent = 0
         type =  
         upperbound = 32
         fs = vfs=jfs2:log=/dev/loglv02:     options=rw:account=false
         time created  =         time modified = Sat Apr 11 13:26:28 2009

#putlvcb -L /lvcbtest sjhlv
#getlvcb -AT sjhlv
         AIX LVCB
         intrapolicy = m
         copies = 1
         interpolicy = m
         lvid = 00c2c87200004c00000001203c5bee8a.1
         lvname = sjhlv
         label = /lvcbtest
         machine id = 2C8724C00
         number lps = 10
         relocatable = n
         strict = y
         stripe width = 0
         stripe size in exponent = 0
         type =  
         upperbound = 32
         fs = vfs=jfs2:log=/dev/loglv02 : options=rw:account=false
         time created  =         time modified = Sat Apr 11 13:35:27 2009

--type的信息无法恢复。time created的信息也无法恢复。

#mount /lvcbtest
#cd /lvcbtest
ls
config.xml        lost+found        webAppConfig.xml
#more config.xml


  
    Provides the following main targets:
   
      * installService: Installs Apache as service (on Windows only).  Input
        properties are:

--在异机恢复完成。在本机恢复LVCB的type信息是可以恢复的,我猜测因为ODM库有LVCB的部分信息,而同时VGDA也没有LVCB关于type的条目信息。
参与4

4同行回答

lsw945lsw945系统工程师tiansheng
太厉害了  没看懂什么意思显示全部
太厉害了  没看懂什么意思收起
系统集成 · 2014-07-08
浏览3353
CJ_aneCJ_ane系统运维工程师IBM
The synclvodm command rebuilds the logical volume control block, the device configuration database, and the device special files (for the volume        group and logical volumes), so that they are synchronized with the volume group...显示全部
The synclvodm command rebuilds the logical volume control block, the device configuration database, and the device special files (for the volume
       group and logical volumes), so that they are synchronized with the volume group descriptor areas on the physical volumes.
收起
IT其它 · 2013-12-04
浏览3358
zhanghaiyangzhanghaiyang系统工程师联合网讯
真是猛人,有时间搞这个试验!支持!显示全部
真是猛人,有时间搞这个试验!
支持!收起
互联网服务 · 2011-03-07
浏览3330
mi_zymi_zy软件开发工程师民航山西空管分局
好啊,多做实验,彻底吧LVCB,VGDA,和ODM之间的关系和信息存放规则搞明白。显示全部
好啊,多做实验,彻底吧LVCB,VGDA,和ODM之间的关系和信息存放规则搞明白。收起
互联网服务 · 2011-03-06
浏览3283

提问者

haku7916
项目经理博康
擅长领域: 服务器AIXUnix

问题状态

  • 发布时间:2011-03-02
  • 关注会员:0 人
  • 问题浏览:13871
  • 最近回答:2014-07-08
  • X社区推广