两个卷组 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.