分类: 系统运维
2012-11-14 10:44:11
Solaris Volume Manager
选择最能满足存储需求的设备主要取决于三个因素:
■ 性能
■ 可用性
■ 成本
使用Solaris VolumeManager 有助于管理性能、可用性和成本三者的权衡因素。通常,
使用Solaris VolumeManager 可以减少许多权衡因素。
Solaris VolumeManager 可以与运行Solaris 操作系统的任何系统上的任何受支持存储设
备很好地协作。
Solaris VolumeManager 支持以下RAID 级别:
■ RAID 级别0-尽管条带和串联都不提供冗余性,但这些卷通常称为RAID-0。实质
上,数据分布于相对较小且大小相等的分段中,这些分段交替且均匀地分配于多个
物理磁盘中。任何单个驱动器故障都会导致数据丢失。RAID-0 提供了较高的数据
传输率和较高的I/O 吞吐量,但与单个磁盘相比,可靠性和可用性都比较低。
■ RAID 级别1-镜像过程使用等量磁盘容量存储数据和一个数据副本(镜像)。数据
在两个或更多物理磁盘上进行复制(即镜像)。可以同时从两个驱动器中读取数
据,这表示每个驱动器都能为任何请求提供服务,从而提供改进的性能。如果一个
物理磁盘出现故障,可以继续使用镜像,从而不会造成性能降低或数据丢失。
Solaris VolumeManager 支持RAID-0+1 和(透明地)RAID-1+0 镜像,这取决于基础
卷。
■ RAID 级别5-RAID-5 使用条带化将数据分布于阵列中的磁盘上。RAID-5 还将记录
奇偶校验信息,从而提供一定程度的数据冗余性。RAID-5 卷不会因基础设备的故
障而发生故障。如果将RAID-5 卷与热备件结合使用,则该卷可以经受多种故障,
而本身不会出现任何故障。若在运行时有设备发生故障,RAID-5 卷的性能会明显
降低。
在RAID-5 模型中,每个设备都有一个包含奇偶校验条带的区域和其他包含数据的
区域。奇偶校验分布于阵列中的所有磁盘上,可以缩短写入时间。由于不必等到专
门分配的奇偶校验磁盘接受数据后再进行写入,因而缩短了写入时间。
常规性能指南
设计存储配置时,请考虑以下性能指南:
■ 一般情况下,条带化的性能最佳,但条带化不提供数据冗余性。对于进行大量写入
操作的应用程序,一般情况下,RAID-1 卷比RAID-5 卷的性能更好。
■ RAID-1 和RAID-5 卷都可以增加数据可用性,但一般情况下,这两种卷的写入操作
性能都比较低。镜像可以提高随机读取性能。
■ RAID-5 卷比RAID-1 卷的硬件成本更低,而RAID-0 卷没有其他硬件成本。
■ 条带和RAID-5 卷都将数据分布于多个磁盘驱动器中并且有助于平衡I/O 负载。
■ 确定最常访问的数据,并使用镜像或条带化来增加数据的访问带宽。
■ 使用可用的性能监视功能和通用工具(如iostat 命令)以确定最常访问的数据。确
定最常访问的数据之后,可以使用条带化、RAID-1 卷或RAID-5 卷来增加此数据的
访问带宽。
■ 多次更改软分区大小,可能会降低软分区的性能。
■ 在写操作方面,RAID-5 卷比条带的性能更低。此性能降低是由于计算和存储
RAID-5 卷奇偶校验所需的多项I/O 操作导致的。
■ 对于原始随机I/O 读取,条带和RAID-5 卷相当。条带和RAID-5 卷都将数据分布在
多个磁盘中。对于RAID-5 卷,读取过程中并不进行奇偶校验计算(出现片故障后
除外)。
一、SVM组件概述
使用Solaris VolumeManager 创建的五种基本类型的组件为卷、软分区、磁盘集、状态
数据库副本和热备用池。
Raid0、Raid1、Raid5等卷是一组物理片,在系统中显示为单个的逻辑设备。主要用来增加容量、提高性能和可用性。
软分区:是物理片和逻辑卷得细分,提供更小更易于管理的存储单元,用于提高大型存储卷的可管理性。
磁盘集:单独名称空间中的一组共享的磁盘驱动器,其中包含可由多台主机不同时共享的卷和热备件,用于提供数据冗余性和数据可靠性,并提供单独的名称空间以便更易于管理。
状态数据库:包含所有卷、热备件和磁盘集的配置和状态信息的数据库。创建状态数据库副本之前,Solaris VolumeManager无法操作。
热备池:保留的片(热备件)集合。子镜像或RAID-5 卷组件出现故障时,系统会使用这些片进行替换。
图1 物理磁盘A,B 所组成的卷d0
就像物理片一样,卷的逻辑名称也会出现在文件系统中。逻辑卷名在块设备的
/dev/md/dsk 目录和原始设备的/dev/md/rdsk 目录中具有对应的项:
/dev/md/dsk/d0 块卷d0
/dev/md/dsk/d1 块卷d1
/dev/md/rdsk/d126 原始卷d126
/dev/md/rdsk/d127 原始卷d127
卷命名原则
命名卷名称时使用一个统一的标准可以简化管理并使您可以快速识别卷类型,比如
指定raid卷名称的范围,d1~20 或者d10~20等等,所有卷名称的定义都是以方便管理为主。
状态数据库和状态数据库副本
状态数据库是用于存储有关Solaris VolumeManager 配置状态信息的数据库。状态数据
库记录并跟踪对配置所做的更改。配置或状态发生更改时,Solaris VolumeManager 会
自动更新状态数据库。例如,创建新卷是一种配置更改,而子镜像失败则是一种状态更改。
实际上,状态数据库是多个复制的数据库副本的集合。每个副本(称为状态数据库副
本)都可以确保状态数据库中的数据始终有效。多个状态数据库副本可以防止发生单
点故障时丢失数据。状态数据库可以跟踪所有已知状态数据库副本的位置和状态。
系统之中必须有状态数据库的存在SVM才能进行操作。Solaris系统在删除所有状态数据库的情况下仍然可以运行,但是磁盘上不存在状态数据库的情况下重新引导系统,则所有SVM的数据将会丢失!
热备池
热备池是SVM保留的用于自动替换出故障组件的片的集合。可以在子镜像或者R5卷中使用这些热备件。出现组件错误时,SVM会查找第一个等于或大于故障组件大小的热备件。
磁盘集
磁盘集是一组物理存储卷,其中包含逻辑卷和热备件。卷和热备用池必须在该磁盘集
中的驱动器上生成。在磁盘集中创建卷后,可以像使用物理片一样使用该卷。
磁盘集在群集环境中提供数据可用性。如果某台主机出现故障,其他主机可以接管出
故障主机的磁盘集。(这种类型的配置称为故障转移配置。)此外,可以使用磁盘集
来帮助管理Solaris VolumeManager 名称空间,并实现对网络连接存储设备的随时访
问。
二、创建、删除、扩容SVM组件及故障恢复
创建SVM的先决条件:创建初始状态数据库副本、准备可用于SVM的片、确保具有超级用户权限、数据备份。
1、 创建初始状态数据库
状态数据库存活的标准是多数一致的原则,即在状态数据库中有一半以上(N+1)的副本存活才能保证SVM的正常运行。即在3个状态数据库副本中,有2个可用,就可以取得一致。状态数据库最好放置在本地存储中(如本地磁盘)。建议每个卷组中至少要有3个状态数据库。
对于只有一块磁盘的系统,则将3个副本都放置在该盘上。
对于具有两个到四个驱动器的系统:一个驱动器上放置两个副本。
对于具有五个或更多驱动器的系统:一个驱动器上放置一个副本。
创建状态数据库:
#metadb –a –f -c 3 c0t0d0s7 ##在c0t0d0s7上创建3个状态数据库副本(默认大小是8192)
-a 指定要添加或创建状态数据库副本。
-f 指定要强制执行该操作,创建第一个副本需要使用此项
-c 指定要添加到给定片中的副本数量。
-l 指定新副本的大小(以块为单位)
#metadb –a –f -c 2 –l 1024 c0t0d0s7 ##在c0t0d0s7上创建2个长度为1024块的状态数据库副本
#metadb –i ##查看状态数据库的状态
flags first blk block count
a m p luo 16 8192 /dev/dsk/c1t0d0s7
a p luo 8208 8192 /dev/dsk/c1t0d0s7
a p luo 16400 8192 /dev/dsk/c1t0d0s7
a p luo 16 8192 /dev/dsk/c1t1d0s7
a p luo 8208 8192 /dev/dsk/c1t1d0s7
a p luo 16400 8192 /dev/dsk/c1t1d0s7
a u 16 1024 /dev/dsk/c1t7d0s0
a u 1040 1024 /dev/dsk/c1t7d0s0
r - replica does not have device relocation information
o - replica active prior to last mddb configuration change
u - replica is up to date
l - locator for this replica was read successfully
c - replica's location was in /etc/lvm/mddb.cf
p - replica's location was patched in kernel
m - replica is master, this is replica selected as input
W - replica has device write errors
a - replica is active, commits are occurring to this replica
M - replica had problem with master blocks
D - replica had problem with data blocks
F - replica had format problems
S - replica is too small to hold current data base
R - replica had device read errors
#metadb –d –f c1t7d0s0 ##删除状态数据库
Raid 0卷
创建raid0卷
Raid0卷分为三种形式:条带化卷、串联卷、串联条带化卷。
条带化卷:
# metainit volume-name number-of-stripes components-per-stripe component-names [ -i interlace]
创建条带化卷:
#metainit d10 1 3 c1t0d0s2 c1t1d0s2 c1t2d0s2 ## d10代表卷名称 1表示一个条带;3表示每个条带中含有3个组件(磁盘)
创建串联卷:
#metainit d10 4 1 c1t0d0s2 1 c1t1d0s2 1 c1t2d0s2 1 c1t3d0s2 ## 4表示要创建三个条带;1表示每个条带由一个组件(磁盘)组成,串联卷不会损坏片上的数据。
扩展卷容量(只针对串联条带卷):
首先,摘掉已有挂接点
#umount /mount_point
#metattach dN cNtNdNsN
#mount /mount_point
#growfs –M /mount_point /dev/md/rdsk/dN
删除raid0卷:
#umount /mount_point
#metaclear dN
#vi /etc/vfstab ##将vfstab中的相关项删除
#rm /mount_point ##删除挂接点
Raid 1卷
创建raid1卷
#metadb –a –f –c 3 c0t0d0s7 c0t1d0s7
#metainit d21 1 1 c0t0d0s2 ##创建子镜像
#metainit d22 1 1 c0t1d0s2
#metainit d20 –m d21 ##将子镜像d21加入镜像d20
#umount /mount_point
#vi /etc/vfstab
将如下的项目:
/dev/dsk/c0t0d0s2 /dev/rdsk/c0t0d0s2 /mount_point ufs 2 yes —
更改为:
/dev/md/dsk/d20 /dev/md/rdsk/d20 /mount_point ufs 2 yes —
#mount /mount_point
#metattach d20 d22 ##将d22加入d20,此时子镜像触发同步。
#metastat ##查看raid的状态
#vi /etc/system ##添加set md:mirrored_root_flag=1可以允许单盘启动。
对于根分区(/)做镜像
#metadb –a –f –c 3 c0t0d0s7 c0t1d0s7
#metainit d11 1 1 c0t0d0s0
#metainit d12 1 1 c0t1d0s0
#metainit d10 –m d11
#metaroot d10 ##metaroot 针对于/分区所做,其他分区镜像不用这么做
#reboot
#metattach d10 d12
#metastat
设置系统可以在主镜像盘失效的情况下可以由从盘启动
# ls -l /dev/dsk/c0t1d0s2
lrwxrwxrwx 1 root root 88 Feb 8 15:51 /dev/rdsk/c1t3d0s0->../../devices/pci@1f,0/pci@1,1/ide@3/dad@0,0:a
#init 0 ##引到系统到ok状态下
# nvalias backup_root /pci@1f,0/pci@1,1/ide@3/disk@0,0:a ##设置从盘别名为backup_root
#setenv boot-device disk backup_root net ##设置启动顺序为disk backup_root net
#nvstore ##保存更改的设置
扩展raid1卷
# metastat
d8: Mirror
Submirror 0: d9
State: Okay
Submirror 1: d10
State: Okay
...
# metattach d9 c0t2d0s5 ##对子镜像d9进行扩展
d9: component is attached
# metattach d10 c0t3d0s5 ##对子镜像d10进行扩展
d10: component is attached
# metattach d8 ##让镜像d8识别扩展容量
#growfs –M /mount_point /dev/md/rdsk/d8 ##扩容文件系统
删除raid1卷
①删除无法解除挂接的镜像(如” / ”)
#metadetach -f d20 d22
#metaroot /dev/dsk/c0t0d0s2 ##修改vfstab和system文件(注:如果是swap分区镜像的话,删除时需要手动编辑vfstab,因为metaroot命令只针对/分区!)
#reboot
#metaclear –r d20 ##清除镜像d20及其子镜像(注:-r参数作用为递归删除)
②删除可摘除挂接的镜像
#umount /mount_poing
#metadetach d20 d22 ##清除其中一个子镜像
#metaclear –r d20 ##清除镜像d20及另一个子镜像
#vi /etc/vfstab ##编辑vfstab 将如下行:
/dev/md/dsk/d4 /dev/md/rdsk/d4 /mount_poing ufs 2 yes -
改为:
/dev/dsk/c0t0d0s3 /dev/rdsk/c0t0d0s3 /mount_point ufs 2 yes -
#mount /mount_point
替换故障子镜像:
例如d20中的子镜像d22(c0t2d0s2)出现故障,需要用另外一个片(c0t3d0s2)来做替换
#metadetch –f d20 d22
#metaclear d22
#metainit d22 1 1 c0t3d02
#metattach d20 d22
替换故障盘
系统只有两块盘且做了镜像,其中一块硬盘出现了硬件故障,这时候就需要用到下面的方法来替换。
假设c0t0d0s0 c0t1d0s0 为mirror,挂接点是 / . 两盘的7分区存放状态数据库。如果c0t0d0 出现损坏,则关机更换磁盘。
以c0t1d0 启动操作系统。
#devfsadm –c disk
#prtvtoc /dev/rdsk/c0t1d0s2 | fmthard –s - /dev/rdsk/c0t0d0s2
#metadb –a –f –c 3 c0t0d0s7
#metareplace –e d10 c0t0d0s0
#metastat
Raid 5卷
创建raid5卷
使用三块盘c0t1d0s2 c0t2d0s2 c0t3d0s2做raid5:
#metadb –a –f –c c0t1d0s2 c0t2d0s2 c0t3d0s2
#metadb -i
#metainit d5 –r c0t1d0s2 c0t2d0s2 c0t3d0s2 ##参数-r指定该卷为raid5级别
#metastat –i
#vi /etc/vfstab
(/dev/md/dsk/d5 /dev/md/rdsk/d5 /mount_point ufs 2 yes –)
#mount /mount_point
扩容Raid5卷
使用c0t4d0s2 作为要加入d5的盘
#umount /mount_poing
#prtvtoc /dev/rdsk/c0t1d0s2 | fmthard –s - /dev/rdsk/c0t4d0s2
#metattach d5 c0t4d0s2
#mount /mount_point
#growfs –M /mount_point /dev/md/rdsk/d5
替换故障的组件
假设c0t3d0s2出现故障,使用c0t4d0s2作为替换:
#metastat
#metareplace d5 c0t3d0s2 c0t4d0s2
#metastat
替换故障的磁盘
假设c0t3d0s2出现故障,关机换盘之后:
#devfsadm –c disk
#prtvtoc /dev/rdsk/c0t3d0s2 | fmthard –s - /dev/rdsk/c0t4d0s2
#metadb –a –f –c 3 c0t4d0s7
#metadb -i
#metreplace -e d5 c0t3d0s2 ##将替换上的盘启用
#metastat
删除raid5卷
#umount /mount_point
#metaclear d5
#vi /etc/vfstab ##注释掉挂接点
数据备份(联机备份)
对于其他几种raid卷得备份,我们统一可以用ufsdump来进行备份,这与普通文件的备份没什么差别,这里就不做赘述了,主要介绍一下raid 1镜像的备份:
本例中raid 1信息如下:
主镜像:d20 子镜像:d21(c1t1d0s0) 、d22(c1t2d0s0)
步骤:
#metastat d20 ##查看raid状态
d20: Mirror
Submirror 0: d21
State: Okay
Submirror 1: d22
State: Okay
Pass: 1
Read option: roundrobin (default)
Write option: parallel (default)
Size: 40704 blocks (19 MB)
d21: Submirror of d20
State: Okay
Size: 40704 blocks (19 MB)
Stripe 0:
Device Start Block Dbase State Reloc Hot Spare
c1t1d0s0 0 No Okay Yes
d22: Submirror of d20
State: Okay
Size: 40704 blocks (19 MB)
Stripe 0:
Device Start Block Dbase State Reloc Hot Spare
c1t2d0s0 0 No Okay Yes
……
#lockfs –w /mount_point ##锁定文件系统(只针对UFS),防止detach的时候有文件写入。
#metadetach d20 d22 ##踢出子镜像d22
#lockfs –u /mount_point ##解除锁定
(Backup) ##对/dev/md/dsk/d22进行备份(备份过程略)
#metattach d20 d22 ##重新加入子镜像d22
软分区
对于普通磁盘在solairs里被识别为从0~7的8个片(slice)。但是想要实现在同一块磁盘上创建更多个分区的要求,8个片又显得太少,软分区让这个要求得以实现。软分区默认为128个,最多可达到8192个分区。取值范围从d0~d8192。
软分区可以直接存在于磁盘的上方,或者卷得顶部,不允许存在于卷得下方或者上方,例如,一个使用软分区生成了一个raid卷,在这个raid卷之上就不允许再生成软分区。
创建软分区
#metainit d10 –p c0t0d0s0 3g ##在c0t0d0s0上创建一个3g大小的软分区
#metastat d10
扩展软分区
#mount /dev/md/dsk/d10 /mount_point
#metattach d10 10g
#growfs –M /mount_point /dev/md/rdsk/d10
删除软分区
#metaclear –p c0t0d0s0 ##删除在c0t0d0s0上建立的所有软分区
#metaclear –r d10 ##删除指定的软分区
#metastat
热备池
创建热备池
#metainit hsp001 c0t4d0s2 c0t5d0s2 ##建立由两块盘组成的热备池(注:热备池中的磁盘数量根据需要可自选。)
向热备池中添加组件
#metahs –a hsp001 c0t1d0s2 ##将c0t1d0s2添加到hsp001中
#metahs –a all c0t2d0s2 ##将c0t2d0s2添加到所有热备池中
为raid1卷添加热备池
#metaparam –h hsp001 d21 ##将热备池指定给子镜像d21
#metaparam –h hsp001 d22 ##将热备池指定给子镜像d22
为raid5卷添加和更改热备池
#metaparam –h hsp001 d5 ##将hsp001指定给raid5卷d5
#metaparam –h hsp002 d5 ##更改d5的热备池为hsp002
将热备池于卷脱离关联
#metaparam –h none d5
替换热备池中的组件
#metahs –r hsp001 c0t1d0s2 c0t2d0s2 ##用c0t2d0s2 替换c0t1d0s2
#metahs –r all c0t2d0s2 c0t3d0s2 ##用c0t3d0s2 替换所有热备池用的c0t2d0s2
删除热备池
#metaclear –d hsp001 c0t4d0s2 ##从hsp001中删除c0t4d0s2
启动热备组件
#metahs –e c0t4d0s2 ##将c0t4d0s2启用
磁盘集
(略)
Solaris Volume Manage维护
查看卷配置:
#metastat –p –i d5 ##查看d5的配置
-p 以简洁模式显示
-i 验证是否可以访问raid1卷、raid5卷和热备池
重命名卷
# umount /home
# metarename d10 d100
d10: has been renamed to d100
(编辑/etc/vfstab 文件以使该文件系统引用新卷)
# mount /home
组件状态及恢复
组件有可能会出现:Maintenance和Last Erred的状态,替换顺序一定是先Maintenance然后才是Last Erred。
2011.6.16
Jsui