博客首页 注册 建议与交流 排行榜 加入友情链接
推荐 投诉 搜索: 帮助

chinadns

蛋,是不能这样扯的!
   chinadns.cublog.cn
关于作者  
姓名:chinadns
职业:杀猪的
年龄:本命年··
位置:sz
个性介绍:爱上一个不回家的人

我的分类  




在cplv时,如何处理lvcb
两个卷组 datavg sunvg
两个lv,test位于datavg上,test1位于sunvg上,datavg的ppsize为16m,sunvg的ppsize为32m
查看lv上的test块信息
#dd if=/dev/test count=1
AIX LVCBraw000af70d00004c000000010atestTue Jul  4 09:22:35 2006
Tue Jul  4 09:22:35 2006
AF70D4C00ymmNoneda200f23.1
1+0 records in.
1+0 records out.
#dd if=/dev/test1 count=1
AIX LVCBraw000af70d00004c000000010ctest1Thu Jul  6 10:17:55 2006
Thu Jul  6 10:18:43 2006
AF70D4C00ymmy None371fa759.1
1+0 records in.
1+0 records out.
 
源lv为test,目的lv为test1,因为使用cplv往一个已经存在的lv上cp,所以目的lv的type必须修改为copy,
#chlv -t copy test1
#cplv -e test1 test
cplv: All data contained on the destination logical
       volume will be destroyed.
cplv: Do you wish to continue? y(es) n(o)? y
cplv: Logical volume test successfully copied to test1 .
#lslv test1
LOGICAL VOLUME:     test1                  VOLUME GROUP:   sunvg
LV IDENTIFIER:      000af70d00004c000000010c371fa759.1 PERMISSION:     read/writ
e
VG STATE:           active/complete        LV STATE:       closed/syncd
TYPE:               raw                    WRITE VERIFY:   off
MAX LPs:            512                    PP SIZE:        32 megabyte(s)
COPIES:             1                      SCHED POLICY:   parallel
LPs:                2                      PPs:            2
STALE PPs:          0                      BB POLICY:      relocatable
INTER-POLICY:       minimum                RELOCATABLE:    yes
INTRA-POLICY:       middle                 UPPER BOUND:    32
MOUNT POINT:        N/A                    LABEL:          None
MIRROR WRITE CONSISTENCY: on/ACTIVE
EACH LP COPY ON A SEPARATE PV ?: yes
Serialize IO ?:     NO
#dd if=/dev/test1 count=1
AIX LVCBraw000af70d00004c000000010ctest1Thu Jul  6 10:17:55 2006
Thu Jul  6 10:27:33 2006
AF70D4C00ymmy None371fa759.1
1+0 records in.
1+0 records out.
   由此看出,lvcb并未被复制,cplv复制的只是lvcb后面的数据。至少前512个字节不会复制。再进一步将源lv lvcb后的数据修改以后再做cplv,cplv后在目的lv相应位置也可以查询到修改的信息。以上均实验通过。
   还有对于一些数据库的数据迁移,如果使用cplv的话,要注意lvcb是否被改写的问题,如果被改写的话,使用cplv 很可能会带来问题。
   同样,使用cplv复制到一个新的逻辑卷,新的逻辑卷的lvcb信息将系统自动创建,lv名由系统使用默认名。所以如果lv上有文件系统的话,如果使用cplv复制lv 内容,就需要修改/etc/filesystems文件指定修改以后的lv名,或是直接修改lv名与之前的一致。
   不论是cp到一个新的lv,还是cp到一个已经存在的lv,复制的只是数据,不会对lvm信息有修改,cplv不会修改lvm信息,因为他本身就是一个lvm命令,每个lv的lvcb都是唯一的。所以操作的安全性还是比较高。
 
