Chinaunix首页 | 论坛 | 博客
  • 博客访问: 148305
  • 博文数量: 31
  • 博客积分: 2075
  • 博客等级: 大尉
  • 技术积分: 340
  • 用 户 组: 普通用户
  • 注册时间: 2009-08-29 10:06
文章分类

全部博文(31)

文章存档

2017年(3)

2014年(1)

2013年(1)

2011年(9)

2010年(14)

2009年(3)

我的朋友

分类:

2009-08-29 12:10:23

Cuddletech系列VERITAS教程
                                       作者:Ben Rockwood    翻译: KaiYi   Cynthia
 
网上有文章讲如何使用vxassist命令创建volume,却没有讲volume,plex,subdisk和vm disk之间的关系。
 
_________________________________【Serie 1】_________________________________
 
VERITAS Volume Manager 文档及参考书目

• VERITAS Volume Manager: Installation Guide (P/N: 100-001121)
• VERITAS Volume Manager: Getting Started Guide (P/N: 100-001123)
• VERITAS Volume Manager: Command Line Interface Administrators Guide (P/N:
100-001124)
• VERITAS Volume Manager: Storage Administrator: Administrators Guide (P/N:
100-000954)
• VERITAS Volume Manager: Administrators Reference Guide (P/N: 100-001125)

上面有SUN的part numbers。当我写这篇文档的时候,有些资料在web上面还找不到,只在VERITAS VM3.1的软件里有。但是,你可以从docs.sun.com上找到VERITAS VM 2.6的文档。要想下载文档(HTML/PDF),请到docs.sun.com。接着点击“Browse By Collection”,再顺着往下找“Sun StorEdge Volume Manager 2.6 AnswerBook”。点击它,你将看到三个条目:
• Sun StorEdge Volume Manager 2.6 User's Guide
• Sun StorEdge Volume Manager 2.6 Storage Administrator User's Guide
• Sun StorEdge Volume Manager 2.6 System Admin Guide
注意,当你看到以上页面的时候,“下载PDF”选项在右上方角落。最好把它打印出来。

VERITAS Volume Manager: 概述
      SUN的网站上面有一段关于VERITAS的摘录:
      VERITAS Volume Manager软件是一个高端系统级的磁盘/存贮阵列解决方案。它可以实现简单的、在线的磁盘管理和配置,大大减少了系统维护的宕机时间。该产品同样可以帮助你实现数据集成和高可靠性(快速恢复和容错性能)。VERITAS Volume Manager软件也可以为企业电脑和新兴的SAN(Storage Area Network)提供易用、在线的存贮管理功能。通过对RAID技术的支持,VERITAS Volume Manager软件提高了现有硬件的容错能力,防止磁盘和硬件故障。它还提供逻辑Volume管理层,这样,VERITAS Volume Manager克服了物理磁盘的硬件限制。
也许,你已经注意到了。但还是让我列出他们完全忽略了的事情:

               • Support for: Simple, RAID0, RAID1, RAID0+1, RAID1+0, RAID5
• Dynamic Multipathing (DMP): Load balancing and redundant I/O paths to disk arrays supporting multi-controller attachment.
• Online Relayout: VERITAS allows you to change the layout of a VERITAS volume while it is live and mounted. Change a RAID0 to a RAID5 without a second of downtime!
• Snapshoting: Take a snapshot of your data, creating a "shadow" of it which you can use for online backups.
• Hot Relocation: Designate "spares" which will take the place of failed disks onthe-fly.
• Dirty Region Logging (DRL): Volume transaction logs which provide fast recoveries after system crashes.
• More...... more than I can list!

           那,我们开始吧!VERITAS Volume Manager是VERITAS公司()的一个产品。Sun公司采用了它,分配给了它PN(part number),把它卖给Sun的客户。VERITAS也可以被称为“Vx”或者“VRTS”(VERITAS包和VERITAS订单符号的前缀)。VERITAS Volume Manager常常被缩写成“VxVM”。在VERITAS 3.x以前,Sun在市场上为VERITAS取了自己的名字。这些名字和版本号如下:
• <= Vx 2.5: Sun Enterprise Volume Manager (SEVM)
• = Vx 2.6: Sun StorEdge Volume Manager (Sun SEVM)
• >; Vx 3.x: VERITAS Volume Manger (VxVM)

         支持VERITAS的操作系统有:
• SEVM 2.5: Solaris 2.5.1 and older.
• SEVM 2.6: Solaris 2.6 and Solaris 2.5.x
• VxVM 3.0.2: Solaris 7, Solaris 2.6, and Solaris 2.5.
• VxVM 3.0.3: Solaris 8, Solaris 7, and Solaris 2.6
        
         再说一句,就像世界上绝大部分公司一样,如果Sun和/或VERITAS宣称“OS xxx 不被支持”,并不意味着他们进行过十分仔细的测试。VERITAS实际上安装在系统的kernal模块中。因此,如果你在solaris7下运行SEVM2.6,你将在solaris7的kernal环境下运行solaris6的kernal模块,我试过了!
         
VERITAS Volume Manager and Vx Objects
          VERITAS是一个逻辑卷管理软件。在这里,最重要的词是“逻辑”。因此,为了保证事务的有序性(VERITAS的概念有些复杂),使用不同方法创建volume时,我们必须理解一些基本“对象”(“对象”是指VERITAS中的一些逻辑概念,如 plex,subdisk,VM Disk等):

           • Disk :有SCSI id的普通物理磁盘(c0t0d0..)
           • VM Disk (dm) :Vx控制下的磁盘
           • Sub Disk (sd) :  VM disk的一部分,用来构成plex
           • Plex (pl) :镜像
           • Volume (v):虚拟磁盘,可以容纳数据;
            (就相当于我们在操作系统下看到的一个slice  比如: /var)

        现在,让我们来讨论一下这些概念。磁盘,没有什么新鲜或者神奇的。如果我们希望在VERITAS中使用一个磁盘,必须先把这个磁盘移交给VERITAS,由VERITAS来管理它。移交后,VERITAS会分配给这块磁盘一个逻辑名(比如:disk01)。这时,这块磁盘对于任何VERITAS之外的系统来说,都是不可操控了。移交给VERITAS管理的不是磁盘的某个分区(c0t0d0s0),而是整块磁盘(c0t0d0)。现在,VM Disk已经创建好了,接着可以在这个VM Disk中创建subdisk。subdisk可视为VERITAS的一个区。VM Disk既可划分为一个Sub Disk,这个SubDisk占据了整个VM Disk空间,也能划分为多个subdisk。你可以按照自己的想法把VM Disk划分成任意多个subdisk。由subdisk(一个或多个)组成的,我们称之为plex。plex的概念有些模糊,我们多说点吧。
           请大声的说出“一个plex就是一个镜像;一个plex就是一个镜像;一个plex就是一个镜像。”也许你要这样喊很多次。你也可能会感到有些愚蠢,但在VERITAS的世界里,plex是最基础的概念。Volume就像容器,可以容纳一个或多个plex。一个plex就是一个镜像,是的,但只用一个plex也能构成一个Volume(volume由n个plex构成,在这里 0 < n < 33;每个plex是一个镜像,也就是说,同一个volume下每个plex存贮的内容完全相同)。很奇怪,Volume的镜像是用一个plex来实现吗?当然不是啦!我们待会儿再来讨论这个问题,但是你最好先把它记在你的脑海中。一个或多个subdisk组成了plex。有趣的是,VERITAS的世界里,几乎所有工作都是plex完成的。因此,当我们说我需要创建一个stripe的Volume时,真正的内涵是我需要创建一个stripe的plex,并把它attach到Volume里。Volume没有什么好关心的,它只是一个容器而已。发现关键问题了吗?我们把所有信息放在一起,在想象中构建一个VERITAS的Volume吧!

        现有29G的硬盘,我打算从中够建一个striped(RAID0)的Volume。系统中现有两块磁盘,第一块命名为c1t0d0,第二块为c1t1d0。
        第一步,要把磁盘的管理权从操作系统移交给VERITAS软件,所以,先创建两个VM Disk,命名为disk01和disk02。
第二步,要从这两个VM Disk中创建两个Subdisk。在每个VM Disk中创建一个subdisk,并且让这个subdisk占据该VM Disk的所有空间。VM Disk disk01中的subdisk称之为disk01-01,disk02中的subdisk称之为disk02-01。现在,到创建plex的时候啦!
第三步,要用我们的两个subdisk – “disk01-01”和 “disk02-01”创建一个stripe的plex,并将之命名为“myplex”(现在不要去关心如何去创建plex,重要的是把概念掌握好了)。现在,我们有了一个plex,由subdisk “disk01-01” “disk02-01”组成。
第四步,用“myplex”创建一个名为“myVol”的Volume。Bingo!我们有了一个stripe的18G Volume,并准备在上面创建文件系统。我们用先前的命名把各组件列出来,如下:

dm disk01 c1t0d0 <-- VM Disk named "disk01" made from "c1t0d0"
dm disk02 c1t1d0 <-- VM named "disk02" made from "c1t1d0"

sd disk01-01 disk01 <-- Subdisk named "disk01-01" made from "disk01"
sd disk02-01 disk02 <-- Subdisk named "disk02-01" made from "disk02"

pl myplex striped <-- Striped Plex named "myplex"
sd disk01-01 <-- Made using subdisk "disk01-01"
sd disk02-01 <-- and subdisk "disk02-01"

v myvol <-- Volume made from....
pl myplex striped <-- the striped plex named "myplex", made from...
sd disk01-01 <-- Subdisk "disk01-01", and...
sd disk02-01 <-- "disk02-01"


看起来OK吗?如果是的话,请看下面的内容。这就是VERITAS真正的输出,内容是我在测试机上创建的一个真实的Volume。

v myvol fsgen ENABLED 35356957 - ACTIVE - -
pl myplex myvol ENABLED 35357021 - ACTIVE - -
sd disk01-01 myplex ENABLED 17678493 0 - - -
sd disk02-01 myplex ENABLED 17678493 0 - - -





觉得这些有什么意思吗?全部都能理解吗?我希望是的。如果能够全部理解,说明你作好学习VERITAS的准备了。随着我们学习的深入,我们将解释更多更丰富的内容,但是,至少你应该理解以下内容:


                Volume     是由plex组成的。
                Plex           是由subdisk组成的。
                Subdisk     是由VM Disk组成的。
                VM Disk   是由disk(实际物理硬盘)组成的。

                         Disk          可以组成VM Disk。
                        VM Disk    可以组成subdisk。
                Subdisk      可以集合成plex。
                plex            可以集合成Volume。

好样的!在我们继续之前,还有一点必须注意:关于plex的一个常规。plex是镜像,因此,如果我们要为刚才创建的Volume(myvol)创建一个镜像,只需要利用另外两个subdisk,创建一个和“myplex”一模一样的plex,并且将其attach到mybol上就可以了。这样,就完成了镜像。这可真是酷!镜像是非常神奇的东西。任何事情都和它有关。如果你有一面镜子,你只能看到你自己。但如果你想看到镜像的话,你就需要另外一面镜子!懂了吗?

VERITAS Object Creation

       VERITAS中,有两种方法可以创建“对象”,“vxmake”方法和“vxassist”方法。它们的区别如下:
       每次创建“对象”时,“vxmake”根据你的要求,精确的构造出你所希望的“对象”。我们之前提到的方法(增加一个磁盘,构造VM Disk,创建subdisk…),都是我们如何使用vxmake的例子。一步一步的,我们构造出“对象”,并且组合他们。这非常的酷,因为我们清楚的规定了构造过程中的每一个细节,并没有不清楚的地方。我们说“构建这个‘对象’”,它就被创造啦。(我们先创建vm disk, 再创建subdisk,接着是plex,最后是volume。必须一步一步往下做,每做一步,生成的仅仅是我们所指定要创建的东西;而不是说“创建plex”,该命令就先自动生成n个subdisk,再用这些subdisk来组成plex)。下一个课程,我们将学习到vxmake的更多细节知识。
       VxAssist是另外一种方式。当你学习本课程的时候,你是否觉得“创建‘对象’是一件复杂的工程”?哈哈,简单的方法就在这里:VsAssist。当你打算创建Volume,但又不想指定所有细节,我们可以先创建VM Disk,然后让VxAssist完成所有剩下的工作(subdisk和plex不用自己创建,会由VxAssist命令自动生成)。代替了vxmake“创建xx,只有xx”的哲学,我们采用VxAssist的做法,“这里是一些磁盘,你帮我用RAID5创建一个可以存贮10G的Volume……,我不关心你如何实现,只要快点就行”。较为复杂或是你不关心整个创建过程的情况下,VxAssist较为方便实用。再强调一下,我们将在以后的课程中详细的讨论如何使用VxAssist创建“对象”。
        哪种方法更好一些? 呵呵,可能你现在还不能作出决定。等我们接触到后面讲解这些方法的课程时(有很多例子),大家自己去研究吧,你们将会有自己的喜好。但请记住,你可以在不同情况下交替使用这两种方法,也可以两种都采用。对此要多加注意,因为他们是完全不同的方式。

