A-A+

AIX 磁盘 PVID 被修改恢复案例

2016年06月21日 AIX运维 暂无评论 阅读 1,039 次

inewup-aix-pvid

看到这篇文章,不错备用

pvid是aix系统中ODM,LVM用于识别PV的序列号,操作系统通过pvid来识别pv。当pv被添加到系统中之后,可以通过两种方式生成pvid

1,cfgmgr -v

2,lspv 如果没有PVID的话,执行chdev -l hdiskn -a pv=yes

也就是说当系统可以识别硬盘并将硬盘认可为pv(即lvm的组件)的时候。系统就分配了pvid给硬盘,系统的odm库中保存有pvid。pvid的生成原则是:

主板序列号+形成pv时候的时间戳,pvid除了写入odm库,在硬盘头信息里(0扇区的头几个字节)以及VGDA 也将写入pvid,也就是说pvid存在三个地方。

To make a disk into a physical volume, the PVID is placed onto the disk. ThePVID is an combination of the machine's serial number (from the systems EPROMs) and the date the PVID was generated. This combination ensures the extremely low chance of PVIDs being duplicated. When the system is booted, the disk configurator looks at the PVID residing on the disk and compares it with an entry in the ODM. If an entry is found, then the disk is given the hdiskx number in the ODM that is associated with the PVID. If there is no matching entry, then the next name in the pool of 'free' hdisk names is allocated to the physical volume.

可以通过 lquerypv -H hdisk4查看pv上的pvid

bash-4.2# lquerypv -H /dev/hdisk4

00cd3585e72effee0000000000000000

bash-4.2# lspv

hdisk0 00cd34c53fd6f1c2 rootvg active

hdisk1 00cd34c58a50fa1e rootvg active

hdisk4 00cd3585e72effee datavg active

可以看到三个pv的pvid前几位数字是相同的(即主板序列号),后几位数字是不同的。

可以通过以下方法修改pvid

chdev -l hdisk2 -a pv=clear 清除pv 磁盘头的pvid

chdev -l hdisk2 -a pv=yes   重新定义pvid,如果pvid存在,使用这个命令也没风险。

如果pv已经加入卷组,首先还得先varyoffvg ,exportvg

执行以上步骤,pv的pvid将会改变。这里修改的只是磁盘头的pvid,并没有修改vgda中的pvid。

当pv已经是一个卷组的成员时,切记不要随便修改pvid,当然如果vg是varyon的,你也是修改不了的。

bash-4.2# chdev -l hdisk2 -a pv=clear

Method error (/etc/methods/chgfcparray):

0514-062 Cannot perform the requested function because the

specified device is busy.

因为当pv加入一个卷组的时候,pvid将被写入vgda,如果你擅自修改卷组的pvid,然后新生成的pvid将不能和卷组vgda中的pvid相匹配, 这样就无法importvg,就无法varyonvg,很有可能就会丢失数据!当importvg的时候,odm将读取pv上的vgda,如果vgda上 pvid与自身磁盘上的pvid不符合的话,将出现错误!

注意:当pv加入卷组以后,pvid在硬盘上存在于至少两个地方,一个是在硬盘头,一个是在vgda中。这两个地方的pvid一般是相同的,但是由于pvid的修改,可能造成不一致,这样就有可能丢失数据。

bash-4.2# lspv

hdisk0 00cd34c53fd6f1c2 rootvg active

hdisk1 00cd34c58a50fa1e rootvg active

hdisk2 00cd34c5eb733676 None

......................................

bash-4.2# smitty mkvg

bash-4.2# lspv

hdisk0 00cd34c53fd6f1c2 rootvg active

hdisk1 00cd34c58a50fa1e rootvg active

hdisk2 00cd34c5eb733676 testvg active

.....................................

用hdisk2创建了testvg,同时建立了pvidtest文件系统。

bash-4.2# mount /pvidtest

bash-4.2# df -g

Filesystem GB blocks Free %Used Iused %Iused Mounted on

/dev/hd4 5.00 4.42 12% 13825 2% /

...................................

/dev/fslv00 0.50 0.50 1% 4 1% /pvidtest

bash-4.2# cd /pvidtest

bash-4.2# vi test.txt

bash-4.2# ls

lost+found test.txt

在文件系统里写几个测试数据。

bash-4.2# varyoffvg testvg

bash-4.2# exportvg testvg

bash-4.2# importvg -y testvg hdisk2

testvg

--export/import vg都是没问题的。

bash-4.2# chdev -l hdisk2 -a pv=clear

Method error (/usr/lib/methods/chgdisk):

0514-062 Cannot perform the requested function because the

specified device is busy.

pvvg没有varyoff是改变不了pvid的。

bash-4.2# varyoffvg testvg

bash-4.2# chdev -l hdisk2 -a pv=clear

hdisk2 changed

bash-4.2# lspv

hdisk0 00cd34c53fd6f1c2 rootvg active

hdisk1 00cd34c58a50fa1e rootvg active

hdisk2 none None

.....................

bash-4.2# chdev -l hdisk2 -a pv=yes

hdisk2 changed

bash-4.2# lspv

hdisk0 00cd34c53fd6f1c2 rootvg active

hdisk1 00cd34c58a50fa1e rootvg active

hdisk2 00cd34c538a357cf None

................................

注意看pvid已经改变了。vg也消失了。

bash-4.2# varyonvg testvg

0516-510 varyonvg: Physical volume not found for physical volume

identifier 00cd34c5eb733676

vg已无法varyon。

