1. Create VG/LV by vxvm(过程样例)a. 在OceanStor上创建LUN,并mapping b. 用root登录主机,执行下面命令: 1) hot_add vxdisk scandisks 2) vxdisk -o alldgs list(或者vxdisk list) 3) 新增的盘处在offline状态,则执行vxdisksetup –if sdb 4) vxdg init vgscp vgscp_1=sdb //创建VG 5) vxassist -g vgscp -U fsgen make lvscp 10G vgscp_1 //创建LV 6) mkfs.vxfs /dev/vx/dsk/vgscp/lvscp //创建文件系统 7) mkdir /tellin/tellinapp //创建挂接点 8) mount.vxfs /dev/vx/dsk/vgscp/lvscp /tellin/tellinapp //挂载文件系统 9) df –h //检查文件是否挂接成功 10) umount /dev/vx/dsk/vgscp/lvscp //去挂载文件系统 11) vxvol -g vgscp stopall //去激活 12) vxdg deport vgscp //导出VG c. 用root登录备机,执行下面命令 1) vxdg import vgscp //导入VG 2) vxvol -g vgscp startall //激活VG 3) mkdir /tellin/tellinapp //创建挂接点 4) mount.vxfs /dev/vx/dsk/vgscp/lvscp /tellin/tellinapp //挂载文件系统 5) umount /dev/vx/dsk/vgscp/lvscp //去挂载文件系统 6) vxvol -g vgscp stopall //去激活 7) vxdg deport vgscp //导出VG d. 用root登陆主机,执行下面命令 1) vxdg import vgscp //导入VG 2) vxvol -g vgscp startall //激活VG 3) mount.vxfs /dev/vx/dsk/vgscp/lvscp /tellin/tellinapp //挂接文件系统 2. 挂VG(枚举样例)//挂载所有的VG,枚举全部 a. vxdg import vgora //导入VG vxvol -g vgora startall //激活VG b. vxdg import vgopt vxvol -g vgopt startall c. vxdg import vgphydb vxvol -g vgphydb startall d. vxdg import vguoa vxvol -g vguoa startall e. vxdg import vgsee vxdg -g vgsee startall 3. LV is corruptedmount /dev/vg02/vol2 /mnt/vg02/vol2 UX:vxfs mount: ERROR: V-3-21268: /dev/vg02/vol2 is corrupted. needs checking fsck -F vxfs -y -o full /dev/vg00/lvol2 |
||
|
|
|
|
|
|
命令详述见下面 |
||
步骤 |
命令 |
说明 |
检查磁盘状态 |
vxdisk -e list
|
|
检查磁盘组状态 |
vxdg |
|
|
see01_a:/usr/lib/vxvm/bin # ./vxdiskunsetup sdg
|
|
|
/etc/vx/bin/vxreattach -c sde |
检查挂接磁盘操作是否可行 |
启动vxvm守护进程 |
/usr/lib/vxvm/bin # vxdctl enable
|
重新扫描设备列表,重新挂接磁盘vxdg –Cf import dg |
|
用vxdisk list命令察看,如果看到上述硬盘为error,可以用下述命令使其online: # ./vxdisksetup c2t0d0
如果不是error
|
如果对磁盘使用vxdiskunsetup和vxdisksetup,并指定与配置备份中不同的属性,可能会损坏公共区域和其中的所有用户数据。 |
运行使硬盘在线的命令 |
# vxdisk online sdb |
磁盘组如果不是online状态,不能重新建立磁盘组 |
显示卷的可访问性和可用性信息 |
see01_a:~ # vxinfo -g vgsee lvcdr fsgen Startable vg_name_srl fsgen Startable
see01_a:~ # vxinfo -p -g vgsee vol lvcdr fsgen Startable plex lvcdr-01 CLEAN vol vg_name_srl fsgen Startable plex vg_name_srl-01 CLEAN |
|
Plex状态转换 |
vxinfo –p –g vgsee vxmend -o force -g vgsee off lvcdr-01 vxmend -o force -g vgsee on lvcdr-01 vxmend -o force -g vgsee fix active lvcdr-01
|
|
文件系统不使用 |
see01_a:~ # mount see01_a:/dev/vx/rdsk # fuser /dev/vx/rdsk/vgora/* /dev/vx/rdsk/vgora/lvctl1: 22761 22765 22769 23777 /dev/vx/rdsk/vgora/lvctl2: 22761 22765 22769 23777 /dev/vx/rdsk/vgora/lvctl3: 22761 22765 22769 23777
/dev/vx/rdsk/vgora/lvredo1: 22765see01_a:/app # umount /home/oracle/flashback/ # vxvol -g vgrbi stopall see01_a:/app # vxdg deport vgopt see01_a:~ # umount /home/see/rbirun see01_a:~ # umount /home/see/recode |
|
|
执行mount命令之前需要激活 vxvol -g vgphydb startall |
|
|
激活以后数据库才能启动 |
|
|
mount.vxfs /dev/vx/dsk/vgopt/lvarchive /home/oracle/archive |
|
|
|
|
重建磁盘组 |
将磁盘阵列所属的C2T22D0S2作为HOT-SPARE磁盘 # vxedit set spare=on sybased05 其中sybased05是C2T22D0S2的名字,它是在建立磁盘组时自动取的名字
注意:在建立raid5卷时,不能选取hot-spare盘,即不能使用上面的syabsed05,也就是C2T22D0S2这块盘 |
|
建卷 |
see01_a:/etc # vxassist -g vgsee make vgsee 10G
# vxassist –g sybasedg make datadev00 2g layout=raid5 sybased01 sybased02 syabsed03
sybased04 sybased06
vxassist -g datadg make vol1 500g |
|
基础知识 |
||
VxVM & 本地磁盘 l Veritas Volume Manager(VxVM)提供了一个在线数据存储管理基础,给系统盘和数据盘做本地的镜像和其它RAID功能,并可在线改变Volume的大小。 l 将物理磁盘置于VxVM控制之下,即在物理对象和VxVM对象之间建立了关系。 Volume Manager的对象:物理对象和虚拟对象(VxVM对象) 物理对象:Physical Disk à VM Disk àsub disk 虚拟对象:Subdisks à Plexes àVolumesàDisk Groups(将VM Disk划入到Disk Group中///当一个主机系统上安装了VxVM软件后,我们必需将VM Disk划入到Disk Group中,另外再在Disk Group上创建一些逻辑卷,来达到VxVM控制物理磁盘的目的。) (1.VM Disk由VxVM控制并组成磁盘组 2.一个或多个Subdisk组成Plex 3.一个卷由一个或多个Plex组成) 1. 安装VxVM 2. 物理磁盘置于VxVM管理之下,成为VM disk(将VM磁盘组成磁盘组) 3. 划入Disk Group 4. 划分LV l 若要将物理磁盘置于VxVM控制之下,磁盘一定不能受LVM控制。 |
||
VVR Veritas Volume Replicator(VVR)是一款优秀的异地备份软件,提供数据中心和容灾备点的数据库和应用数据的复制。 |
||
VxVM & VVR结合 如果把VxVM和VVR集成在一起,就可通过IP网络将卷组复制到安全区域。 |
||
|
||
|
||
VM Disks l 一个VM Disk至少应该包含一个分区 l 一个VM Disk通常分为两个部分
|
||
Subdisks Plex由分布在一个或多个磁盘上的一个或多个SubDisk组成,通常有三种方法可以将SubDisk组成Plex:串联、RAID 0、RAID 5。
|
||
Disk Groups 一个磁盘组由一个或多个VM disk组成。缺省的磁盘组名叫rootdg。用户可以增加新的磁盘组。一个卷必须建立在一个磁盘组之内。一个磁盘组内的多个VM disk有相同的配置信息。 |
||
Plexes CLEAN(off,on)->STALE(fix active)->active OFFLINE(on)->ON 参见前文命令 |
||
Volumes l 一个卷由一个或多个Plex组成,每一个Plex保存一份相同数据的拷贝。一个卷最多可以有32个Plexes。一个卷内所有的Plexes必须属于同一个磁盘组。卷通常被命名为VOL##,而其中的Plex通常被命名为VOL##-##。
|
||
此次遇到一个奇怪的问题是:当1号机正在使用磁盘组,2号机只要重新启动,并且执行vxdg import sybasedg命令,则两台机器上都能看到磁盘组,由于双方发生了资源争抢现象,很容易导致磁盘组被破坏,我曾经因为这个问题将磁盘组建了n次,数据库安装n次,由于磁盘组毁坏,所以整个数据库也被破坏,后来在启动时增加了一个控制文件,过程如下: # cd / #cd /etc/rcS.d #vi S98vxvm 内容为: echo “stop sybasedg” vxvol –g sybasedg stopall vxdg deport sybasedg 添加了上述文件后,系统每次启动时自动将磁盘组deport出去,这里好像是停止了vxvm的autoimport属性,磁盘组不再被重新import。
dgdisable状态的dg通常有几种原因导致:
1) dg下的volume还在被使用的时候加-f参数强行deport dg(通常不是手工误操作,而是发生故障时,数据库Agent的退出代码没有退出干净,导致数据库还在访问volume裸设备或者应用Agent的退出代码没有退出干净导致文件系统没有真正umount成功等情况,而VCS的servicegroup的offline操作执行到dg时就会offline失败而调用clean操作,这个clean操作就会自动加-f参数强行deport dg,但还是会失败,并且留下一个dgdisabled状态),如果是这种情况,就需要通过lsof找到是那些进程还在访问裸设备并kill之(针对使用裸设备的情况)或者cat /proc/mounts文件找到还在挂载的文件系统通过fuser -k -m mount_point杀掉在该文件系统上打开了文件的进程最后通过/opt/VRTSvcs/bin/vxumount -o force mount_point来强行卸载该文件系统(针对使用文件系统的情况),然后执行vxdg deport dgname和vxdg import dgname来恢复这个故障dg,执行vxvol -g dgname -o bg startall来激活该dg下所有的volume。通常这种情况下还需要执行fsck来检查和恢复文件系统;
1.1) 之前有这么一个场景,和第1个场景非常相像,不过是由于mount命令的配合问题和代码上的不完备原因共同自动导致的:单板重启时应用进程没有关闭完全,导致重启时文件系统其实是在活动状况下而留下了需要执行fsck的标志位。重启后VCS自动执行online servicegroup操作,执行dg资源的online(dg import)成功,执行volume资源的online(volume start)也成功,但到了mount资源的online时,由于mount命令和mount.vxfs命令之间传递执行结果的缺陷,导致发生了mount命令输出中显示该文件系统没有挂载但/proc/mounts文件里却显示该文件系统已经挂载,而标准版本的mountagent代码不能处理这种异常,online报失败执行clean报成功,却仍然留下了/proc/mounts文件里的相应条目,这之后volume资源offline失败,clean成功,继续保留了/proc/mounts文件里的条目,后面就和第1个场景一样了,执行dg资源的offline失败,clean也会失败,因为操作系统判断该dg下的volume仍然处于打开状态,clean里的强行deport dg操作就会让该dg留下dgdisabled的状态。这个问题后来通过使用HWMountAgent(里面增加了对这种异常的处理代码确保这种需要做fsck的vxfs文件系统可以online成功,也增加了代码确保由于其他异常导致出现mount命令输出于/proc/mounts文件内容不一致时可以正常执行volume的offline/clean操作并去除/proc/mounts文件的相应条目)可以很好消除了;
2) I/O的访问异常(通常是磁盘I/O访问错误,比方说磁盘阵列掉电)导致运行期间VxVM直接将dg置为dgdisable状态,这种场景在恢复I/O后重启就可以解决。如果要在线恢复,可以在I/O恢复后,执行和第1种场景一样的恢复操作;
3) 极少见的情况是运行期间由于竞争读写导致vxfs文件核心metadata损坏而将文件系统置为full+readonly+need full fsck状态,引发servicegroup的故障offline。和第1.1个场景非常类似,标准版本的mountagent代码对这种异常处理不完备,执行了clean后其实没有完全成功,留下了/proc/mounts里面的条目,却认为clean已经完成而没有执行vxumount(这个命令可以对vxfs文件系统消除上述不一致),后面发生的就和第1.1场景完全一样了。同样,使用了HWMount后这种情况也可以正确消除;
针对你反馈的信息,第9块单板比较大的可能是第1.1场景。
第5块单板的情况我没有看懂,第1次执行vxdisk list和vxdg list的输出和第2次执行间你还执行了什么操作导致状态发生了变化?vxdisk list看到的auto error状态意味着磁盘上的分区表格式完全不被VxVM识别或者是刚刚划分的LUN,上面还完全没有分区表等情况,这和auto:none online:invalid是很不同的,后者表明VxVM可以识别到这块盘,只是在磁盘上没有发现VxVM的私有区或者有效的私有区(比方说私有区和公有区的数据都完全没被破坏,但是磁头的某些标志位被破坏导致VxVM不认可其实仍然可以恢复的私有区为有效私有区); |
||
|
|
|