但是如果使用dd复制lv的话,将会改变lvcb的信息。
#cplv test
cplv: Logical volume test successfully copied to lv00 .
#lsvg -l datavg
datavg:
LV NAME             TYPE       LPs   PPs   PVs  LV STATE      MOUNT POINT
test                raw        4     4     1    closed/syncd  N/A
raw1                raw        5     5     1    closed/syncd  N/A
loglv00             jfs2log    1     1     1    closed/syncd  N/A
fslv00              jfs2       192   192   1    closed/syncd  /solaris
lv00                raw        4     4     1    closed/syncd  N/A
#lslv lv00
LOGICAL VOLUME:     lv00                   VOLUME GROUP:   datavg
LV IDENTIFIER:      000af70d00004c000000010ada200f23.5 PERMISSION:     read/writ
e
VG STATE:           active/complete        LV STATE:       closed/syncd
TYPE:               raw                    WRITE VERIFY:   off
MAX LPs:            512                    PP SIZE:        16 megabyte(s)
COPIES:             1                      SCHED POLICY:   parallel
LPs:                4                      PPs:            4
STALE PPs:          0                      BB POLICY:      relocatable
INTER-POLICY:       minimum                RELOCATABLE:    yes
INTRA-POLICY:       middle                 UPPER BOUND:    8
MOUNT POINT:        N/A                    LABEL:          None
MIRROR WRITE CONSISTENCY: on/ACTIVE
EACH LP COPY ON A SEPARATE PV ?: yes
Serialize IO ?:     NO
#dd if=/dev/lv00 count=1
AIX LVCBraw000af70d00004c000000010alv00Thu Jul  6 10:30:33 2006
Thu Jul  6 10:30:50 2006
AF70D4C00ymmNoneda200f23.5
1+0 records in.
1+0 records out.
#dd if=/dev/test of=/dev/lv00 bs=4096
16384+0 records in.
16384+0 records out.
#dd if=/dev/test count=1
AIX LVCBraw000af70d00004c000000010atestTue Jul  4 09:22:35 2006
Tue Jul  4 09:22:35 2006
AF70D4C00ymmNoneda200f23.1
1+0 records in.
1+0 records out.
#dd if=/dev/lv00 count=1
AIX LVCBraw000af70d00004c000000010atestTue Jul  4 09:22:35 2006
Tue Jul  4 09:22:35 2006
AF70D4C00ymmNoneda200f23.1
1+0 records in.
1+0 records out.
由上看出lvcb被修改。
#lslv lv00
LOGICAL VOLUME:     lv00                   VOLUME GROUP:   datavg
LV IDENTIFIER:      000af70d00004c000000010ada200f23.5 PERMISSION:     read/writ
e
VG STATE:           active/complete        LV STATE:       closed/syncd
TYPE:               raw                    WRITE VERIFY:   off
MAX LPs:            512                    PP SIZE:        16 megabyte(s)
COPIES:             1                      SCHED POLICY:   parallel
LPs:                4                      PPs:            4
STALE PPs:          0                      BB POLICY:      relocatable
INTER-POLICY:       minimum                RELOCATABLE:    yes
INTRA-POLICY:       middle                 UPPER BOUND:    8
MOUNT POINT:        N/A                    LABEL:          None
MIRROR WRITE CONSISTENCY: on/ACTIVE
EACH LP COPY ON A SEPARATE PV ?: yes
Serialize IO ?:     NO
#lsvg -l datavg
datavg:
LV NAME             TYPE       LPs   PPs   PVs  LV STATE      MOUNT POINT
test                raw        4     4     1    closed/syncd  N/A
raw1                raw        5     5     1    closed/syncd  N/A
loglv00             jfs2log    1     1     1    closed/syncd  N/A
fslv00              jfs2       192   192   1    closed/syncd  /solaris
lv00                raw        4     4     1    closed/syncd  N/A
#varyoffvg datavg
#exportvg datavg
#importvg -y datavg hdisk1
datavg    未报错
#lsvg -l datavg
datavg:
LV NAME             TYPE       LPs   PPs   PVs  LV STATE      MOUNT POINT
test                raw        4     4     1    closed/syncd  N/A
raw1                raw        5     5     1    closed/syncd  N/A
loglv00             jfs2log    1     1     1    closed/syncd  N/A
fslv00              jfs2       192   192   1   closed/syncd  /solaris
lv00                raw        4     4     1    closed/syncd  N/A
#lslv lv00
LOGICAL VOLUME:     lv00                   VOLUME GROUP:   datavg
LV IDENTIFIER:      000af70d00004c000000010ada200f23.5 PERMISSION:     read/writ
e
VG STATE:           active/complete        LV STATE:       closed/syncd
TYPE:               raw                    WRITE VERIFY:   off
MAX LPs:            512                    PP SIZE:        16 megabyte(s)
COPIES:             1                      SCHED POLICY:   parallel
LPs:                4                      PPs:            4
STALE PPs:          0                      BB POLICY:      relocatable
INTER-POLICY:       minimum                RELOCATABLE:    yes
INTRA-POLICY:       middle                 UPPER BOUND:    8
MOUNT POINT:        N/A                    LABEL:          None
MIRROR WRITE CONSISTENCY: on/ACTIVE
EACH LP COPY ON A SEPARATE PV ?: yes
Serialize IO ?:     NO
 
   由于以上是使用其他lv的lvcb块来覆盖现有的lv的lvcb块,所以它的lvcb信息在操作系统看来是比较规格的,(不知道怎么解释好,也许自己也不知道是为什么,)所以此时,exportvg importvg的时候不会报错。
  dd虽然改变了lvcb的内容,但是lslv却可正常输出,原因是vgda里保存有正确的信息。
