Oct 24, 2008

AIX LVM比较

卷组描述区(VGDA)、卷组状态区(VGSA)和逻辑卷控制块(LVCB)构成了LVM的配置数据
1.
VGDA:卷组描述区。
位于所有硬盘起始的部分,VGDA记录着卷组中每个逻辑卷(LV)的逻辑分区(LP)与物理分区(PP)的映射关系。主要用于更新ODM。
VGSA:卷组状态区。
主要用于描述VG中PV和PP的状态信息,在激活一卷组时,VGSA可以确定卷组中那些物理分区(PP)是无效的(或陈旧的),哪些物理卷已丢失,进而确定卷组中的物理卷是否可用。

LVCB:逻辑卷控制块。
位于所有LV的起始部分,包含与LV有关的信息,如LV的大小、类型、最后更新时间等。卷组中的每个PV至少都有一个VGDA,VGDA能对该PV进行自我描述,每个LVM命令都可以同步卷组中所有PV的VGDA,从而使卷组中每个PV的VGDA都保持相同的时间戳,如果其中一个PV错误导致无法运行,则就无法更新同步VGDA。在把一个硬盘变成物理卷时(使用mkdev命令)就在这个硬盘的开始部分保留一个存放VGDA的空间,当把这个物理卷加入到一个卷组中时(使用mkvg或extendvg)才将该卷组的信息写进这个物理卷的VGDA中。当把一个PV从所属VG中删除时(使用reducevg命令),同时从这个PV的VGDA中清除该卷组的信息。

描述LVM的构成信息不会存放在一个地方,还会存在于系统的各个地方,AIX的大多数系统配置都会存放在ODM数据库中,所以已配置的VG,LV和PV的信息都会保存在ODM数据库中,所以当导入(import)一个卷组时,就会把要导入卷组的VGDA信息保存在ODM数据库中,相反,导出(export)一个卷组时,就会把这个卷组的VGDA信息从ODM数据库中删除。

关于PVID:PVID是PV的物理标识符,这个PVID是系统随机生成的,而且是可变的。
硬盘在未被定义为PV之前是没有PVID号的。当系统进行cfgmgr后,系统就会为硬盘分配一个名字和PVID号。
如果想手工清除PVID号用chdev -l hdiskn -a pv=clear.重新生成pvid号用cfgmgr或chdev -l hdiskn -a pv=yes.

ODM:ODM数据库用与描述物理设备相同的方式描述VG和LV,它影响VGDA、VGSA、LVCB中的信息。LV在ODM中处于Defined状态,而物理设备则处于Available状态。
在/etc/vg目录中保存有VGID,
可用#lqueryvg �p hdiskn �At查询VGID
可用#lqueryvg [�g VGID|-p PVname] [-NsFncDaLPAt]查询PVID
可用#getlvcb �AT hdn查询LVCB信息
可用 #ipl_varyon �i显示系统中的PV,PVID及PV所属的VG的VGID

2.
当VG中有两个PV,且两个PV互为镜像时,如一个PV上的VGID毁坏了,
可用#chvg -Q n vgname命令恢复,
然后用#varyonvg vgname将VG挂在系统上即可。

3.当ODM中的有关VG的信息毁坏时,
可用#varyoffvg vgname,
#exportvgvgname,
#importvg �y vgname �f hdiskn
#varyonvg vgname命令重建ODM中的VGDA项。

4.当PV上的VGDA毁坏时(此问题通常是由于从系统中卸载一块PV而未事先将
其从VG中卸载),应先找出丢失PV的PVID,然后将丢失的PV重新加入ODM
中,再将此PV从VG中卸载,最后从系统中删除此PV。
具体步骤为:
#lqueryvg �p hdiskn �At从VGDA查找所有PV的PVID
#lspv从ODM和VGDA中查找所有PV的PVID
#dd if=/dev/hdiskn count=1|od �x|grep 0000200
查找系统中实际存在的所有PV的PVID)命令找出丢失PV的PVID
#odmget �q "name=hdiskn" CuDv >>/tmp/hdiskx.add
#odmget �q "name=hdiskn" CuAt >>/tmp/hdiskx.add
从ODM中取出系统中实际存在的PV的信息
#vi /tmp/hdiskx.add
#odmadd /tmp/hdiskx.add
将编辑好的文件加入到ODM中(用丢失的PV的Pvname和PVID替换文件中的
Pvname和PVID)
#lslv �l hdn
查看hdn上的LV分配情况(In Band:表示在LV中部的LP占全部LP的比例)
#lslv �m hdn
查看hdn上的LP-PP-PV的对应情况
#reducevg vgname hdiskx
#rmdev hdiskx
将丢失的PV从系统中删除。(可用extendvg �f vgname hdiskn命令加新的
PV至VG中)。