Special Notes on RAID0 and RAID5: Layouts

我想简要的讨论一下layout(对不起读者,本人实在是找不出一个中文单词可以清楚的表述出layout的意思,所以就直接引用英文)。在讲解创建plex时,我们将深入钻研layout的概念。但由于“VERITAS Getting Started Guide”提到了,所以我想让你们重视它。这是非常基础的内容,但随着你在VERITAS上工作的增多,你会越来越赏识layout的。
layout可视为各种RAID方法之间的不同之处。简单(simple)RAID实际上没有layout。它仅仅是线性的从第一块磁盘的开始,写到这块磁盘的结尾,再从第二块磁盘的开始接着写,一直到最后一块磁盘的结尾。但条块化(Stripe)RAID较为特殊。layout有两个术语:

• stripe width (stwidth):     一次写入一块磁盘的数据量。默认为32k;
• columns (ncolumn):         指subdisk;

Stripe RAID中,subdisk被称之为column,每个 subdisk有一个“column号”。例如:由四块磁盘组成的RAID 0,应该有四个columns。第一块盘的column号为“0”(记住,所有编号都是从0开始的),第二块为column“1”,第三块为column“2”,依此类推,第四块为column“3”。我们可以指定“stripe width”(stwidth)的大小和“columns”的数量(ncolumns)来创建stripe RAID。就像刚才提到的一样,我们有4块磁盘,我们知道每个subdisk的column号。如果我们指定一个volume的“stwidth”为32k,并写数据到这个volume里。VERITAS先写32k数据到第一块磁盘(column 0),接着写32k到第二块磁盘(column 1),……第三块……,在第四块磁盘(column 3)写完32k后又转回第一块磁盘(column 0),依次反复,直到所有数据写完。在“RAID理论”课程中,我们有更多关于这个话题的内容。如果你对此仍感到有些模糊,请回到前面重新看一下,因为我们创建plex时要再次用到这些知识。
        RAID5是另外一种stripe方式,和RAID0有点象。它的layout被称为“Left Symmetric Layout”,一般也被称为“RAID5 layout”。解释这些要花太多的时间,所以还是请大家去查阅一下有关书籍。可能你要多读两次,但最终你会掌握的。

Volumes and Devices
        我们已经知道了volume是如何创建的,也知道它是如何工作的。现在,让我们来谈谈如何使用volume吧!
        以前提到过,volume是一个“容器”,象只“小桶”。相对于普通的磁盘分区来说,Volume的优点在于,它不是静态的。你可以增大,缩小,修改,重新分配和控制volume,在磁盘分区上这些方式都不能实现。以上各种功能都可以在mount起来的live系统(正在使用的系统)中实施,甚至不用重启机器。如果文件系统空间不够了,你就可以先增大文件系统所在的volume空间,再扩充该文件系统。非常容易!
        你也许会问,“实际上,我怎么使用一个volume呢?”。好的,这非常容易。volume的使用方法和磁盘块设备(disk block device)一样。VERITAS安装和配置后,在/dev下产生一个新的目录,叫做/dev/vx。所有volume块设备(volume block device)都在这儿。如果你创建了一个名为“myVol”的volume,并想在上面建立一个文件系统,你可以这样做:
                      # newfs /dev/vx/rdsk/myvol
          你也可以这样把它mount起来:
                     # mount /dev/vx/dsk/myvol /myvol
        酷吧?没有什么神秘的。仔细研究一下/dev/vx下的内容,所有“物件”都有一个容易读懂的名字。你可以直接从名字知道它是用来做什么的。如果设备目录(device tree)对于你来说是一个新鲜玩意儿,那你只要记住你可以在/dev/vx/dsk中访问到volume,把它当作是一个普通磁盘。
           

看到了吧,VERITAS是多么容易并富含逻辑性啊!这也是VERITAS为什么这么cool。没有模糊的东西。在VERITAS中,所有的事情都被清晰的设计和组织。我喜欢VxVM,希望你也开始使用吧。

Kernels and Daemons
        VERITAS和其它卷管理软件有一个很大的区别是:VERITAS是集成在操作系统中的。事实上,VERITAS实现了kernal 模块(应用程序的基础)。在/etc/system文件中,有很多的“driver forceload”配置,用来装载各种驱动。这一点比较重要,一般在系统启动时,很多“WARNING: Forceload of dev/XXX Failed!”消息会打印出来。不要为此担心,这仅仅意味着VERITAS试图装载一个驱动,但系统中没有相应的硬件。
        我不多说关于VERITAS安装的内容了,请参考安装手册。但我想强调,在安装了VERITAS的机器上,升级solaris和/或VERITAS必须非常非常的小心谨慎。请记住,由于VERITAS集成在kernal模块中,如果kernal模块出问题或者是被替换掉了,VERITAS可能会坏掉……这将意味着你要独自一人从书上和系统中学习如何恢复被毁坏掉的VERITAS。真的,我想告诉你,我这样毁掉了好几个系统。幸好,它们都是“测试”机而非商用机。
        VERITAS启动后,有几个进程会一直运行,监测volume并保证其平稳运行。“ps –ef  | grep vx”命令可以查看这些进程。一般有三个进程,它们是:

• vxiod :          VERITAS的IO管理进程,负责volume的读写处理。
• vxconfigd :     Vx配置管理进程。
• vxrelocd :          Vx Hot Swap 管理进程, 磁盘故障时它尝试用备份替换。

也许,现在你在急着问“快点告诉我,VERITAS的配置文件在什么地方?”了。其实VERITAS中不存在任何配置文件。vxconfigd进程会监测到所有对VERITAS的操作,并更新它的“对象”数据库。接着继续监测……。与其它进程相比较,vx进程的名字就体现了它们的功能上。Vxiod进程保证数据按照要求的方式写到volume里(例如:volume是stripe类型的,就必须以stripe的方式写到磁盘里)。Vxrelocd负责发现磁盘故障,并尝试用备份来替换。

