1. 概述
Veritas Volume Manager 软件是一个高端系统级的磁盘/存贮阵列解决方案。
它可以实现简单的,在线的磁盘管理和配置,大大减少了系统维护的宕机时间, 也可以为企业电脑和新兴的SAN(storage Area Network)提供易用、在线的存储管理能力。
通过对RAID技术的支持,VERITAS VolumeManager软件提高了现有硬件的容错能力,防止磁盘和硬件故障。
Veritas Volume Manager常被缩写成VxVM。
Veritas是安装在系统的Kernel模块中。
2. 常用术语
- Disk:有SCSI id的普通物理磁盘
- VM Disk: Vx控制下的磁盘
- Sub Disk:VM disk的一部分,用来构成plex
- Plex:镜像
- Volume:虚拟磁盘,可以容纳数据
要创建一个Vx管理下的Volume(相当于一个容器),需经过如下的途径。
Disk ==> VM disk ==> Sub disk ==> plex ==> volume
Example:
(a) phsical disks clt0d0 clt1d0
= 以下都是逻辑的概念了=
(b) VM disks (dm) disk01 disk02
(c) Sub disks (sd) disk01-01 disk02-01
(d) Plex (pl) myplex
(e) Volume myVol
一个真实的Volume的输出:
v myvol fsgenENABLED 35356957 - ACTIVE - -
pl myplexmyvol ENABLED 35357021 - ACTIVE - -
sd disk01-01myplex ENABLED 17678493 0 - - -
sd disk02-01myplex ENABLED 17678493 0 - - -
3. Veritas Object Creation
Veritas有两种方法创建“对象”,即"vxmake"方法和“vxassist”方法。
每次创建“对象”时,“vxmake”根据你的要求,精确的构造出你所希望的“对象”。我们之前提到的方法(增加一个磁盘,构造VM Disk,创建subdisk…),都是我们如何使用vxmake的例子。一步一步的,我们构造出“对象”,并且组合他们。
VxAssist是另外一种方式。当你打算创建Volume,但又不想指定所有细节,我们可以先创建VMDisk,然后让VxAssist完成所有剩下的工作(subdisk和plex不用自己创建,会由VxAssist命令自动生成)。
4. layouts
layouts可视为不同RAID方法之间的不同之处。
layouts有两方面的内容,一个是stripe width,另一个是columns。前者指一次写入一块磁盘的数据量,默认为32K;后者指subdisk。
我们可以指定“stripe width”(stwidth)的大小和“columns”的数量(ncolumns)来创建stripe RAID。
5. Volume and Devices
Volume 是一个“容器”,相当于普通的磁盘分区来说,Volume的优点在于,它不是静态的。它可以被增大、缩小、修改,重新分配和控制volume,在磁盘分区上这些方式都不能实现。以上各种功能都可以在mount起来的live系统(正在使用的系统)中实施,甚至不用重启机器。如果文件系统空间不够了,你就可以先增大文件系统所在的volume空间,再扩充该文件系统。
Veritas安装和配置后,在/dev下产生一个新的目录,叫做/dev/vx。所有volume块设备(volume block device)都在这里。
Veritas和其他卷管理软件有一个很大的区别就是,Veritas是集成在操作系统中的。事实上,Veritas实现了kernel模块。在安装了VERITAS的机器上,升级solaris和/或VERITAS必须非常非常的小心谨慎。请记住,由于VERITAS集成在kernal模块中,如果kernal模块出问题或者是被替换掉了,VERITAS可能会坏掉。
Veritas启动后,有几个进程会一直运行,监测volume并保证其平稳运行。它们是:
- vxiod Vx的IO管理进程,负责volume的读写处理
- vxconfigd Vx配置管理进程
- vxrelocd Vx Hot Swap管理进程,磁盘故障时它尝试用备份替换
VERITAS中不存在任何配置文件。vxconfigd进程会监测到所有对VERITAS的操作,并更新它的“对象”数据库。接着继续监测。与其它进程相比较,Vx进程的名字就体现了它们的功能上。Vxiod进程保证数据按照要求的方式写到volume里(例如:volume是stripe类型的,就必须以stripe的方式写到磁盘里)。Vxrelocd负责发现磁盘故障,并尝试用备份来替换。
6. 操作
1. 如何启动volume(例:datavol)
- vxvol start <volname> (例:vxvol start datavol)
- vxprint -hrt 观察volume的信息
2. 创建文件系统
# ls -al /dev/vx/dsk
total 6
drwxr-xr-x 3root root 512 Mar 29 23:37 .
drwxr-xr-x 6root other 512 Mar 10 17:32 ..
brw------- 1root root 67, 5 Mar 29 23:37 datavol
drwxr-xr-x 2root root 512 Mar 29 23:37 rootdg
为什么有rootdg?因为datavol是基于“默认”DG的,也就是rootdg。我们在目录/dev/vx/dsk下可以看到它。如果我们创建一个新的DG,并在新DG上建立新的volume。新建volume将出现在/dev/vx/dsk/dgname/volname目录下。/dev/vx/dsk/datavol是一个块设备,因此我们可以在它上面创建文件系统。
使用newfs命令来创建文件系统。
# newfs /dev/vx/dsk/datavol
# mount /dev/vx/dsk/datavol /vxrocks
# vxprint -hrt
Disk group: rootdg
DG NAMENCONFIG NLOG MINORS GROUP-ID
DM NAME DEVICE TYPE PRIVLEN PUBLEN STATE
V NAME USETYPE KSTATE STATELENGTH READPOL PREFPLEX
PL NAME VOLUME KSTATE STATELENGTH LAYOUT NCOL/WID MODE
SD NAME PLEXDISK DISKOFFS LENGTH [COL/]OFFDEVICE MODE
SV NAME PLEXVOLNAME NVOLLAYR LENGTH [COL/]OFFAM/NM MODE
dg rootdgdefault default 0 952738334.1025.nexus6 # dg由4个vm disk组成
dm disk01 c2t0d0s2 sliced 3590 17678493 -
dm disk02 c2t1d0s2 sliced 3590 17678493 -
dm disk03 c2t2d0s2 sliced 3590 17678493 -
dm disk04 c2t6d0s2 sliced 3590 17678493 -
pl vol01-01 -DISABLED - 70714077 STRIPE 4/64 RW # vol01-01(pl) 由4个sd组成, 这个pl还没有激活
sd disk01-01vol01-01 disk01 0 17678493 0/0 c2t0d0ENA
sd disk02-01 vol01-01 disk02 0 17678493 1/0 c2t1d0 ENA
sd disk03-01 vol01-01 disk03 0 17678493 2/0 c2t2d0 ENA
sd disk04-01 vol01-01 disk04 0 17678493 3/0 c2t6d0 ENA
# vxprint -hrt
Disk group:rootdg
DG NAMENCONFIG NLOG MINORS GROUP-ID
DM NAME DEVICE TYPE PRIVLEN PUBLEN STATE
V NAME USETYPE KSTATE STATELENGTH READPOL PREFPLEX
PL NAME VOLUME KSTATE STATELENGTH LAYOUT NCOL/WID MODE
SD NAME PLEXDISK DISKOFFS LENGTH [COL/]OFFDEVICE MODE
SV NAME PLEXVOLNAME NVOLLAYR LENGTH [COL/]OFFAM/NM MODE
dg rootdgdefault default 0 952738334.1025.nexus6
dm disk01 c2t0d0s2 sliced 3590 17678493 - # 17678493: VM disk扇区的长度
dm disk02 c2t1d0s2 sliced 3590 17678493 -
dm disk03 c2t2d0s2 sliced 3590 17678493 -
dm disk04 c2t6d0s2 sliced 3590 17678493 -
v vol01 fsgen DISABLED EMPTY 70713885 ROUND -
pl vol01-01vol01 DISABLED EMPTY 70714077 STRIPE 4/64 RW
sd disk01-01 vol01-01 disk01 0 17678493 0/0 c2t0d0 ENA
sd disk02-01 vol01-01 disk02 0 17678493 1/0 c2t1d0 ENA
sd disk03-01 vol01-01 disk03 0 17678493 2/0 c2t2d0 ENA
sd disk04-01 vol01-01 disk04 0 17678493 3/0 c2t6d0 ENA
#
# vxvol start vol01
# vxprint -hrt
Disk group:rootdg
DG NAMENCONFIG NLOG MINORS GROUP-ID
DM NAME DEVICE TYPE PRIVLEN PUBLEN STATE
V NAME USETYPE KSTATE STATELENGTH READPOL PREFPLEX
PL NAME VOLUME KSTATE STATELENGTH LAYOUT NCOL/WID MODE
SD NAME PLEXDISK DISKOFFS LENGTH [COL/]OFFDEVICE MODE
SV NAME PLEXVOLNAME NVOLLAYR LENGTH [COL/]OFFAM/NM MODE
dg rootdgdefault default 0 952738334.1025.nexus6
dm disk01 c2t0d0s2 sliced 3590 17678493 -
dm disk02 c2t1d0s2 sliced 3590 17678493 -
dm disk03 c2t2d0s2 sliced 3590 17678493 -
dm disk04 c2t6d0s2 sliced 3590 17678493 -
v vol01 fsgen ENABLED ACTIVE 70713885 ROUND -
pl vol01-01vol01 ENABLED ACTIVE 70714077 STRIPE 4/64 RW
sd disk01-01 vol01-01 disk01 0 17678493 0/0 c2t0d0 ENA # 0/0: column id/offset
sd disk02-01 vol01-01 disk02 0 17678493 1/0 c2t1d0 ENA
sd disk03-01 vol01-01 disk03 0 17678493 2/0 c2t2d0 ENA
sd disk04-01 vol01-01 disk04 0 17678493 3/0 c2t6d0 ENA
#
创建plex的命令
# vxmake plex vol01-01 layout=stripe ncolumn=4 stwidth=32k sd=disk01-01, disk02-01, disk03-01, disk04-01
plex-name: vol01-01
layout: plex的layout类型,有三个选择:concat/stripe/raid5, concat是简单RAID,stripe是RAID 0
ncolumn: 该volumn中column的数量, 这里的话,有4个coloumn,每个subdisk是一个column。在同一个plex中,每个column必须有相同数量的subdisk组成。
stwidth:stripe的宽度,指一次性写入一个column的数据块大小。
sd= 后面跟着一个被选择组成plex的subdisk的清单。这时,所列出的subdisks联合(associate)起来,而不需要我们用vxsd命令手工联合。
7. Veritas的Volumn管理
用于Veritas的磁盘无需分区。Veritas需要的绝大多数磁盘中的默认分区。如果磁盘分区有问题,在把新磁盘加入Veritas的过程中,会有提示信息。
一旦磁盘被加入到veritas中,该磁盘的任何一部分都不能再被外界引用。这也就是为什么不能随意分区的缘故,它不希望你把它们和其它磁盘混淆起来。
两种方式把磁盘加入到Veritas的管理之中,封装(encapsulation)和初始化(initilization)。封装的方式会保留该磁盘上的数据。但初始化方式,在磁盘加入Veritas时所有数据都被擦除。
第一步,把磁盘加入Veritas的管理中,可以执行/usr/sbin/vsdiskadm命令。
第二步,创建subdisks
vxmake sd <subdiskname> <VMDiskName>, <offset>,<len>
# vxprint
Disk group:rootdg
TY NAME ASSOC KSTATE LENGTH PLOFFS STATETUTIL0 PUTIL0
dg rootdg rootdg- - - - - -
dm disk01 c2t0d0s2 - 17678493 - - - -
dm disk02 c2t1d0s2- 17678493 - - - -
dm disk03 c2t2d0s2- 17678493 - - - -
dm disk04 c2t6d0s2- 17678493 - - - -
# vxmake sd disk01-01 disk01,0,17678493 # subdisk的名字:disk01-01,创建在disk01(VMDisk)上,offset为0,扇区数
# vxmake sd disk02-01 disk02,0,17678493
# vxmake sd disk03-01 disk03,0,17678493
# vxmake sd disk04-01 disk04,0,17678493
#
创建sub disk很像给VM disk分区。比如,可以在一个VM disk上面分两个subdisk。
第三步,创建plex
volume只是容纳plex的容器而已,数据操作都是plex完成的。
# vxmake plex dataplex1
# vxprint
Disk group:rootdg
TY NAME ASSOC KSTATE LENGTH PLOFFS STATETUTIL0 PUTIL0
dg rootdgrootdg - - - - - -
dm disk01 c2t0d0s2 - 17678493 - - - -
dm disk02 c2t1d0s2- 17678493 - - - -
dm disk03 c2t2d0s2- 17678493 - - - -
dm disk04 c2t6d0s2 - 17678493 - - - -
sd disk01-01 -ENABLED 17678493 - - - -
sd disk02-01 -ENABLED 17678493 - - - -
sd disk03-01 -ENABLED 17678493 - - - -
sd disk04-01 -ENABLED 17678493 - - - -
pl dataplex1 -DISABLED 0 - - - - # 注意这个plex没有被分配给任何一个subdisk
#
要在plex中加入sub disk,需要使用命令vxsd。我们所要做的只是“联合”(associating)subdisks,当然我们也可以“分离”(disassociate) sub disks。
# vxsd assoc dataplex1 disk01-01 disk02-01 disk03-01 disk04-01
# vxprint
Disk group:rootdg
TY NAME ASSOC KSTATE LENGTH PLOFFS STATETUTIL0 PUTIL0
dg rootdgrootdg - - - - - -
dm disk01 c2t0d0s2 - 17678493 - - - -
dm disk02 c2t1d0s2- 17678493 - - - -
dm disk03 c2t2d0s2- 17678493 - - - -
dm disk04 c2t6d0s2 - 17678493 - - - -
pl dataplex1 -DISABLED 70713972 - - - -
sd disk01-01dataplex1 ENABLED 17678493 0 - - -
sd disk02-01dataplex1 ENABLED 17678493 17678493 - - -
sd disk03-01dataplex1 ENABLED 17678493 35356986 - - -
sd disk04-01dataplex1 ENABLED 17678493 53035479 - - -
#
第四步, 创建volume
# vxmake -U fsgen vol datavol plex=dataplex1
# vxprint -hrt
Disk group:rootdg
DG NAMENCONFIG NLOG MINORS GROUP-ID
DM NAME DEVICE TYPE PRIVLEN PUBLEN STATE
V NAME USETYPE KSTATE STATELENGTH READPOL PREFPLEX
PL NAME VOLUME KSTATE STATELENGTH LAYOUT NCOL/WID MODE
SD NAME PLEXDISK DISKOFFS LENGTH [COL/]OFFDEVICE MODE
SV NAME PLEXVOLNAME NVOLLAYR LENGTH [COL/]OFFAM/NM MODE
dg rootdgdefault default 0 952738334.1025.nexus6
dm disk01 c2t0d0s2 sliced 3590 17678493 -
dm disk02 c2t1d0s2 sliced 3590 17678493 -
dm disk03 c2t2d0s2 sliced 3590 17678493 -
dm disk04 c2t6d0s2 sliced 3590 17678493 -
v datavol fsgen DISABLED EMPTY 70713972 ROUND -
pl dataplex1datavol DISABLED EMPTY 70713972 CONCAT - RW # CONCAT: 简单的RAID
sd disk01-01 dataplex1 disk01 0 17678493 0 c2t0d0 ENA
sd disk02-01 dataplex1 disk02 0 17678493 17678493 c2t1d0 ENA
sd disk03-01 dataplex1 disk03 0 17678493 35356986 c2t2d0 ENA
sd disk04-01 dataplex1 disk04 0 17678493 53035479 c2t6d0 ENA
#
启用volume,在volumn上创建文件系统并且把它mount起来。
# vxvol startdatavol
# vxprint -hrt
Disk group:rootdg
DG NAMENCONFIG NLOG MINORS GROUP-ID
DM NAME DEVICE TYPE PRIVLEN PUBLEN STATE
V NAME USETYPE KSTATE STATELENGTH READPOL PREFPLEX
PL NAME VOLUME KSTATE STATELENGTH LAYOUT NCOL/WID MODE
SD NAME PLEXDISK DISKOFFS LENGTH [COL/]OFFDEVICE MODE
SV NAME PLEXVOLNAME NVOLLAYR LENGTH [COL/]OFFAM/NM MODE
dg rootdgdefault default 0 952738334.1025.nexus6
dm disk01 c2t0d0s2 sliced 3590 17678493 -
dm disk02 c2t1d0s2 sliced 3590 17678493 -
dm disk03 c2t2d0s2 sliced 3590 17678493 -
dm disk04 c2t6d0s2 sliced 3590 17678493 -
v datavol fsgen ENABLED ACTIVE 70713972 ROUND - # KSTATE(Kernel State)为Enabled ACTIVE
pl dataplex1datavol ENABLED ACTIVE 70713972 CONCAT - RW
sd disk01-01 dataplex1 disk01 0 17678493 0 c2t0d0 ENA
sd disk02-01 dataplex1 disk02 0 17678493 17678493 c2t1d0 ENA
sd disk03-01 dataplex1 disk03 0 17678493 35356986 c2t2d0 ENA
sd disk04-01 dataplex1 disk04 0 17678493 53035479 c2t6d0 ENA
#
在/dev/vx/dsk下,执行ls
# ls -al/dev/vx/dsk
total 6
drwxr-xr-x 3root root 512 Mar 29 23:37 .
drwxr-xr-x 6root other 512 Mar 10 17:32 ..
brw------- 1root root 67, 5 Mar 29 23:37 datavol # 我们刚才创建的Vx Volumn
drwxr-xr-x 2root root 512 Mar 29 23:37 rootdg # volume是基于“默认”DG的,也就是rootdg
#
在volume上创建文件系统。
# newfs /dev/vx/dsk/datavol
newfs:construct a new file system /dev/vx/rdsk/datavol: (y/n)# y
/dev/vx/rdsk/datavol:70713972 sectors in 34529 cylinders of 32 tracks, 64 sectors
34528.3MB in705 cyl groups (49 c/g,49.00MB/g, 6144 i/g)
super-blockbackups (for fsck -F ufs -o b=#) at:
32, 100448,200864, 301280, 401696, 502112, 602528, 702944, 803360, 903776,
1004192,1104608, 1205024, 1305440, 1405856, 1506272, 1606688, 1707104,
1807520,1907936, 2008352, 2108768, 2209184, 2309600, 2410016, 2510432,
snipped out
#
# mount/dev/vx/dsk/datavol /vxrocks