5.当ODM中的有关Rootvg的信息毁坏时,可用下面的scrīpt文件恢复ODM中
的VGDA信息。
#vi scrīpt
PV=/dev/ipldevice
VG=rootvg
cp /etc/objrepos/CuAt /etc/objrepos/CuAt.$$
cp /etc/objrepos/CuDep /etc/objrepos/CuDep.$$
cp /etc/objrepos/CuDv /etc/objrepos/CuDv.$$
cp /etc/objrepos/CuDvDr /etc/objrepos/CuDvDr.$$
lqueryvg �Lp $PV |awk '{print $2}' |while read Lvname;
do
odmdelete �q "name=$Lvname" �o CuAt
odmdelete �q "name=$Lvname" �o CuDv
odmdelete �q "value3=$Lvname" �o CuDvDr
done
odmdelete �q "name=$VG" �o CuAt
odmdelete �q "parent=$VG" �o CuDv
odmdelete �q "name=$VG" �o CuDv
odmdelete �q "name=$VG" �o CuDep
odmdelete �q "dependency=$VG" �o CuDep
odmdelete �q "value1=10" �o CuDvDr
odmdelete �q "value3=$VG" �o CuDvDr
importvg �y $VG $PV#igonre lvaryoffvg errors
varyonvg $VG
#./scrīpt hdiskn

6.迁移Rootvg时应注意:
重新创建BLV(BootLV),更改Bootlist,更改系统的DUMP设备。
迁移Rootvg的步骤:
#smit mksysb
先备份Rootvg,然后将新硬盘安装至系统
#bosboot �ad /dev/newdisk
在新硬盘上创建BLV
然后更新系统的Bootlist(参看系统安装说明)并重启
#mkboot �c �d /dev/olddisk
将欲移出的硬盘上的Boot记录删除
#savebase [-d /dev/newdisk]
将设备配置库中的设备信息保存在新硬盘上
#sysdumpdev �p /dev/sysdumpnull
激活临时的DUMP设备
#sysdumpdev �p /dev/hd6
重置系统的DUMP设备
#migratepv olddisk newdisk
将旧硬盘上的LV迁移至新硬盘上
#reducevg vgname olddisk
将旧硬盘从Rootvg中迁移出来
#rmdev �dl olddisk
将旧硬盘从系统和ODM数据库中删除
#extendvg [-f] vgname newdisk
将新硬盘加入到Rootvg中。

7.从Rootvg中卸载PV的步骤:
#migratepv �l lvname 欲卸载PV 保留PV
将在欲卸载的PV上的,与Rootvg有关的LV迁移至保留在Rootvg中的PV上
#backup �u �0 �f /dev/rmtn /fsname
将欲迁移至新VG的FS备份下来
#rmfs /fsname
删除欲卸PV上的FS
#reducevg rootvg 欲卸载PV
将欲卸载的PV从Rootvg中卸下
#mkvg �y 'newvg' 欲卸载PV
在此PV上创建新的VG
#varyonvg newvg
将新VG挂在系统上
#smit crfs
#mount /fsname
将FS安装在新VG上
#cd /fsname
#restore �rvf /dev/rmtn /fsname
#rm restoresymtable
将FS恢复到新VG上(以上步骤不适用于迁移BLV和系统DUMP设备)。

8.在同一VG中迁移FS:
#migratepv �l lvname 源PV 目标PV

9.在不同的VG间迁移FS:
#smit crfs
在目标VG上创建一与源FS大小相同的临时FS
#mount /tempfs
将临时FS安装目标VG上
#cd /sourcefs
#find . � print|tar cvf /tempfs
将源FS的内容拷贝至临时FS
#smit crfs
#mount /newfs
在目标VG上创建一与临时FS大小相同的新FS
#cd /tempfs
#find . �print|tar cvf /newfs
将临时FS的内容拷贝至新FS
#rmfs /tempfs
将目标VG中的临时FS删除。(源FS和新FS可以同名)。

10.在不重新创建和删除VG的基础上,更改VG名:
#umount �a
卸载所有属于VG的FS
#varyoffvg VG_Name
#exportvg VG_Name
卸载VG
#smitty importvg
装载VG,在VG name域中输入新的VG名,在PV name域中输入属于此VG的任一块PV名
#mount FS_Name
装载所有属于此VG的FS

No comments:

Post a Comment