#odmget -q "name=test" CuAt | more
CuAt:
       name = "test"
       attribute = "lvserial_id"
       value = "000af70d00004c000000010ada200f23.1"
       type = "R"
       generic = "D"
       rep = "n"
       nls_index = 648
CuAt:
       name = "test"
       attribute = "relocatable"
       value = "n"
       type = "R"
       generic = "DU"
       rep = "l"
       nls_index = 644
CuAt:
       name = "test"
       attribute = "label"
       value = ""
       type = "R"
       generic = "DU"
       rep = "s"
       nls_index = 640
CuAt:
       name = "test"
       attribute = "type"
       value = ""
       type = "R"
       generic = "DU"
       rep = "s"
       nls_index = 639
CuAt:
       name = "test"
       attribute = "size"
       value = "4"
       type = "R"
       generic = "DU"
       rep = "r"
       nls_index = 647

再看看使用其他数据覆盖lvcb块
 
#dd if=/dev/lv00 count=1
AIX LVCBraw000af70d00004c000000010alv00Tue Jul  4 09:22:35 2006
Fri Jul  7 09:43:23 2006
AF70D4C00ymmNoneda200f23.51+0 records in.
1+0 records out.
#dd if=/dev/test count=1
#!/usr/bin/ksh
pvid=$1
disk=$2
set -A a `echo $pvid|\
awk ' {
for (f=1; f <= length($0); f=f+2) {
print "ibase=16\nobase=8\n"toupper(substr($0,f,2))
}
}'|\
bc 2>/dev/null`
/usr/bin/echo "\0"${a[0]}"\0"${a[1]}"\0"${a[2]}"\0"${a[3]}"\0"\
${a[4]}"\0"${a[5]}"\0"${a[6]}"\0"${a[7]}"\0\0\0\0\0\0\0\0\c"|\
dd bs=1 seek=128 of=/dev/$diskda200f23.1
1+0 records in.
1+0 records out.
#exportvg datavg
#importvg -y datavg hdisk1
0516-622 synclvodm: Warning, cannot write lv control block data.
datavg

#lsvg -l datavg
datavg:
LV NAME             TYPE       LPs   PPs   PVs  LV STATE      MOUNT POINT
test                           4     4     1    closed/syncd  N/A
raw1                raw        5     5     1    closed/syncd  N/A
loglv00             jfs2log    1     1     1    closed/syncd  N/A
fslv00              jfs2       192   192   1    closed/syncd  /solaris
lv00                raw        4     4     1    closed/syncd  N/A
#lslv test
LOGICAL VOLUME:     test                   VOLUME GROUP:   datavg
LV IDENTIFIER:      000af70d00004c000000010ada200f23.1 PERMISSION:     read/write
以上就是lvcb被其他数据覆盖,再执行exportvg importvg的时候就报错了``

但偶用synclvodm去同步,仍然不行``
#synclvodm datavg
0516-622 synclvodm: Warning, cannot write lv control block data.
#synclvodm datavg test
0516-622 synclvodm: Warning, cannot write lv control block data.

 

 发表于: 2006-07-06,修改于: 2006-07-07 11:19 已浏览1269次,有评论0条 推荐 投诉

  网友评论

  发表评论



Copyright © 2001-2010 ChinaUnix.net All Rights Reserved

感谢所有关心和支持过ChinaUnix的朋友们
页面生成时间:0.02328

京ICP证041476号