bash-4.2# lqueryvg -Atp hdisk2

0516-320 lqueryvg: Physical volume hdisk2 is not assigned to a volume group.

Max LVs: 256

PP Size: 29

Free PPs: 556

LV count: 2

PV count: 1

Total VGDAs: 2

Conc Allowed: 0

MAX PPs per PV 1016

MAX PVs: 32

Quorum (disk): 1

Quorum (dd): 1

Auto Varyon ?: 1

Conc Autovaryo 0

Varied on Conc 0

Logical: 00cd34c500004c0000000151388d1f90.1 loglv01 1

00cd34c500004c0000000151388d1f90.2 fslv00 1

Physical: 00cd34c5eb733676 2 0

......................

获取hdisk2 vgda的信息。
以下开始修复:

1.bash-4.2# exportvg testvg

2.创建逻辑卷名对应表文件。第一字段为VGDA区中的逻辑卷的名,第二字段为在新卷组中新的逻辑卷名,可相同也可不同;为了修复原有卷组的内容,通常逻辑卷名保持不变。

bash-4.2# cat pvidfixlv

fslv00:fslv00

loglv01:loglv01

3.在硬盘上重新创建卷组,保留原有卷组的数据结构。

bash-4.2# recreatevg -y testvg -l /tmp/pvidfixlv hdisk2

testvg

bash-4.2# lsvg -o

testvg

......

bash-4.2#

4.修改/etc/filesystems

/fs/pvidtest:

dev = /dev/fslv00

vfs = jfs2

log = /dev/loglv01

mount = false

check = false

options = rw

account = false

recreatevg 后,系统自动创建了目录/fs,所有的文件系统加载到了/fs下,原来的mountpoint是以/为基准的。

bash-4.2# lsvg -l testvg

testvg:

LV NAME TYPE LPs PPs PVs LV STATE MOUNT POINT

loglv01 jfs2log 1 1 1 closed/syncd N/A

fslv00 jfs2 1 1 1 closed/syncd /fs/pvidtest

/pvidtest:

dev = /dev/fslv00

vfs = jfs2

log = /dev/loglv01

mount = false

check = false

options = rw

account = false

修改/etc/filesystems之后的样子。

bash-4.2# mount /pvidtest

bash-4.2# cd /pvidtest

bash-4.2# ls

lost+found test.txt

文件都在,状态也都正常。修复完毕。

再次查看VGDA中的数据,可发现hdisk2的PVID也已经被修改为新的值
bash-4.2# lqueryvg -Atp hdisk2
Max LVs: 256
PP Size: 29
Free PPs: 1114
LV count: 2
PV count: 2
Total VGDAs: 3
Conc Allowed: 0
MAX PPs per PV 1016
MAX PVs: 32
Quorum (disk): 1
Quorum (dd): 1
Auto Varyon ?: 1
Conc Autovaryo 0
Varied on Conc 0
Logical: 00cd34c500004c000000015138a9f3e6.1 loglv01 1
00cd34c500004c000000015138a9f3e6.2 fslv00 1
Physical: 00cd34c538a9f276 1 0
............................
=============================
扩展思想:如果是多块盘组成的VG又会是什么样子的呢?
bash-4.2# lspv
hdisk0 00cd34c53fd6f1c2 rootvg active
hdisk1 00cd34c58a50fa1e rootvg active
hdisk2 00cd34c538c772b6 testvg active
hdisk3 00cd34c538c7768c testvg active
....................................
同样的在vg没有varyoff的时候是不能修改pvid的
bash-4.2# chdev -l hdisk3 -a pv=clear
Method error (/usr/lib/methods/chgdisk):
0514-062 Cannot perform the requested function because the
specified device is busy.
bash-4.2# varyoffvg testvg
bash-4.2# lspv
........................
hdisk2 00cd34c538c772b6 testvg
hdisk3 00cd34c538c7768c testvg
...............
bash-4.2# chdev -l hdisk3 -a pv=clear
hdisk3 changed
bash-4.2# lspv
hdisk0 00cd34c53fd6f1c2 rootvg active
hdisk1 00cd34c58a50fa1e rootvg active
hdisk2 00cd34c538c772b6 testvg
hdisk3 none None
..............................................
bash-4.2# chdev -l hdisk3 -a pv=yes
hdisk3 changed
bash-4.2# lspv
hdisk0 00cd34c53fd6f1c2 rootvg active
hdisk1 00cd34c58a50fa1e rootvg active
hdisk2 00cd34c538c772b6 testvg
hdisk3 00cd34c538d61c54 None
.........................................
bash-4.2#
同样的,exportvg后,也可以再recreatevg
bash-4.2# exportvg testvg
bash-4.2# recreatevg -y testvg -l /tmp/pvidfixlv hdisk2 hdisk3
testvg
bash-4.2# lspv
hdisk0 00cd34c53fd6f1c2 rootvg active
hdisk1 00cd34c58a50fa1e rootvg active
hdisk2 00cd34c538dd3b9c testvg active
hdisk3 00cd34c538dd3cd6 testvg active
..............................
查看文件系统,系统又在前面增加了一个/fs前缀
/fs/fs/pvidtest:
dev = /dev/fslv00
vfs = jfs2
log = /dev/loglv01
mount = false
check = false
options = rw
account = false
修改,mount,查看文件一气呵成

来源http://www.cftol.com/infosquare/publicinfo_index/588

给我留言

Copyright © 2011-2016 零下二十四度Theme By  Ality  京ICP备16007547号   关于本站

用户登录