Intro to Advanced Features
(此处省去1000字)
(由于本章涉及到高级属性,不属于初学范围,先不翻译,日后补上。感兴趣的读者可以查看原文,链接如下:
http://www.cuddletech.com/veritas/vxcrashkourse/index.html)

The Wrap Up
        恭喜你!现已准备好学习VERITAS了,相信你对要做什么非常清楚啦。下面的课程被分为两部分,一个是关于VxMake的,一个是关于VxAssist的。无论你选择哪种方法,你应该把两个课程都读一下。如果你是3.x用户,你需要读或者重读“VERITAS Getting Started Guide”;如果你是SEVM2.6或更早的用户,请读SEVM的第一章。务必理解所有概念,再接着看后面的课程。
转自:
 
_________________________________【Serie 2】____________________________________

        这是Cuddletech系列Veritas Volume Manager教程的第二篇。包含的内容有:
添加磁盘,vxmake命令操作对象。创建RAID 0和RAID 0+1volume的命令和输出会全部呈现在你面前,这样在实际系统上操作Veritas Volume Manager时,你会清楚的知道你将得到什么。
Yeah Baby!
          
欢迎阅读本教程。本教程假设你已经读过前面两篇了。现在,你应该已经很好的掌握了Veritas各种对象之间的区别,它们是如何工作在一起的,以及RAID的不同级别。有了这些知识,那我们开始吧!
数次,达成“不可能完成的任务”之后,我总是这样尖叫着“Yeah Baby!”。本节的标题也由此而来。别人认为不可能做到的,我做成功了。使用Veritas,我常常能够做到这样的事情。因为,人们往往对veritas及其工具知之甚少,而忽视了veritas神奇的工作方式以及其性能和特点。在本教程中,我们将讲到如何创建实际的volume。我在测试系统中创建了许多的Vx volumes,从规划开始,我记录下了所有事情。我们将利用这些例子,一步一步给你讲解。每一步我们都会一起完成,不像其它的Veritas 教程,忽略了部分篇章。创建对象时,你能看到我所看到的。对你来说这也是一个好的参考,直到你成为veritas高手,记住前前后后的步骤。但首先,让我们谈论一下……

VxMake: 为什么是一种“酷”的方式

本课程和它的姐妹篇《Volume Creation: The VxAssist Way》直接相关。但为什么有两种方式创建volume呢?我将让你两篇文章都读到的,然后选择你喜欢的方式,我们谈一谈为什么vxmake是一种“酷”的方式吧。
先告诉你,你不是必须要使用vxmake的。它和vxassist的不同之处在于对象是一个个分别创建的,你可以指定所有设置细节。VxAssist不错,因为你可以把一些琢磨不透或者难以抉择的东西交给veritas处理,不用自己担心。而当你有时间和空间时,Vxmake能更好地管理volume的细节。比如说,在一个临时小项目中,你需要快速创建一个20G的volume,可以选择vxassist,因为短短几分钟内vxassist就可以完成volume的准备工作。但是,如果你需要一个30G以上的stripe,mirror或RAID 5的volume,用来存放重要数据,并且你想要多花一些时间来计划和分配数据,vxmake是你不错的选择。
Volume课程背景
首先,看一下我们例子中所使用的硬件信息。主机是Sun Ultra2,一块296Mhz UltraSparcII CPU芯片,512M内存;Solaris 8操作系统;4块9G的光纤硬盘(SCSI 3),存放于Sun A5100光纤磁阵中;我们使用的是SUN 提供的Veritas-版本是3.0.2;主机本身的文件系统是UFS的;下面是一些相关的系统信息:

# uname -a
SunOS nexus6 5.8 Beta_Refresh sun4u sparc SUNW,Ultra-2

# format
Searching for disks...done

AVAILABLE DISK SELECTIONS:
0. c0t0d0 
/sbus@1f,0/SUNW,fas@e,8800000/sd@0,0
1. c0t1d0 
/sbus@1f,0/SUNW,fas@e,8800000/sd@1,0
2. c2t0d0 
/sbus@1f,0/SUNW,socal@1,0/sf@0,0/ssd@w21000020370e0108,0
3. c2t1d0 
/sbus@1f,0/SUNW,socal@1,0/sf@0,0/ssd@w2100002037163333,0
4. c2t2d0 
/sbus@1f,0/SUNW,socal@1,0/sf@0,0/ssd@w210000203716d068,0
5. c2t6d0 
/sbus@1f,0/SUNW,socal@1,0/sf@0,0/ssd@w2100002037169ef8,0
Specify disk (enter its number): ^D
#

[注意:C0控制的是主机内部硬盘;C2控制的是A5100中的磁盘]

赛前秀
这是教程中比较模糊的一部分。我没有太多的例子,所以留下了些许想象的空间,但我要谈一谈如何准备磁盘,让它可以被veritas引用。第一,要把所需的磁盘放入系统中。操作系统管理的任何一块磁盘都可以被veritas引用,它们不必属于同一个控制器。第二,要让操作系统认出这些新磁盘。Solaris下是这样操作的:

# drvconfig;devlinks;disks

第三,在”format”命令的输出中,你应该看到这些新加入磁盘的信息了。如果能看到,新磁盘对于OS就是可用的。扩展来说,对Veritas也是可用的了。

分区要注意的事项。用于Veritas的磁盘不需要分区。我为什么要特别指出这一点?Veritas会为你完成所有事情的。Veritas需要的是绝大多数磁盘中的默认分区。如果磁盘分区有问题,在把新磁盘加入veritas的过程中,会有提示信息。如果你需要对新磁盘重新分区,可以用”format”命令,恢复”默认”分区就可以啦。
现在,我们要把新磁盘加入到veritas管理之中了。一旦磁盘被加入到veritas中,该磁盘的任何一部分都不能再被外界引用。这也就是为什么不能随意分区的缘故,它不希望你把它们和其它磁盘混淆起来。

两种方式可以把磁盘加入到Veritas管理之中,”封装”(encapsulation)和”初始化”(initialization)。两种不同的方式。它们都可以把磁盘加入到veritas中,但区别在于“封装”会保留你在该磁盘上的数据。但“初始化”方式,在磁盘加入veritas时所有数据都被擦除了。初始化时,磁盘上的所有数据都会丢失。有时候,veritas手册上关于这两种方式的描写很模糊,因此,你要注意了。

磁盘新加入veritas可以使用命令”vxdiskadd”。这是一个字符菜单驱动工具,具备帮助信息和交互操作模式。VxDiskAdm由/usr/sbin/vxdiskadm命令激发。输出如下:

Volume Manager Support Operations
Menu: VolumeManager/Disk

1 Add or initialize one or more disks
2 Encapsulate one or more disks
3 Remove a disk
4 Remove a disk for replacement
5 Replace a failed or removed disk
6 Mirror volumes on a disk
7 Move volumes from a disk
8 Enable access to (import) a disk group
9 Remove access to (deport) a disk group
10 Enable (online) a disk device
11 Disable (offline) a disk device
12 Mark a disk as a spare for a disk group
13 Turn off the spare flag on a disk
list List disk information

? Display help about menu
?? Display help about the menuing system
q Exit from menus

Select an operation to perform:

加入一块新的磁盘,你需要选择出,哪一种方式更合适:“1”(初始化),或者“2”(封装)。对于我们即将使用的磁盘,我选择“初始化”。

在初始化之前,执行一下”list”操作是一个好主意,确认Veritas也能“看”到这些磁盘。只需要输入”list”,输出如下:

----------------------------------------------------------------
List disk information
Menu: VolumeManager/Disk/ListDisk

Use this menu operation to display a list of disks. You can
also choose to list detailed information about the disk at
a specific disk device address.

Enter disk device or "all" [
,all,q,?] (default: all) all

DEVICE DISK   GROUP  STATUS
c0t0d0   -      -    error
c0t1d0   -      -    error
c2t0d0 disk01 rootdg online
c2t1d0 disk02 rootdg online
c2t2d0 disk03 rootdg online
c2t6d0   -      -    online

Device to list in detail [
,none,q,?] (default: none)

上面输出中,磁盘t0,t1,t2已经被初始化了,所以它们都有磁盘名。但是,我没有初始化c2t6d0.(再次重申,Veritas不关心分区情况,因此在设备名中没有sX)。下面是用”vxdiskadm”初始化磁盘的全部输出,选项1。这可能需要较长时间,但它是简洁有用的。

Add or initialize disks
Menu: VolumeManager/Disk/AddDisks

Use this operation to add one or more disks to a disk group. You can
add the selected disks to an existing disk group or to a new disk group
that will be created as a part of the operation. The selected disks may
also be added to a disk group as spares. The selected disks may also
be initialized without adding them to a disk group leaving the disks
available for use as replacement disks.

More than one disk or pattern may be entered at the prompt. Here are
some disk selection examples:

all: all disks
c3 c4t2: all disks on both controller 3 and controller 4, target 2
c3t4d2: a single disk

Select disk devices to add:
[,all,list,q,?] list

DEVICE DISK   GROUP   STATUS
c0t0d0 -       -      error
c0t1d0 -       -      error
c2t0d0 disk01 rootdg online
c2t1d0 disk02 rootdg online
c2t2d0 disk03 rootdg online
c2t6d0 disk04 rootdg online

Select disk devices to add:

Add or initialize disks
Menu: VolumeManager/Disk/AddDisks

Use this operation to add one or more disks to a disk group. You can
add the selected disks to an existing disk group or to a new disk group
that will be created as a part of the operation. The selected disks may
also be added to a disk group as spares. The selected disks may also
be initialized without adding them to a disk group leaving the disks
available for use as replacement disks.

More than one disk or pattern may be entered at the prompt. Here are
some disk selection examples:

all: all disks

Add or initialize disks
Menu: VolumeManager/Disk/AddDisks

Use this operation to add one or more disks to a disk group. You can
add the selected disks to an existing disk group or to a new disk group
that will be created as a part of the operation. The selected disks may
also be added to a disk group as spares. The selected disks may also
be initialized without adding them to a disk group leaving the disks
available for use as replacement disks.

More than one disk or pattern may be entered at the prompt. Here are
some disk selection examples:

all: all disks
c3 c4t2: all disks on both controller 3 and controller 4, target 2
c3t4d2: a single disk

Select disk devices to add:
[,all,list,q,?] list

DEVICE  DISK  GROUP  STATUS
c0t0d0  -  -  error
c0t1d0  -  -  error
c2t0d0  disk01 rootdg  online
c2t1d0  disk02 rootdg  online
c2t2d0  disk03 rootdg  online
c2t6d0  -  -  online

Select disk devices to add:
[,all,list,q,?] c2t6d0

Here is the disk selected. Output format: [Device_Name]

c2t6d0

Continue operation? [y,n,q,?] (default: y)

You can choose to add this disk to an existing disk group, a
new disk group, or leave the disk available for use by future
add or replacement operations. To create a new disk group,
select a disk group name that does not yet exist. To leave
the disk available for future use, specify a disk group name
of "none".

Which disk group [,none,list,q,?] (default: rootdg)

Use a default disk name for the disk? [y,n,q,?] (default: y)

Add disk as a spare disk for rootdg? [y,n,q,?] (default: n)

The selected disks will be added to the disk group rootdg with
default disk names.

c2t6d0

Continue with operation? [y,n,q,?] (default: y)

The following disk device appears to have been initialized already.
The disk is currently available as a replacement disk.
Output format: [Device_Name]

c2t6d0

Use this device? [y,n,q,?] (default: y)

The following disk you selected for use appears to already have
been initialized for the Volume Manager. If you are certain the
disk has already been initialized for the Volume Manager, then you
do not need to reinitialize the disk device.
Output format: [Device_Name]

c2t6d0

Reinitialize this device? [y,n,q,?] (default: y)

Initializing device c2t6d0.

Adding disk device c2t6d0 to disk group rootdg with disk
name disk04.

Add or initialize other disks? [y,n,q,?] (default: n)

够简单吧!完全地!现在我们的磁盘已经加入Veritas管理之中,可以开始使用它啦。我们在使用4块磁盘,全部加入到Veritas中后,”vxprint”的输出如下:

# vxprint
Disk group: rootdg
TY NAME  ASSOC  KSTATE LENGTH PLOFFS STATE TUTIL0 PUTIL0
dg rootdg rootdg  -  -  -  -  -  -
dm disk01 c2t0d0s2  -  17678493  -  -  -  -
dm disk02 c2t1d0s2  -  17678493  -  -  -  -
dm disk03 c2t2d0s2  -  17678493  -  -  -  -
dm disk04 c2t6d0s2  -  17678493  -  -  -  -
#

知道这些输出是什么意思吗?Vxprint是我们进入Veritas世界的窗口。你将广泛的用到它。我们每次操作的时候,都会用vxprint来核查结果。现在,我们有4块磁盘,命名为”disk01”,”disk02”,”disk03”,”disk04”。它们被标记为”dm”,代表是VM磁盘。VM disks  都是缺省的disk group-”rootdg”的成员。其中,第五列length是指VM disk扇区的长度。

我们已经为volume创建好了基础。我们已经创建了dg的成员VM disks。现在,我们可以创建构成plex的subdisks。
第一课:一个 ”Simple” RAID Volume

这一课中,我们将创建一个简单的RAID volume。我们要用之前加入veritas的4块9G磁盘进行操作。我们将把volume所需要的对象一个个地创建起来,还要把这些对象放在一起直到建成volume。听起来我好像在说”Lego”拼插玩具,其实两者非常相象。

第一,从VM disk中创建subdisks,然后用这些subdisks去构建plex。和以前一样,我们总以”vxprint”开始,核对当前配置,接着再创建subdisks。这样的创建过程,一行命令就可以完成了。要实现它,需要我们的英雄――VxMake。用VM Disk创建SubDisk,VxMake的语法如下:

vxmake sd  ,,

这语法十分的简单。vxmake是命令,”sd”指定了创建对象是subdisk。“subdiskname”是新增subdisk的名字。一般来说,subdisk命名是在VM disk名字后面加”-0x”(如:”-01”)。”-0x”指每一个VM disk上创建subdisk的顺序号。”vmdiskname”指从哪个VM disk上创建subdisk。”offset”用来设置偏移量。待会儿我们再讨论它,这个选项一般都不用。”len”指磁盘中扇区的长度。分配给新subdisk 长度时,你可以直接从vxprint输出中拷贝VM Disk长度。这些已经是创建subdisk需要知道的所有内容了。插一句,创建subdisk实际就是veritas的“分区”。例如:你想创建2个striped volumes,每个volume都要占用4块磁盘。在你仅有4块磁盘的情况下,你需要在每个VM disk上创建2个subdisks。用“disk0?-01”subdisk创建第一个volume,用“disk0?-02”创建另外一个volume。我希望这能对加深理解subdisk有所帮助。

现在,让我们看看创建subdisks的过程是什么样的。我们将创建4个subdisks,再用vxprint核对。

# vxprint
Disk group: rootdg

TY NAME ASSOC KSTATE LENGTH PLOFFS STATE TUTIL0 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
# vxmake sd disk02-01 disk02,0,17678493
# vxmake sd disk03-01 disk03,0,17678493
# vxmake sd disk04-01 disk04,0,17678493
#

就是这样的啦!我们准备好subdisk了。请注意,”len”和vxprint输出中”Length”的内容相同。同样请注意命名惯例。非常简单?此外,有必要指出的是,vxmake命令执行结束后不会在界面返回任何创建信息的。如果操作成功了,返回一个提示符。如果操作失败了,则返回错误信息。如果你一次性创建多个(多于6个)subdisks,务必多次用vxprint检查创建结果,以防止不小心的拼写错误。下面,让我们来看看vxprint的输出吧:

# vxprint
Disk group: rootdg

TY NAME ASSOC KSTATE LENGTH PLOFFS STATE TUTIL0 PUTIL0
dg rootdg rootdg - - - - - -

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 - - - -


看到了吗?我们已经完成了我们想做的。下一步,我们将创建plex。plex是最难理解的一部分,因为striping和RAID 5是在plex这一层实现的,而非volume层。(记得吗?volume只是容纳plex的容器而已,数据操作都是plex完成的)。由于我们只创建“简单的”plex,所以不需要命令中加任何参数。我们的例子中,语法如下:

vxmake plex plexname

我们用的命令正是vxmake。”plex”指定了我们的创建目标是plex。”plexname”是新创建的plex的名字。你可以用任何你喜欢的名字命名plex。但是,95%的人根据volume名字来命名plex。通常的做法是在volume名后面加上”-01”,依此类推。这完全是自愿的,它让对象在troubleshooting的时候多一些可读性。我们的例子中,我们将命名plex为”dataplex1”。下面是我们的创建过程,以及vxprint的输出:

# vxmake plex dataplex1
# vxprint
Disk group: rootdg

TY NAME ASSOC KSTATE LENGTH PLOFFS STATE TUTIL0 PUTIL0
dg rootdg rootdg - - - - - -

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了吗?请注意,它没有分配到任何subdisks。使用vxmake,可以在创建的过程中直接分配subdisks 给plex,但我们一步一步的来做。100%手工操作。

要往plex中加入subdisks,我们需要命令”vxsd”,它是subdisk的控制工具。Vxsd有各种各样的选项和功能,但我们所需要的是“subdisk association”。可以看出,仅仅是指“联合”(associating) subdisks,这也意味着我们以后可以“分离”(disassociate) subdisks。懂了吗?待会儿我们还会谈到它的。用vxsd“联合”subdisk的语法如下:

vxsd assoc    .....

“vxsd”是命令名。”assoc”指“联合”(associate)subdisks。”plexname”指目标plex名。命令中剩下的部分是我们要用来“联合”的subdisks清单,以空格分开。我要“联合”4块磁盘(subdisks),并且用vxprint验证一下。

# vxsd assoc dataplex1 disk01-01 disk02-01 disk03-01 disk04-01

# vxprint
Disk group: rootdg

TY NAME ASSOC KSTATE LENGTH PLOFFS STATE TUTIL0 PUTIL0
dg rootdg rootdg - - - - - -

dm disk01 c2t0d0s2 - 17678493 - - - -
dm disk02 c2t1d0s2 - 17678493 - - - -
dm disk03 c2t2d0s2 - 17678493 - - - -
dm disk04 c2t6d0s2 - 17678493 - - - -

pl dataplex1 - DISABLED 70713972 - - - -
sd disk01-01 dataplex1 ENABLED 17678493 0 - - -
sd disk02-01 dataplex1 ENABLED 17678493 17678493 - - -
sd disk03-01 dataplex1 ENABLED 17678493 35356986 - - -
sd disk04-01 dataplex1 ENABLED 17678493 53035479 - - -
#

到目前为止,看起来还不错。我们已经准备好plex了,我们只需要让plex  attach(隶属于)volume。现在我们要创建volume了,还是用vxmake,语法如下:

vxmake -U  vol  plex=

这可能有一点混淆。vxmake是命令名。参数”-U”指定“使用类型”(usage type)。现在我们先不讨论“使用类型”,但对于一个需要包含文件系统的volume来说,必须要使用”fsgen”作为使用类型。”vol”是指我们创建的目标对象是volume。”volname”是新创建volume的名称。现在,是时候让vxmake帮我们attach plex了。在命令行中加上”plex=”,然后填入我们希望用的plex名称就可以啦。我们还可以一次性列出多个plex,以逗号分隔,这样就会产生多个镜像了!例子中,我们仅attach “dataplex1”。就这样了。我们开始创建volume吧,接着再用vxprint检查一下。还有一点要注意,我会在vxprint后面加上参数”-hrt”,这会显示出更多信息。先看一下操作步骤,然后我们再讨论:

# vxmake -U fsgen vol datavol plex=dataplex1
# vxprint -hrt
Disk group: rootdg

DG NAME NCONFIG NLOG MINORS GROUP-ID
DM NAME DEVICE TYPE PRIVLEN PUBLEN STATE
V NAME USETYPE KSTATE STATE LENGTH READPOL PREFPLEX
PL NAME VOLUME KSTATE STATE LENGTH LAYOUT NCOL/WID MODE
SD NAME PLEX DISK DISKOFFS LENGTH [COL/]OFF DEVICE MODE
SV NAME PLEX VOLNAME NVOLLAYR LENGTH [COL/]OFF AM/NM MODE

dg rootdg default 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 dataplex1 datavol DISABLED EMPTY 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
#

酷吧?不要被”-hrt”产生的vxprint信息头吓住。它们是每一行输出的关键词。每一行开头由两个字符组成的标记都很熟悉吧,除了”SV”很少看到,在高级课程中会讲到。无论如何,我希望你看到的是,带有”-hrt”的vxprint输出中,”pl”这一行中,”dataplex1”是”CONCAT”,也就是串连的RAID(简单RAID)。同时也请注意到,每一次我们创建新对象时(把各种对象组织在一起,vmdisk->subdisk->plex->volume),vxprint会把它们重新组织起来输出的。这便于快速的读懂和理解输出信息。
 
_________________________________【Serie 3】____________________________________
 
VxAssist是一个非常简单易用的工具,可以用来创建和控制Veritas Volume Manager volumes.本教程以大量的例子来介绍VxAssist的使用和语法,并深入地研究其效果。

介绍
JUST DO IT ALREADY!
         
            VxMake当然是创建对象的最好方法,当你知道你需要什么,你知道你如何实现它,并且你希望它被实现时,对吗?但是,如果你不确切的知道你需要的是什么呢?甚至更糟的,要是你并不关心这些问题呢?这就是VxAssist的切入点。把你知道或多或少的volume的配置信息给vxassist命令, 它就可以帮你创建volume。而不用一步一步的,先建子对象,再创Volume。你对vxassist配置的参数越少,它自行决定的就越多。这就类似于你只是让你的孩子把杂物挪到屋子外面去,而不告诉他们具体要放到什么位置(那么他们就会自己决定放到什么地方)。。。当然,也会有不好的一面,比如说,你知道他们把东西放在厨房里,但不知道他们把你的东西具体放在厨房的什么位置。所以对这两个工具――VxMake和VxAssist的选择要权衡利弊。
         任何事情都有两面性。通常,这和你正在使用的东西以及你的关心程度有关。在一台SUNA5100阵列上,你也许想在每一个磁盘(disk)上建且只建一个Volume。你也可能想把A组中的每一个磁盘和B组中同一槽位上的每一个磁盘做一一对应的全镜像。但是,你也可能并不关心这些细节问题。由于有以上这么多种可能性,你必须非常小心的选择创建对象的工具。我们将谈到使用这些工具的原因和方法。但是请记住,类似于那些你让他们到厨房里放东西的小孩,是vxassist决定把你的数据具体放到什么地方。

VxAssist: 为什么称之为“懒惰”的方式
          本课程和它的姐妹篇“Volume Kreation: The VxMake Way”直接相关。在姐妹篇里,你会发现,利用vxmake命令,我们能控制创建volume的每一个细节--一步一步的创建对象(VM Disk -> Sub Disk -> Plex -> Volume),直到为我们的数据准备好一个完好的“容器”。但通常,我们会很急切的需要volume,或者我们并不关心volume的细节参数,再或者说,我们没有这么多时间为每个volume一一设定细节参数。这时候所需要的,只是一个简单,快捷的创建方法。还有一个没有提到的事实就是,由于步骤较多且繁杂,手工创建对象的过程可能产生一些偶然的差错,而这样细小的差错通常又难以被发现。这也就是为什么VxAssist被视为主要候选方法。一个典型的例子就是:如果你从第一步开始创建对象,很快就会意识到你需要一个有记录命令的shell(例如:bash)。你会不断的翻回到刚才执行的命令,改变其中一些关键参数,再次执行。重复这样的工作时,我保证你会误命名某个对象。这么一个小小的误输入,可能导致让你头疼的结果(这也是使用VxMake所带来的烦恼)。但事情总是有两方面的。比如说,如果你仅仅是想创建一个plex,那么你就需要用VxMake来创建它。再说,如果对VxMake没有一个深刻的理解,你是很难真正掌握Volume Manager的。
         为什么要说VxAssist是一种“懒惰的”方法呢?原因就是,你可以用一行命令,通知vxassist:用A,B,C三块硬盘,替你创建一个20G的volume。仅仅利用这么一点点信息,你就已经准备好了一个可用于文件系统的volume。甚至说,你只需要通知vxassist创建一个名字叫“newvol”的20G的volume,而不需要指定具体用哪几块磁盘,它会自动在volume manager管理的磁盘中帮你寻找可用空间的。以这种方式创建volume,无论你缺乏什么信息,vxassist都会自动补充上去的。但是,正如我们之前提到过的,你配置的信息越少,你对volume的控制力就越小,结果和你的预期不相符的可能性也越大。在接下来的例子中,我们将要创建一些更为复杂的volume,但是请记住,请配置尽可能多的信息,以确保创建工作的一次性完成。现在,让我们开始吧!

Volume课程背景
        先让我们快速的浏览一下在例子中用到的硬件吧。我们使用的是一台Sun Ultral 200E主机,128兆内存;Sun A5100光纤磁阵,由14个9G的硬盘组成。相对于我们之前讲解vxmake命令时用的4块磁盘,这些配置有足够的磁盘去支持实现更为复杂的结构。我们将使用UFS文件系统,基于Solaris8的VERITAS Volume Manager 版本3.0.3。以下是磁盘和系统的简要信息,仅供参考:


# uname -a
SunOS gaff 5.8 Generic_108528-15 sun4u sparc SUNW,Ultra-1
# format
Searching for disks...done
AVAILABLE DISK SELECTIONS:
0. c0t0d0
/sbus@1f,0/SUNW,fas@e,8800000/sd@0,0
1. c0t1d0
/sbus@1f,0/SUNW,fas@e,8800000/sd@1,0
2. c1t0d0
/sbus@1f,0/SUNW,socal@1,0/sf@0,0/ssd@w2200002037096efd,0
3. c1t1d0
/sbus@1f,0/SUNW,socal@1,0/sf@0,0/ssd@w22000020372d0f69,0
4. c1t2d0
/sbus@1f,0/SUNW,socal@1,0/sf@0,0/ssd@w22000020370971e8,0
5. c1t3d0
/sbus@1f,0/SUNW,socal@1,0/sf@0,0/ssd@w2200002037097752,0
6. c1t4d0
/sbus@1f,0/SUNW,socal@1,0/sf@0,0/ssd@w22000020370970f3,0
7. c1t5d0
/sbus@1f,0/SUNW,socal@1,0/sf@0,0/ssd@w22000020370d44c8,0
8. c1t6d0
/sbus@1f,0/SUNW,socal@1,0/sf@0,0/ssd@w22000020370d3926,0
9. c1t16d0
/sbus@1f,0/SUNW,socal@1,0/sf@0,0/ssd@w22000020370e0b08,0
10. c1t17d0
/sbus@1f,0/SUNW,socal@1,0/sf@0,0/ssd@w22000020370e85f8,0
11. c1t18d0
/sbus@1f,0/SUNW,socal@1,0/sf@0,0/ssd@w22000020370d3bef,0
12. c1t19d0
/sbus@1f,0/SUNW,socal@1,0/sf@0,0/ssd@w22000020370d44ee,0
13. c1t20d0
/sbus@1f,0/SUNW,socal@1,0/sf@0,0/ssd@w220000203714322b,0
14. c1t21d0
/sbus@1f,0/SUNW,socal@1,0/sf@0,0/ssd@w22000020370971df,0
15. c1t22d0
/sbus@1f,0/SUNW,socal@1,0/sf@0,0/ssd@w22000020370d44d2,0
Specify disk (enter its number): ^D
#

你会注意到,SCSI控制器0(c0)管理着主机内部自带的两个4.2G硬盘,SCSI控制器1(c1)管理着A5100中的硬盘。目标号的分隔(从c1t6跃至c1t16)是由A5100中磁盘的物理连接位置以及SCSI分配目标号的原则引起的。我们再来看看如何使用一种不同于vxmake课程中的方法,把这些硬盘纳入Volume Manager的管理之中。

赛前秀: Disk Groups和vxdiskadd

      在vxmake教程中,我们使用了“vxdiskadm”命令。你会注意到,很多参数并不是“vxdiskadm”命令的一部分,它集中管理着这些参数。对于那些不能记牢名字和参数的人来说,这是很有帮助的,但有时候,快一点的方法会更好。这一次,我们用 “vxdiskadd” 命令来把硬盘加入到VM的管理之中。但是,在这之前,先来了解一下Disk Groups(dg’s),为了简便起见,在vxmake一章里这个概念被忽略了。
       Disk Groups是用来分隔VM对象的方法。每个系统至少需要有一个命名为“rootdg”的disk group。无论你使用与否,rootdg都至少需要有一块磁盘。rootdg被用来存贮系统中一些关于VM的基本信息,因此它是必选的。但是,我们可以创建任意多的其它disk group。现在,你可能很想知道,我们为什么不把所有的事情都放在rootdg里面来作,就像vxmake一章一样。有两个很好的理由:第一,disk group是“自给自足-不依赖外界的”(self-contained)的,如果你在一个disk group中加入这5块磁盘,并在此disk group中创建一个volume,你仅仅能够使用5块磁盘(除非你加入更多的磁盘到这个disk group)。因此,disk group被视为是把内部磁盘与剩余磁盘做逻辑分隔的一种方法。第二,你可以引入import和deport  disk groups。当你import一个disk group,这个disk group中所有对象(volumes,disks,plexes ……)对于系统来说,都成为可用的了。当你deport一个disk group,disk group本身和它的所有对象都从系统中消失了。如果听起来有些模糊,请试想一下,你在磁盘上创建一个文件系统,并在其中创建一些文件。当文件系统被mount起来时,里面的所有内容都变得可用了,系统“知道”了整个文件系统。但文件系统被umount了以后,里面的所有数据又回到了黑暗之中,变得不可用了。数据就在硬盘中,你是知道的。可其他人永远不会知道,除非该文件系统的信息被写进/etc/vfstab文件了。这和disk group的概念有点类似。为了解释清楚为什么import/deport有如此强大的功能,我们再次模拟磁盘上的文件系统,做一个分析:当你umount了一个文件系统以后,你马上就可以选择将这块磁盘从系统中取出,插到另外一个系统中。只要知道文件系统的格式和它的设备号,你就可以在一个完全不同的系统中,把这个文件系统再mount起来。你也可以这样操作disk group。你可以deport一个有很多volume的disk group,把所有涉及到的磁盘插到另外一个系统中(一定要是该disk group中所有的磁盘,差一块都不能import),然后import这个disk group,start所有的volume。你会发现,这是多么有用的啊。有鉴于此,在本教程的所有例子中,我们都要为VxVM命令增加一个选项,-g,指定具体操作的disk group。缺省的情况下,VM指定的是rootdg。
        那开始建立本课程的试验环境吧。我们先把磁盘加入到VM中。A5100中所有的磁盘(14块)都要加入到VM之中,并建立一个新的disk group。我们需要先用“format”命令检查磁盘,接着用“vxdiskadd”把这些磁盘加入到新建的disk group中。开始吧……

# format
Searching for disks...done
AVAILABLE DISK SELECTIONS:
0. c0t0d0
   /sbus@1f,0/SUNW,fas@e,8800000/sd@0,0
1. c0t1d0
   /sbus@1f,0/SUNW,fas@e,8800000/sd@1,0
2. c1t0d0
   /sbus@1f,0/SUNW,socal@1,0/sf@0,0/ssd@w2200002037096efd,0
3. c1t1d0
   /sbus@1f,0/SUNW,socal@1,0/sf@0,0/ssd@w22000020372d0f69,0
4. c1t2d0
   /sbus@1f,0/SUNW,socal@1,0/sf@0,0/ssd@w22000020370971e8,0
5. c1t3d0
   /sbus@1f,0/SUNW,socal@1,0/sf@0,0/ssd@w2200002037097752,0
6. c1t4d0
   /sbus@1f,0/SUNW,socal@1,0/sf@0,0/ssd@w22000020370970f3,0
7. c1t5d0
   /sbus@1f,0/SUNW,socal@1,0/sf@0,0/ssd@w22000020370d44c8,0
8. c1t6d0
   /sbus@1f,0/SUNW,socal@1,0/sf@0,0/ssd@w22000020370d3926,0
9. c1t16d0
   /sbus@1f,0/SUNW,socal@1,0/sf@0,0/ssd@w22000020370e0b08,0
10. c1t17d0
    /sbus@1f,0/SUNW,socal@1,0/sf@0,0/ssd@w22000020370e85f8,0
11. c1t18d0
    /sbus@1f,0/SUNW,socal@1,0/sf@0,0/ssd@w22000020370d3bef,0
12. c1t19d0
    /sbus@1f,0/SUNW,socal@1,0/sf@0,0/ssd@w22000020370d44ee,0
13. c1t20d0
    /sbus@1f,0/SUNW,socal@1,0/sf@0,0/ssd@w220000203714322b,0
14. c1t21d0
    /sbus@1f,0/SUNW,socal@1,0/sf@0,0/ssd@w22000020370971df,0
15. c1t22d0
    /sbus@1f,0/SUNW,socal@1,0/sf@0,0/ssd@w22000020370d44d2,0
Specify disk (enter its number): ^D
#
# vxdiskadd c1
Add or initialize disks
Menu: VolumeManager/Disk/AddDisks

Here are the disks selected. Output format: [Device_Name]

c1t0d0 c1t16d0 c1t17d0 c1t18d0 c1t19d0 c1t1d0 c1t20d0 c1t21d0 c1t22d0
c1t2d0 c1t3d0 c1t4d0 c1t5d0 c1t6d0

Continue operation? [y,n,q,?] (default: y) y

You can choose to add these disks to an existing disk group, a
new disk group, or you can leave these disks available for use
by future add or replacement operations. To create a new disk
group, select a disk group name that does not yet exist. To
leave the disks available for future use, specify a disk group
name of "none".

Which disk group [,none,list,q,?] (default: rootdg) cuddledg

There is no active disk group named cuddledg.

Create a new group named cuddledg? [y,n,q,?] (default: y) y

Use default disk names for these disks? [y,n,q,?] (default: y) y

Add disks as spare disks for cuddledg? [y,n,q,?] (default: n) n

A new disk group will be created named cuddledg and the selected disks
will be added to the disk group with default disk names.

c1t0d0 c1t16d0 c1t17d0 c1t18d0 c1t19d0 c1t1d0 c1t20d0 c1t21d0 c1t22d0
c1t2d0 c1t3d0 c1t4d0 c1t5d0 c1t6d0

Continue with operation? [y,n,q,?] (default: y) y

The following disk devices appear to have been initialized already.
The disks are currently available as replacement disks.

Output format: [Device_Name]

c1t0d0 c1t16d0 c1t17d0 c1t18d0 c1t19d0 c1t1d0 c1t20d0 c1t21d0 c1t22d0
c1t2d0 c1t3d0 c1t4d0 c1t5d0 c1t6d0

Use these devices? [Y,N,S(elect),q,?] (default: Y) Y

The following disks you selected for use appear to already have
been initialized for the Volume Manager. If you are certain the
disks already have been initialized for the Volume Manager, then
you do not need to reinitialize these disk devices.
Output format: [Device_Name]

c1t0d0 c1t16d0 c1t17d0 c1t18d0 c1t19d0 c1t1d0 c1t20d0 c1t21d0 c1t22d0
c1t2d0 c1t3d0 c1t4d0 c1t5d0 c1t6d0

Reinitialize these devices? [Y,N,S(elect),q,?] (default: Y) Y

Initializing device c1t0d0.

Initializing device c1t16d0.

Initializing device c1t17d0.

Initializing device c1t18d0.

Initializing device c1t19d0.

Initializing device c1t1d0.

Initializing device c1t20d0.

Initializing device c1t21d0.

Initializing device c1t22d0.

Initializing device c1t2d0.

Initializing device c1t3d0.

Initializing device c1t4d0.

Initializing device c1t5d0.

Initializing device c1t6d0.

Creating a new disk group named cuddledg containing the disk
device c1t0d0 with the name cuddled01.

Adding disk device c1t16d0 to disk group cuddledg with disk
name cuddled02.

Adding disk device c1t17d0 to disk group cuddledg with disk
name cuddled03.

Adding disk device c1t18d0 to disk group cuddledg with disk
name cuddled04.

Adding disk device c1t19d0 to disk group cuddledg with disk
name cuddled05.

Adding disk device c1t1d0 to disk group cuddledg with disk
name cuddled06.

Adding disk device c1t20d0 to disk group cuddledg with disk
name cuddled07.

Adding disk device c1t21d0 to disk group cuddledg with disk
name cuddled08.

Adding disk device c1t22d0 to disk group cuddledg with disk
name cuddled09.

Adding disk device c1t2d0 to disk group cuddledg with disk
name cuddled10.

Adding disk device c1t3d0 to disk group cuddledg with disk
name cuddled11.

Adding disk device c1t4d0 to disk group cuddledg with disk
name cuddled12.

Adding disk device c1t5d0 to disk group cuddledg with disk
name cuddled13.

Adding disk device c1t6d0 to disk group cuddledg with disk
name cuddled14.

Goodbye.

#

         非常棒!在这些步骤中,我们已经验证了磁盘,并把他们加入到了新建的disk group中。对上面的操作,有一些值得注意的地方。大家都很清楚format命令的用法和输出了。但是接下来把磁盘加入到VM的管理之中,我们选择了”vxdiskadd”命令,而不是在vxmake课程中用到的”vxdiskadm”。vxdiskadd帮助你把参数指定的所有磁盘加入VM,在这里,磁盘是以SCSI Id的形式给出的。你有很多种方法表示磁盘……参数“all”,将把系统中所有的磁盘都加入到VM的管理中;指定控制器号,可以把这个控制器控制的所有磁盘加入到VM中,这也正是我们例子中做的;另外一种方法是具体指定到某一块磁盘(例如:vxdiskadd c1t3d0 c1t4d0 c1t5d0, 会把列出来的三块磁盘都加入到VM中)。本人非常不推荐大家使用”all”选项。
关于上面的输出,另外两个地方希望大家能够注意:第一,我创建新disk group时,指定了一个不存在的DG(Disk Group,后同)名。VM将此视为创建它的提示,使用”cuddledg”作为DG名字的,后一个问题"Create a new group named cuddledg?"也会验证你是否用这个名字作为新建DG的名字。这样,非常容易就得到了一个新的DG。第二,附加的警告信息。系统在真正初始化某些磁盘以前,警告你:磁盘可能已经被初始化啦。这个警告很重要,因为你可能没留神正准备初始化一个被deported-DG中的磁盘,或者要初始化曾经用于原来的VM的磁盘。(也就是说,如果这些磁盘的数据有用,就不要初始化它们。)我们这里看到的这个警告信息是因为我总是在这个磁阵上创建和破坏volumes和vm disks,因此它只是一个友情提示,让我们再确认一下。
        在我们继续之前,请注意,尽管绝大部分问题都有默认答案,但我们不推荐使用。ALWAYS ANSWER THE QUESTIONS!如果你不这样做,你将会象节目“Afternoon TV specials”中的人们,说着愚蠢的话,“我从没想过会发生在我身上!我以为我是特别的”。请记住,错误会随时让人被炒鱿鱼,所以别把不应该的事情看作是想当然的。
        现在,我们来看看”vxdisk list”输出的磁盘配置信息。

# vxdisk list
DEVICE    TYPE    DISK     GROUP    STATUS
c0t0d0s2  sliced    -        -      error
c0t1d0s2  sliced rootdisk  rootdg   online
c1t0d0s2  sliced cuddled01 cuddledg online
c1t1d0s2  sliced cuddled06 cuddledg online
c1t2d0s2  sliced cuddled10 cuddledg online
c1t3d0s2  sliced cuddled11 cuddledg online
c1t4d0s2  sliced cuddled12 cuddledg online
c1t5d0s2  sliced cuddled13 cuddledg online
c1t6d0s2  sliced cuddled14 cuddledg online
c1t16d0s2 sliced cuddled02 cuddledg online
c1t17d0s2 sliced cuddled03 cuddledg online
c1t18d0s2 sliced cuddled04 cuddledg online
c1t19d0s2 sliced cuddled05 cuddledg online
c1t20d0s2 sliced cuddled07 cuddledg online
c1t21d0s2 sliced cuddled08 cuddledg online
c1t22d0s2 sliced cuddled09 cuddledg online
#

        这里困扰我的是,这些磁盘的名字对我没什么帮助。在讨论磁盘和DG之前,让我们看看改变VM对象的命名是多么容易的事情啊!使用命令”vxedit”,我们可以十分容易的改变任何对象的命名。一般不要重命名volume,因为volume名也用于表示块设备(/dev/vx/dsk/diskgroup/volume),如果你忘记更新/etc/vfstab而改变了块设备名会导致系统出现问题。别忘了,在更改volume名之前,你需要先将其umount下来。接下来让我们看看如何以一种有效的方式更改磁盘命名:

# vxedit -g cuddledg rename cuddled01 cuddle-f0
# vxedit -g cuddledg rename cuddled06 cuddle-f1
# vxedit -g cuddledg rename cuddled10 cuddle-f2
# vxedit -g cuddledg rename cuddled11 cuddle-f3
# vxedit -g cuddledg rename cuddled12 cuddle-f4
# vxedit -g cuddledg rename cuddled13 cuddle-f5
# vxedit -g cuddledg rename cuddled14 cuddle-f6
# vxedit -g cuddledg rename cuddled02 cuddle-r0
# vxedit -g cuddledg rename cuddled03 cuddle-r1
# vxedit -g cuddledg rename cuddled04 cuddle-r2
# vxedit -g cuddledg rename cuddled05 cuddle-r3
# vxedit -g cuddledg rename cuddled07 cuddle-r4
# vxedit -g cuddledg rename cuddled08 cuddle-r5
# vxedit -g cuddledg rename cuddled09 cuddle-r6
# vxdisk list
DEVICE     TYPE   DISK      GROUP   STATUS
c0t0d0s2  sliced    -         -     error
c0t1d0s2  sliced rootdisk  rootdg   online
c1t0d0s2  sliced cuddle-f0 cuddledg online
c1t1d0s2  sliced cuddle-f1 cuddledg online
c1t2d0s2  sliced cuddle-f2 cuddledg online
c1t3d0s2  sliced cuddle-f3 cuddledg online
c1t4d0s2  sliced cuddle-f4 cuddledg online
c1t5d0s2  sliced cuddle-f5 cuddledg online
c1t6d0s2  sliced cuddle-f6 cuddledg online
c1t16d0s2 sliced cuddle-r0 cuddledg online
c1t17d0s2 sliced cuddle-r1 cuddledg online
c1t18d0s2 sliced cuddle-r2 cuddledg online
c1t19d0s2 sliced cuddle-r3 cuddledg online
c1t20d0s2 sliced cuddle-r4 cuddledg online
c1t21d0s2 sliced cuddle-r5 cuddledg online
c1t22d0s2 sliced cuddle-r6 cuddledg online
#

你能看到,vxedit的语法非常简单,如下:
vxedit -g rename

按照这种方式,你可以重命名plex,subdisk,vmdisk。在我们的例子中,我重命名磁盘是因为A5100在前面安装了7块磁盘(f0-f6),后面也安装了7块磁盘(r0-r6)。这种重命名方式让我非常容易的知道每块磁盘的物理位置。但你要记住,这种命名方式绝对不是完美的,因为VM disk是不和物理位置绑定的。我可以让VxVM把VM disk转移到另外一块磁盘,并且不改变该VM disk的名字,由于我们的VM disk名代表它的物理位置,这种情况下,我会获取错误的位置提示。因此这种命名方式仅仅作为参考,不能作为一种原则而广泛采用。永远不要相信一个VM disk的命名。vxedit的好处是你可以online的时候去重命名,随时按照你的喜好修改他们。请小心使用所有的VM命令。
        本课程中需要指出的是我们所有vm命令中都用选项“-g”指定了具体的目标DG(例入上面vxedit语法中)。你应该总是指出目标DG,即使你操作的是rootdg。如果因为某些原因你犯了低级错误,希望造成的破坏越小越好,指定目标DG会有所帮助。
 
到此,我们已经为实验做好了准备,让我们预先看一下disk group信息并继续创建volume吧!

# vxprint -g cuddledg -hrt
DG NAME NCONFIG NLOG MINORS GROUP-ID
DM NAME DEVICE TYPE PRIVLEN PUBLEN STATE
V NAME USETYPE KSTATE STATE LENGTH READPOL PREFPLEX
PL NAME VOLUME KSTATE STATE LENGTH LAYOUT NCOL/WID MODE
SD NAME PLEX DISK DISKOFFS LENGTH [COL/]OFF DEVICE MODE
SV NAME PLEX VOLNAME NVOLLAYR LENGTH [COL/]OFF AM/NM MODE

dg cuddledg default default 10000 1029129226.1248.gaff

dm cuddle-f0 c1t0d0s2  sliced 3590 17678493 -
dm cuddle-f1 c1t1d0s2  sliced 3590 17678493 -
dm cuddle-f2 c1t2d0s2  sliced 3590 17678493 -
dm cuddle-f3 c1t3d0s2  sliced 3590 17678493 -
dm cuddle-f4 c1t4d0s2  sliced 3590 17678493 -
dm cuddle-f5 c1t5d0s2  sliced 3590 17678493 -
dm cuddle-f6 c1t6d0s2  sliced 3590 17678493 -
dm cuddle-r0 c1t16d0s2 sliced 3590 17678493 -
dm cuddle-r1 c1t17d0s2 sliced 3590 17678493 -
dm cuddle-r2 c1t18d0s2 sliced 3590 17678493 -
dm cuddle-r3 c1t19d0s2 sliced 3590 17678493 -
dm cuddle-r4 c1t20d0s2 sliced 3590 17678493 -
dm cuddle-r5 c1t21d0s2 sliced 3590 17678493 -
dm cuddle-r6 c1t22d0s2 sliced 3590 17678493 -
#

第一课: 最简单的volume

第一课我们只创建非常简单的volume,规定其大小为4G,命名为“simplevol”。创建的语法如下:
         vxassist -g -U make

        早些时候,我们已经讨论过”-g”的用法了。”-U”指定了两种类型的用法:gen或fsgen。”gen”是指raw volume(裸设备卷-字符设备);”fsgen”是指regular volume(字符设备和块设备)。唯一一次我见过人们使用”gen”是和大型数据库有关的情况下,有时候会选择raw volume而不是文件系统。本课程中,我们将使用”fsgen”。参数”make”向vxassist表明,我们希望创建一个volume。”volname”是即将创建的新volume的名字,”size”则是指它的大小。”size”可由以下几种方式指定:1,1m,1g。他们的意思是:1 sector(512KB),1M(megabyte) 和 1G(gigabyte)。
         现在我们已经了解语法了,开始创建吧:

# vxassist -g cuddledg -U fsgen make simplevol 4g
# vxprint -g cuddledg -hrt
DG NAME NCONFIG NLOG MINORS GROUP-ID
DM NAME DEVICE TYPE PRIVLEN PUBLEN STATE
V NAME USETYPE KSTATE STATE LENGTH READPOL PREFPLEX
PL NAME VOLUME KSTATE STATE LENGTH LAYOUT NCOL/WID MODE
SD NAME PLEX DISK DISKOFFS LENGTH [COL/]OFF DEVICE MODE
SV NAME PLEX VOLNAME NVOLLAYR LENGTH [COL/]OFF AM/NM MODE

dg cuddledg default default 10000 1029129226.1248.gaff

dm cuddle-f0 c1t0d0s2 sliced 3590 17678493 -
dm cuddle-f1 c1t1d0s2 sliced 3590 17678493 -
dm cuddle-f2 c1t2d0s2 sliced 3590 17678493 -
dm cuddle-f3 c1t3d0s2 sliced 3590 17678493 -
dm cuddle-f4 c1t4d0s2 sliced 3590 17678493 -
dm cuddle-f5 c1t5d0s2 sliced 3590 17678493 -
dm cuddle-f6 c1t6d0s2 sliced 3590 17678493 -
dm cuddle-r0 c1t16d0s2 sliced 3590 17678493 -
dm cuddle-r1 c1t17d0s2 sliced 3590 17678493 -
dm cuddle-r2 c1t18d0s2 sliced 3590 17678493 -
dm cuddle-r3 c1t19d0s2 sliced 3590 17678493 -
dm cuddle-r4 c1t20d0s2 sliced 3590 17678493 -
dm cuddle-r5 c1t21d0s2 sliced 3590 17678493 -
dm cuddle-r6 c1t22d0s2 sliced 3590 17678493 -

v simplevol fsgen ENABLED ACTIVE 8388608 SELECT -
pl simplevol-01 simplevol ENABLED ACTIVE 8392167 CONCAT - RW
sd cuddle-f0-01 simplevol-01 cuddle-f0 0 8392167 0 c1t0d0 ENA
#

简单吧!我们已经准备好volume,可以创建文件系统啦。你将会注意到,新建volume的layout是”CONCAT”,在一块磁盘上。系统使用了它认为可用的第一块磁盘,并在此磁盘上创建了所有的子对象(sub-object)。volume已经好了。这就是为什么vxassist如此流行的原因,它的确十分快捷和简单。
为完整起见,我们在volume上创建一个文件系统并使用它:

# newfs /dev/vx/rdsk/cuddledg/simplevol
newfs: /dev/vx/rdsk/cuddledg/simplevol last mounted as /test
newfs: construct a new file system /dev/vx/rdsk/cuddledg/simplevol: (y/n)? y
/dev/vx/rdsk/cuddledg/simplevol:
8388608 sectors in 4096 cylinders of 32 tracks, 64 sectors
4096.0MB in 84 cyl groups (49 c/g, 49.00MB/g, 6144 i/g)
super-block backups (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,
2610848, 2711264, 2811680, 2912096, 3012512, 3112928, 3211296, 3311712,
3412128, 3512544, 3612960, 3713376, 3813792, 3914208, 4014624, 4115040,
4215456, 4315872, 4416288, 4516704, 4617120, 4717536, 4817952, 4918368,
5018784, 5119200, 5219616, 5320032, 5420448, 5520864, 5621280, 5721696,
5822112, 5922528, 6022944, 6123360, 6223776, 6324192, 6422560, 6522976,
6623392, 6723808, 6824224, 6924640, 7025056, 7125472, 7225888, 7326304,
7426720, 7527136, 7627552, 7727968, 7828384, 7928800, 8029216, 8129632,
8230048, 8330464,
# mkdir /simple_vol
# mount -F ufs /dev/vx/dsk/cuddledg/simplevol /simple_vol/
# cd /simple_vol/
# touch new_file
# ls -al
total 20
drwxr-xr-x 3 root root 512 Aug 11 23:24 .
drwxr-xr-x 33 root root 1024 Aug 11 23:23 ..
drwx------ 2 root root 8192 Aug 11 23:22 lost+found
-rw-r--r-- 1 root other 0 Aug 11 23:24 new_file
#

我们已经完成了,从开始到结束,从一块SCSI硬盘到一个可用的有文件系统的volume,甚至它已经被mount起来了。你会看到,设备路径是按照如下形式来表述的/dev/vx/(r)dsk//。这样的路径你应该很熟悉啦。

我想尽量缩短命令的输出,比如我只列出了vxprint关于volume部分的输出,而非所有内容。我们也不再讲解文件系统创建之类的内容,相信你已经知道啦。所有的volume(无论以何种方式创建)都是以上面类似的方式创建文件系统的。这么说,我们开始下面一课吧!

第二课: Striped Volumes
默认地,VxAssist会创建串连的volumes。如果在第一课中我们想创建一个40G的volume,系统使用所需要数量的磁盘,创建一个串连的volume。但是,这种简单的volume不能满足我们对速度和性能的需求,因此,在这一课,我们将对vxassist做多一些的设置,并创建一个更大的(40G)striped volume。
让我们看一下创建的语法:
vxassist -g -U make \
layout= stwidth= ncolumn=<#> \
....
好的,前面一些参数我们已经讨论过了。其它的参数,你也可以在VxMake一章创建striped plexes一节中回忆起来。”layout”指定了新volume的layout类型(concat, stripe, mirror, RAID5 等等)。参数”stwdith”和”ncolumn”定义了每一个column的stripe单位的大小(关于stwdith和ncolumn的定义,在cuddletech系列教程的第一篇《VX的土地上,谁是谁》里可以找到)。剩下的参数指明了vxassist要用来创建volume的vm disks。
        需要记住的是,我们可以或多或少的使用这些参数。例如,我们可以设置layout为stripe,但不指定stwdith和ncolumn。我们也可以设置layout为stripe并指定stwidth,但不需要设定ncolumn或要使用哪些vmdisk。你需要练习并获得一些选择参数的常识,多想一想,要达到你的目的,应该选择哪些参数。如果没有这些参数,VM会以它认为最好的方式来满足你的需求。下面的例子,我们将仅设置layout为stripe,创建一个striped的volume,其它工作都交给vxassist完成。

# vxassist -g cuddledg -U fsgen make stripevol 40g layout=stripe
# vxprint -g cuddledg -hrt
DG NAME NCONFIG NLOG MINORS GROUP-ID
DM NAME DEVICE TYPE PRIVLEN PUBLEN STATE
V NAME USETYPE KSTATE STATE LENGTH READPOL PREFPLEX
PL NAME VOLUME KSTATE STATE LENGTH LAYOUT NCOL/WID MODE
SD NAME PLEX DISK DISKOFFS LENGTH [COL/]OFF DEVICE MODE
SV NAME PLEX VOLNAME NVOLLAYR LENGTH [COL/]OFF AM/NM MODE

(..... removed ..........)

v stripevol fsgen ENABLED ACTIVE 83886080 SELECT stripevol-01
pl stripevol-01 stripevol ENABLED ACTIVE 83907654 STRIPE 7/128 RW
sd cuddle-f0-01 stripevol-01 cuddle-f0 0 11986758 0/0 c1t0d0 ENA
sd cuddle-f1-01 stripevol-01 cuddle-f1 0 11986758 1/0 c1t1d0 ENA
sd cuddle-f2-01 stripevol-01 cuddle-f2 0 11986758 2/0 c1t2d0 ENA
sd cuddle-f3-01 stripevol-01 cuddle-f3 0 11986758 3/0 c1t3d0 ENA
sd cuddle-f4-01 stripevol-01 cuddle-f4 0 11986758 4/0 c1t4d0 ENA
sd cuddle-f5-01 stripevol-01 cuddle-f5 0 11986758 5/0 c1t5d0 ENA
sd cuddle-f6-01 stripevol-01 cuddle-f6 0 11986758 6/0 c1t6d0 ENA

VxAssist决定,创建这样的volume需要7块硬盘,stripe width为64k(128个sectors)。它不是必须使用每块硬盘的全部空间,因此它创建了7个subdisks,长度为11986758 sectors(5.9G)。这与我们使用vxmake创建striped volume不同。我们更可能采用5块硬盘,使用每块硬盘的全部空间,创建一个大约45G的volume,但vxassist不同的是,它会尽量逼近所期望的volume空间。这也有它的好处。
        让我们创建另外一个volume,但这一次要指定stwidth,ncolumn和希望用的vmdisks。

# vxassist -U fsgen -g cuddledg make stripevol2 40g \
layout=stripe stwidth=128k ncolumn=5 cuddle-f0 cuddle-f1 \
cuddle-f2 cuddle-f3 cuddle-f4
# vxprint -g cuddledg -hrt
DG NAME NCONFIG NLOG MINORS GROUP-ID
DM NAME DEVICE TYPE PRIVLEN PUBLEN STATE
V NAME USETYPE KSTATE STATE LENGTH READPOL PREFPLEX
PL NAME VOLUME KSTATE STATE LENGTH LAYOUT NCOL/WID MODE
SD NAME PLEX DISK DISKOFFS LENGTH [COL/]OFF DEVICE MODE
SV NAME PLEX VOLNAME NVOLLAYR LENGTH [COL/]OFF AM/NM MODE

(..... removed ......)

v stripevol2 fsgen ENABLED ACTIVE 83886080 SELECT stripevol2-01
pl stripevol2-01 stripevol2 ENABLED ACTIVE 83903943 STRIPE 5/256 RW
sd cuddle-f0-01 stripevol2-01 cuddle-f0 0 16780743 0/0 c1t0d0 ENA
sd cuddle-f1-01 stripevol2-01 cuddle-f1 0 16780743 1/0 c1t1d0 ENA
sd cuddle-f2-01 stripevol2-01 cuddle-f2 0 16780743 2/0 c1t2d0 ENA
sd cuddle-f3-01 stripevol2-01 cuddle-f3 0 16780743 3/0 c1t3d0 ENA
sd cuddle-f4-01 stripevol2-01 cuddle-f4 0 16780743 4/0 c1t4d0 ENA
#

你看到了,在这个例子中我们告诉vxassist我们具体需要什么,我们也确确实实得到了我们需要的。希望这两个例子能够让你搞清楚vxassist是如何填补空白的。如果你曾设想vxassist使用5块硬盘新建一个40G volume,当你得到一个7块硬盘构成volume的时候,你会非常吃惊的。这帮助解释了,如果你认为layout是无关紧要的,你必须要确定这一点。否则,你所得到的和你所想象的将会大相径庭。
        由于这一章的概念较容易掌握,我们将进行更深入的研究(相对于VxMake课程)。接下来看看,vxassist创建镜像 volume和RAID0+1volume。

第三课: RAID1 and RAID0+1 Volumes
   
        和创建simple或striped volume一样简单的,我们现在要创建镜像volume啦。我们从10G的镜像volume开始,看一看用两块磁盘互为镜像的RAID1 volume是什么样子的。首先,看一下语法:

         vxassist -g -U make \
layout= ...

         语法是重复的,对吗?在这个例子中,我们使用和以前同样的选项,但是,layout要被指定为”mirror-concat”。

# vxassist -U fsgen -g cuddledg make mirrorvol3 10g layout=mirror-concat
# vxprint -g cuddledg -hrt
DG NAME NCONFIG NLOG MINORS GROUP-ID
DM NAME DEVICE TYPE PRIVLEN PUBLEN STATE
V NAME USETYPE KSTATE STATE LENGTH READPOL PREFPLEX
PL NAME VOLUME KSTATE STATE LENGTH LAYOUT NCOL/WID MODE
SD NAME PLEX DISK DISKOFFS LENGTH [COL/]OFF DEVICE MODE
SV NAME PLEX VOLNAME NVOLLAYR LENGTH [COL/]OFF AM/NM MODE

(..... removed ......)

v mirrorvol fsgen ENABLED ACTIVE 20971520 SELECT -
pl mirrorvol-01 mirrorvol ENABLED ACTIVE 20975031 CONCAT - RW
sd cuddle-f4-01 mirrorvol-01 cuddle-f4 0 3296538 0 c1t4d0 ENA
sd cuddle-r4-01 mirrorvol-01 cuddle-r4 0 17678493 3296538 c1t20d0 ENA
pl mirrorvol3-02 mirrorvol ENABLED ACTIVE 20975031 CONCAT - RW
sd cuddle-f5-01 mirrorvol-02 cuddle-f5 0 3296538 0 c1t5d0 ENA
sd cuddle-r3-01 mirrorvol-02 cuddle-r3 0 17678493 3296538 c1t19d0 ENA

这么做的优点在于,镜像一下子就可以实现了。在layout后面多增加一个参数,你甚至可以指定多个镜像。用参数:”nmirror=X”, X指你希望镜像(plex)的数量。

请注意,你也可以先创建一个没有镜像的volume,接着再用以下命令为其添加一个镜像。

vxassist -g mirror

这会创建一个和已有plex相同的镜像。下面的例子创建了一个10G的volume,接着再为它做镜像:

# vxassist -g cuddledg -U fsgen make stripevol 10g layout=stripe
# vxprint -g cuddledg -hrt stripevol

(... removed ...)

v stripevol fsgen ENABLED ACTIVE 20971520 SELECT stripevol-01
pl stripevol-01 stripevol ENABLED ACTIVE 20989653 STRIPE 7/128 RW
sd cuddle-f0-01 stripevol-01 cuddle-f0 0 2998485 0/0 c1t0d0 ENA
sd cuddle-f1-01 stripevol-01 cuddle-f1 0 2998485 1/0 c1t1d0 ENA
sd cuddle-f2-01 stripevol-01 cuddle-f2 0 2998485 2/0 c1t2d0 ENA
sd cuddle-f3-01 stripevol-01 cuddle-f3 0 2998485 3/0 c1t3d0 ENA
sd cuddle-f4-01 stripevol-01 cuddle-f4 0 2998485 4/0 c1t4d0 ENA
sd cuddle-f5-01 stripevol-01 cuddle-f5 0 2998485 5/0 c1t5d0 ENA
sd cuddle-f6-01 stripevol-01 cuddle-f6 0 2998485 6/0 c1t6d0 ENA
# vxassist -g cuddledg mirror stripevol
# vxprint -g cuddledg -hrt stripevol

(... removed ...)

v stripevol fsgen ENABLED ACTIVE 20971520 SELECT -
pl stripevol-01 stripevol ENABLED ACTIVE 20989653 STRIPE 7/128 RW
sd cuddle-f0-01 stripevol-01 cuddle-f0 0 2998485 0/0 c1t0d0 ENA
sd cuddle-f1-01 stripevol-01 cuddle-f1 0 2998485 1/0 c1t1d0 ENA
sd cuddle-f2-01 stripevol-01 cuddle-f2 0 2998485 2/0 c1t2d0 ENA
sd cuddle-f3-01 stripevol-01 cuddle-f3 0 2998485 3/0 c1t3d0 ENA
sd cuddle-f4-01 stripevol-01 cuddle-f4 0 2998485 4/0 c1t4d0 ENA
sd cuddle-f5-01 stripevol-01 cuddle-f5 0 2998485 5/0 c1t5d0 ENA
sd cuddle-f6-01 stripevol-01 cuddle-f6 0 2998485 6/0 c1t6d0 ENA
pl stripevol-02 stripevol ENABLED ACTIVE 20989653 STRIPE 7/128 RW
sd cuddle-r0-01 stripevol-02 cuddle-r0 0 2998485 0/0 c1t16d0 ENA
sd cuddle-r1-01 stripevol-02 cuddle-r1 0 2998485 1/0 c1t17d0 ENA
sd cuddle-r2-01 stripevol-02 cuddle-r2 0 2998485 2/0 c1t18d0 ENA
sd cuddle-r3-01 stripevol-02 cuddle-r3 0 2998485 3/0 c1t19d0 ENA
sd cuddle-r4-01 stripevol-02 cuddle-r4 0 2998485 4/0 c1t20d0 ENA
sd cuddle-r5-01 stripevol-02 cuddle-r5 0 2998485 5/0 c1t21d0 ENA
sd cuddle-r6-01 stripevol-02 cuddle-r6 0 2998485 6/0 c1t22d0 ENA
#

创建镜像volumes的过程中,有两件事情值得关注。第一,创建过程需要较长时间。上例中(创建一个10G的镜像),我们的Ultra机器花了20多分钟来做镜像之间的同步。你可能会认为,“嘿,这是一个新的volume,因此没有数据在上面,也就没有东西需要被同步”。是的,逻辑上看起来是这样的。但事实上,VM的的确确要做一个同步操作。volume上面什么都没有,即使这样,VM也要一个bit一个bit的同步过去。第二,使用VxVM 3.X,你创建simple的镜像volume时,要设定layout类型为”mirror-concat”,而不是简单的”mirror”。如果你指定layout类型为”mirror”,你得到的将是”concat-mirror”的volume,而非”mirror-concat”。二者的区别在于,”concat-mirror”是一种多层的volume(也被称为ConcatPro),这种类型的volume已经超出本教程的范围了。你可以在Cuddletech系列课程 “Exploring Layered Volumes”中找到关于它更多的内容。但在这儿,你只需要知道,如果你用多块磁盘做layout类型为”mirror”的volume,你得到的可能不是你所想要的。这样的问题不会出现在VxVM 2.X中,因为VxVM到了3.X才开始支持多层volumes概念的。

让我们再看一个例子吧,快速浏览一下如何直接创建一个layout类型为”mirror-stripe”的volume。我们将要创建的volume,和上面例子所创建的volume很相象(我们先创建了一个striped的volume,然后再为其做镜像),但在这儿,我们要同时实现创建和镜像。在这个例子中,让我们规定的更加具体一些,因为用7块硬盘来做一个10G的volume并不是我所希望的:

# vxassist -g cuddledg -U fsgen make raid01-test 10g \
layout=mirror-stripe ncolumns=3 stwidth=64k nmirror=2
# vxprint -g cuddledg -hrt raid01-test

(... removed ...)

v raid01-test fsgen ENABLED ACTIVE 20971520 SELECT -
pl raid01-test-01 raid01-test ENABLED ACTIVE 20975165 STRIPE 3/128 RW
sd cuddle-f0-01 raid01-test-01 cuddle-f0 0 6991677 0/0 c1t0d0 ENA
sd cuddle-f1-01 raid01-test-01 cuddle-f1 0 6991677 1/0 c1t1d0 ENA
sd cuddle-f2-01 raid01-test-01 cuddle-f2 0 6991677 2/0 c1t2d0 ENA
pl raid01-test-02 raid01-test ENABLED ACTIVE 20975165 STRIPE 3/128 RW
sd cuddle-f3-01 raid01-test-02 cuddle-f3 0 6991677 0/0 c1t3d0 ENA
sd cuddle-f4-01 raid01-test-02 cuddle-f4 0 6991677 1/0 c1t4d0 ENA
sd cuddle-f5-01 raid01-test-02 cuddle-f5 0 6991677 2/0 c1t5d0 ENA
#

我更喜欢这样。我得到了我想要的,我也不关心系统用了哪几块磁盘。因此我没有指定具体要使用的vmdisk,留给VM决定吧。如果当时我需要规定使用的磁盘,那我需要指定6个vmdisks,前3个vmdisks会组成一个plex,后3个vmdisks会组成另外
一个plex。另外,还有一个经常“迷惑”人的概念是这个例子中的”nmirror”参数。你也许会认为,“nmirror被设定为2,那就应该是两个镜像加上存放数据的volume,总共有三个plex!”,这是错的。请再次大声喊出“一个plex就是一个镜像!”。设定参数”nmirror”为2,意味着我们将得到2个plex。

同样的参数,同样的语法,我们现在要创建更大,更好,更酷的volumes啦!现在我们只涉及到了简单的RAID,RAID 0,RAID 0+1, RAID 1,接下来让我们继续往前,看一看,不推荐用vxmake实现的(是否能够使用手工创建RAID 5 volume还在争论之中,但实际上极少有人愿意尝试)创建RAID 5 volumes吧!

第四课: RAID5 Volumes

RAID 5实现起来非常简单。用vxassist创建volume,你能得到非常具体的volume。但总的说来,做RAID 5时,你不能违反一些基准。因此,在它的创建过程中,没什么太多可做的,除了指定layout类型为”raid 5”,还有你想使用的磁盘。
语法如下:

vxassist -g -U make \
layout= ...

RAID 5有一些要求,你至少需要3个vmdisk创建RAID 5 volume(4个更好)。其中,3个subdisk用来构建volume本身,1个subdisk会被自动创建为RAID 5 日志plex。RAID 5 日志用于volume metadata(元数据)和parity(校验位)的日志。While

让我们看一个创建RAID 5 volume的例子:

# vxassist -g cuddledg -U fsgen make raid5vol 4g layout=raid5
# vxprint -g cuddledg -hrt raid5vol
V NAME USETYPE KSTATE STATE LENGTH READPOL PREFPLEX
PL NAME VOLUME KSTATE STATE LENGTH LAYOUT NCOL/WID MODE
SD NAME PLEX DISK DISKOFFS LENGTH [COL/]OFF DEVICE MODE
SV NAME PLEX VOLNAME NVOLLAYR LENGTH [COL/]OFF AM/NM MODE
dm cuddle-f0 c1t0d0s2 sliced 3590 17678493 -
dm cuddle-f1 c1t1d0s2 sliced 3590 17678493 -
dm cuddle-f2 c1t2d0s2 sliced 3590 17678493 -
dm cuddle-f3 c1t3d0s2 sliced 3590 17678493 -
dm cuddle-f4 c1t4d0s2 sliced 3590 17678493 -
dm cuddle-f5 c1t5d0s2 sliced 3590 17678493 -
dm cuddle-f6 c1t6d0s2 sliced 3590 17678493 –

v raid5vol raid5 ENABLED ACTIVE 8388640 RAID -
pl raid5vol-01 raid5vol ENABLED ACTIVE 8402880 RAID 6/32 RW
sd cuddle-f0-01 raid5vol-01 cuddle-f0 0 1680588 0/0 c1t0d0 ENA
sd cuddle-f1-01 raid5vol-01 cuddle-f1 0 1680588 1/0 c1t1d0 ENA
sd cuddle-f2-01 raid5vol-01 cuddle-f2 0 1680588 2/0 c1t2d0 ENA
sd cuddle-f3-01 raid5vol-01 cuddle-f3 0 1680588 3/0 c1t3d0 ENA
sd cuddle-f4-01 raid5vol-01 cuddle-f4 0 1680588 4/0 c1t4d0 ENA
sd cuddle-f5-01 raid5vol-01 cuddle-f5 0 1680588 5/0 c1t5d0 ENA
pl raid5vol-02 raid5vol ENABLED LOG 3591 CONCAT - RW
sd cuddle-f6-01 raid5vol-02 cuddle-f6 0 3591 0 c1t6d0 ENA
#

我们可以看到,vxassist采用了6块磁盘来构建实际的volume,然后创建一个非常小(1.5M)的subdisk作为RAID 5日志plex。我们也可以使用”ncolumns”参数来指定RAID 5 volume要用subdisk的数量,就像我们前面例子中创建striped volume时做的那样。但请记住,如果你想指定”ncolumns”为5,并且想指定具体磁盘,你就要指定6块。这样,就不会强迫vxassist把日志plex放到数据磁盘上了。

这里是另一个例子,可以更好的解释上面的描述:

# vxassist -g cuddledg -U fsgen make raid5vol 4g layout=raid5 ncolumns=3 cuddlef0
cuddle-f1 cuddle-f2 cuddle-f3
# vxprint -g cuddledg -hrt raid5vol
V NAME USETYPE KSTATE STATE LENGTH READPOL PREFPLEX
PL NAME VOLUME KSTATE STATE LENGTH LAYOUT NCOL/WID MODE
SD NAME PLEX DISK DISKOFFS LENGTH [COL/]OFF DEVICE MODE
SV NAME PLEX VOLNAME NVOLLAYR LENGTH [COL/]OFF AM/NM MODE

dm cuddle-f0 c1t0d0s2 sliced 3590 17678493 -
dm cuddle-f1 c1t1d0s2 sliced 3590 17678493 -
dm cuddle-f2 c1t2d0s2 sliced 3590 17678493 -
dm cuddle-f3 c1t3d0s2 sliced 3590 17678493 -

v raid5vol raid5 ENABLED ACTIVE 8388608 RAID -
pl raid5vol-01 raid5vol ENABLED ACTIVE 8395712 RAID 3/32 RW
sd cuddle-f0-01 raid5vol-01 cuddle-f0 0 4197879 0/0 c1t0d0 ENA
sd cuddle-f1-01 raid5vol-01 cuddle-f1 0 4197879 1/0 c1t1d0 ENA
sd cuddle-f2-01 raid5vol-01 cuddle-f2 0 4197879 2/0 c1t2d0 ENA
pl raid5vol-02 raid5vol ENABLED LOG 3591 CONCAT - RW
sd cuddle-f3-01 raid5vol-02 cuddle-f3 0 3591 0 c1t3d0 ENA
 
转自:

_________________________________【Appendix】____________________________________
 
Volume resizing

我们再多讨论一个话题吧。VxMake课程中有10多个命令,并且每个命令都有自己的参数,相对来说,本课程只有少量的晦涩的概念需要记住。我们再来谈一谈如何能够调整volume的大小?什么工具可以帮助我们实现它?

某些时候你会意识到你的volume没有足够的空间。这时你需要做一个决策,是新建一个volume,和老的volume一起使用呢;还是调整已有volume的大小。你已经知道了如何去创建一个新的volume,所以,现在我们来看看如何调整已有volume的大小吧!

上一个例子,我们用3块磁盘和一块日志磁盘创建了一个4G的RAID 5 volume。我突然发现我不是要缩减其空间,实际上我需要一个12G的volume。但首先,我需要确认,在不添加新磁盘的前提下,我的volume能扩展到多大?让我们先看看第一个工具的语法:

vxassist -g maxgrow [ ]

”maxgrow”参数可以帮我们计算出剩余空间的大小。带上maxgrow参数,如果没有指定具体的磁盘,vxassist命令会告诉我们该volume最大可以扩展到多大(占用该disk grouop上面所有的剩余空间)。但在扩展volume的过程中我想指定更多的细节信息,比如说指定所用的磁盘,可以使用接下来的参数。就刚才RAID 5例子中创建的volume,我们先看看它在所属disk group中最大可以扩展到多少空间?接着再列出我们用来构建该volume的3块磁盘,我们又可以知道如果不为其分配新的磁盘,该volume又可以扩展到多少空间?

# vxassist -g cuddledg maxgrow raid5vol
Volume raid5vol can be extended by 133038080 to 141426688 (69056Mb)
bash-2.03# vxassist -g cuddledg maxgrow raid5vol cuddle-f0 cuddle-f1 cuddle-f2
Volume raid5vol can be extended by 26968064 to 35356672 (17264Mb)

如果我们占用所属disk group上的所有未用空间,该volume可以扩展到大概70G。
如果我们占用构建该volume的3块磁盘的所有未用空间,该volume可以扩展到大概17.2G。早些时候我已经说过了,我们的目标是构建一个12G的volume, 17.2G已经足够大了,把已经用了的磁盘填满听起来是个好主意。为了实现它,我们可以采用下面的命令:

vxassist -g growby

or

vxassist -g growto

注意了,我们可以通过两种方式来扩展volume空间:填写新增加的相对值或者是最终大小的绝对值。参考用”maxgrow”得到的信息来判断我们可以扩展多少空间。通常,我倾向于使用”growto”方法。当有人对你尖叫“我需要2G的空间”时,growby会好一些。

让我们看一看”growto”方法是如何使用的吧!

# vxprint -g cuddledg -hrt raid5vol
V NAME USETYPE KSTATE STATE LENGTH READPOL PREFPLEX
PL NAME VOLUME KSTATE STATE LENGTH LAYOUT NCOL/WID MODE
SD NAME PLEX DISK DISKOFFS LENGTH [COL/]OFF DEVICE MODE
SV NAME PLEX VOLNAME NVOLLAYR LENGTH [COL/]OFF AM/NM MODE

dm cuddle-f0 c1t0d0s2 sliced 3590 17678493 -
dm cuddle-f1 c1t1d0s2 sliced 3590 17678493 -
dm cuddle-f2 c1t2d0s2 sliced 3590 17678493 -
dm cuddle-f3 c1t3d0s2 sliced 3590 17678493 -

v raid5vol raid5 ENABLED ACTIVE 8388608 RAID -
pl raid5vol-01 raid5vol ENABLED ACTIVE 8395712 RAID 3/32 RW
sd cuddle-f0-01 raid5vol-01 cuddle-f0 0 4197879 0/0 c1t0d0 ENA
sd cuddle-f1-01 raid5vol-01 cuddle-f1 0 4197879 1/0 c1t1d0 ENA
sd cuddle-f2-01 raid5vol-01 cuddle-f2 0 4197879 2/0 c1t2d0 ENA
pl raid5vol-02 raid5vol ENABLED LOG 3591 CONCAT - RW
sd cuddle-f3-01 raid5vol-02 cuddle-f3 0 3591 0 c1t3d0 ENA

# vxassist -g cuddledg growto raid5vol 35356672
# vxprint -g cuddledg -hrt raid5vol
V NAME USETYPE KSTATE STATE LENGTH READPOL PREFPLEX
PL NAME VOLUME KSTATE STATE LENGTH LAYOUT NCOL/WID MODE
SD NAME PLEX DISK DISKOFFS LENGTH [COL/]OFF DEVICE MODE
SV NAME PLEX VOLNAME NVOLLAYR LENGTH [COL/]OFF AM/NM MODE

dm cuddle-f0 c1t0d0s2 sliced 3590 17678493 -
dm cuddle-f1 c1t1d0s2 sliced 3590 17678493 -
dm cuddle-f2 c1t2d0s2 sliced 3590 17678493 -
dm cuddle-f3 c1t3d0s2 sliced 3590 17678493 -

v raid5vol raid5 ENABLED ACTIVE 35356672 RAID -
pl raid5vol-01 raid5vol ENABLED ACTIVE 35356928 RAID 3/32 RW
sd cuddle-f0-01 raid5vol-01 cuddle-f0 0 17678493 0/0 c1t0d0 ENA
sd cuddle-f1-01 raid5vol-01 cuddle-f1 0 17678493 1/0 c1t1d0 ENA
sd cuddle-f2-01 raid5vol-01 cuddle-f2 0 17678493 2/0 c1t2d0 ENA
pl raid5vol-02 raid5vol ENABLED LOG 3591 CONCAT - RW
sd cuddle-f3-01 raid5vol-02 cuddle-f3 0 3591 0 c1t3d0 ENA
#
这是简单而又快捷的方法来扩展volume空间。当然,扩展volume空间还有其它值得注意的地方,但这已经超出本课程的范围了。你可以在以下资料中找到很好的说明: VxFS Admin Guide ,Solaris Administrators Collection for UFS。

还需要注意,也有相应的命令用来缩减volume空间,vxassist命令带上参数”shrinkto””shrinkby”,和上面扩展空间的用法差不多。需要更详细信息的话,请查看一下man页面。它就是和我们上面最后一个例子一样简单的。

还有另外一种方法可以让你完全改变volume,使用参数”relayout”。有了”relayout”,你可以改变ncolumn(对于RAID 5或者是stripe volume来说,添加或者删除磁盘非常重要),也可以改变plex类型(从concat改成stripe,反之亦然,从stripe-mirror改成RAID 5,反之亦然),甚至可以实现任何你所想做的改变。relayout可以让你脱离险境,是一个非常有用的工具,但不能滥用。有Relayout的教程,如果你想知道,请参考我的后续文章“Advanced Theory”课程和VxVM Administratiors Guide。

The Wrap Up-结束语

希望本教程能让你感到有些帮助。你已经一次又一次的看到vxassist的语法了。希望你现在对此已经有所感觉,这也是本教程的最终目标。vxassit可以为我们和volume做的事情远远超过了我们上面所列举的,但至少现在你已经具备了基本知识,可以在这么多的参数中冒险试试了。

最后的忠告:请总是小心翼翼的操作;请再三检查语法;创建或者修改对象之前请完全计划好。Vxassist最大的价值在于你能少说多做。但它不好的一面是,一旦你输入的命令不合适,可能导致非常可怕的破坏,而这些破坏不一定容易恢复。如果说有什么东西会让你发火,那就是它可能一瞬间就吹走了你几百G的数据,即使你有磁带。小心一点,细致一点,你会做的很好的。(这样干下去,你可能会象我以前一样,23岁就有心脏病。但至少你会有一份工作,不至于睡在纸盒子里!)
 
转自:
 
阅读(1403) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~