ALLSTARS_ORACLE 发表于 2017-4-16 09:36:37

实战AIX LVCB的恢复

有关LVCB的背景知识,请参考AIX的相关资料。我在这里就不啰嗦了。首先建立一个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\0" | 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

ALLSTARS_ORACLE 发表于 2017-4-16 09:36:55


#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
#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\0" | 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的条目信息。

由于本人水平有限,错误之处,还望大家多多指点。
页: [1]
查看完整版本: 实战AIX LVCB的恢复