SUN Solstice DiskSuite 磁盘管理软件的初步使用[转]
一. SUN Solstice DiskSuiteSUN Solstice DiskSuite是SUN公司自主研发的磁盘管理软件,并向广大用户免费提供。此软件支持Solaris 2.6 、Solaris 7、 Solaris 8。虽然在Solaris 9中更名为“Sun Volume Manager”,但原理和命令几乎没有任何改变。SUN Solstice DiskSuite最常用的用途是磁盘镜像RAID 1,串连RAID 0(striping,concatenation),RAID 5,RAID 0+1,RAID 1+0,磁盘热备(hotspare),Diskset,操作系统扩容(growfs),文件系统日志(UFS logging)
二. SUN Solstice DiskSuite软件安装
SUN Solstice DiskSuite软件免费提供于Solaris 2.6、Solaris 7、Solaris 8、Solaris 9及最新发布的Solaris 10中。在Solaris 9和Solaris 10中,SUN Solstice DiskSuite已经集成在操作系统当中,不需要安装就可以直接使用。在Solaris 2.6、Solaris 7、 Solaris 8的操作系统环境下,需要对SUN Solstice DiskSuite进行安装。以下介绍具体安装过程(以Solaris 8为例)。
SUN Solstice DiskSuite软件存在于Solaris8系统安装盘的software 2 of 2中,也就是平常所说的Solaris 8安装盘的第3张(通常所说的Solaris 8安装盘有4张:install ,software 1 of 2,software 2 of 2,language)。软件具体目录如下: /sol_8_401_sparc_2/Solaris_8/EA/products/DiskSuite_4.2.1
其中, sol_8_401为操作系统版本号,本例中的操作系统版本号为Solaris 8 0401。DiskSuite_4.2.1为SUN Solstice DiskSuite软件版本号,此版本为4.2.1(如果没有安装介质,可以到SUN的网站免费下载软件包)。SUN Solstice DiskSuite软件的安装路径在/usr/opt下,所以您的/usr下至少需要30兆空间来安装SUN Solstice DiskSuite软件。
软件安装方法有两种,在图形界面环境下可以直接执行以上路径中的installer脚本程序。启动图形界面,进而根据下一步提示完成安装。除了 installer脚本程序,我们通常利用命令行通过安装软件包来安装SUN Solstice DiskSuite。SUN Solstice DiskSuite软件包存在目录为: sol_8_401_sparc_2/Solaris_8/EA/products/DiskSuite_4.2.1/sparc/packages/
以下为安装实例:
1.进入Packages所在的目录
#cd /cdrom/cdrom0/Solaris_8/EA
#cd /products/DiskSuite_4.2.1/sparc/Packages
2.查看软件包
# ls
SUNWlvma SUNWlvmg SUNWlvmr SUNWmdg SUNWmdja SUNWmdnr SUNWmdnu SUNWmdr SUNWmdu SUNWmdx
3.添加软件包
# pkgadd -d . (注:“.”为安装路径为当前目录,不可省略)
he following packages are available:
1 SUNWlvma Solaris Volume Management API's
(sparc) 1.0,REV=2001.11.02.03.17
2 SUNWlvmg Solaris Volume Management Application
(sparc) 1.0,REV=2001.11.14.03.19
3 SUNWlvmr Solaris Volume Management (root)
(sparc) 1.0,REV=2001.11.14.03.19
4 SUNWmdg Solstice DiskSuite Tool
(sparc) 4.2.1,REV=1999.11.04.18.29
5 SUNWmdja Solstice DiskSuite Japanese localization
(sparc) 4.2.1,REV=1999.12.09.15.37
6 SUNWmdnr Solstice DiskSuite Log Daemon Configuration Files
(sparc) 4.2.1,REV=1999.11.04.18.29
7 SUNWmdnu Solstice DiskSuite Log Daemon
(sparc) 4.2.1,REV=1999.11.04.18.29
8 SUNWmdr Solstice DiskSuite Drivers
(sparc) 4.2.1,REV=1999.12.03.10.00
9 SUNWmdu Solstice DiskSuite Commands
(sparc) 4.2.1,REV=1999.11.04.18.29
10 SUNWmdx Solstice DiskSuite Drivers(64-bit)
(sparc) 4.2.1,REV=1999.11.04.18.29
Select package(s) you wish to process (or 'all' to process all packages). (default: all) [?,??,q]:
输入all来安装所有软件包。在实际安装过程中,笔者在较早的操作系统环境下曾经遇到安装不成功的情况,原因是驱动不符。SUN Solstice DiskSuite驱动由8号软件包SUNWmdr提供,大家如果碰到类似问题可以先安装8号软件包再安装其他软件包。也就是先在输入栏输入8,等待8号软件包安装成功后再对其它软件包进行安装。
三. Metadevice State Database介绍
SUN Solstice DiskSuite软件在使用的时候需要调用一个其特有的Metadevice State Database小数据库。Metadevice State Database通常被称为Metadb,Metadb用来存储SUN Solstice DiskSuite软件对服务器硬盘的所有配置信息。换句话说,我们所做的所有磁盘、卷、RAID的结构,都存储在Metadb当中。每当服务器重新启动,SUN Solstice DiskSuite软件就会自动调用Metadb中的信息,从而按照这些信息配置物理磁盘,挂接UFS文件系统,从而使操作系统正常启动。相反,如果 Metadb被破坏了,操作系统就有可能无法正常启动,进入单用户状态,甚至可能丢失硬盘数据。
Metadb对于SUN Solstice DiskSuite软件来讲是异常重要的。因此我们会在建立Metadb时建立很多备份。一旦Metadb被破坏,SUN Solstice DiskSuite软件可以自动将其恢复,如果Metadb损坏严重,我们也可以手动恢复Metadb,Metadb和其备份之间是实时备份的。
在物理磁盘中,Metadb通常是磁盘的一个专有分区,也就是说在安装操作系统的时候要预留出一个分区给Metadb。这个分区不能存在文件系统,一旦这个分区被做成Metadb,它也就不能再做其他应用。我们通常把磁盘的7号分区预留给Metadb,其大小通常为10兆到50兆。当然,大家也可以用别的分区代替7号分区预留给Metadb。
在实际应用中,我们通常把SUN Solstice DiskSuite软件下的所有硬盘都建立一个Metadb。每个硬盘上的Metadb分区又可以存在多个备份,所有这些备份之间都是实时同步的。这样,我们就基本可以保证Metadb不会被破坏。
Metadb必须在SUN Solstice DiskSuite软件使用之前建立,否则SUN Solstice DiskSuite软件不会生效。我们使用metadb命令,建立Metadevice State Database。下面是一个建立Metadevice State Database的实例:
# metadb -a -f -c 3 cxtxdxsx cytydysy
metadb为软件命令;-a参数为增加metadb;-f参数为建立一个初始的metadb;-c参数后边要加个数字,表示在一个物理分区里的 metadb备份的数目,此例中为每个分区里面3个备份;cxtxdxsx cytydysy 则是要建立metadb的物理分区,可以增加他的个数。注意,一旦metadb命令执行成功,预留分区上的其他数据将会被破坏。所以此条命令可以解释为:在cxtxdxsx cytydysy两个硬盘分区上建立初始的Metadb,每块硬盘分区上的备份数目为3。
下面介绍一个删除Metadb的实例:
# metadb –d cxtxdxsx
-d参数为删除metadb。这条命令可以解释为:在cxtxdxsx分区上删除原有的Metadb。我们要查看已经存在的Metadb可以用以下命令:
# metadb –I
最后,总结介绍一下metadb的参数:-a 参数意为增加一个metadb;-f 参数意为建立一个初始化的Metadb;-c n 其中n为数字,此参数意为在每一个分区中建立n个Metadb备份,如果不指定此参数,默认只建立一个Metadb;-d 参数意为删除一个Metadb;-I参数意为查询现有的Metadb的信息,包括备份个数,分布情况和Metadb的健康状况。
SUN Solstice DiskSuite软件的使用接口有三种:基于图形界面操作系统的GUI软件界面方式、命令行方式、修改/etc/opt/SUNWmd/md.tab文件方式。其中,命令行方式应用广泛,本文着重介绍命令行方式。
四. RAID 0
我们通常所说的RAID 0就是对硬盘进行串连,把两个或更多的硬盘或分区串接起来,当做一个逻辑设备使用。RAID 0增加了X倍的数据空间(X为磁盘个数),但是数据的危险性也同时增加到X倍。例如,我们做一个3块硬盘的RAID 0,那么数据空间就是原来的3倍,危险性也是原来的3倍,坏掉3块盘中任何一块硬盘,整个RAID的数据将会全部丢失。
SUN Solstice DiskSuite软件通过把物理硬盘上的逻辑分区设备转换成特殊的DiskSuite设备,通常我们将DiskSuite设备称为 “metadevice”,可以通过metainit命令把一个系统逻辑分区做成一个metadevice。metadevice的设备路径和系统原来的设备路径不同,块设备路径在/dev/md/dsk下,裸设备路径在/dev/md/rdsk下。
SUN Solstice DiskSuite软件下的RAID 0有两种方式:concatenation方式和 striping方式。它们为RAID 0提供了两种不同的结构,而且各有各的优、缺点。
1.concatenation方式
concatenation方式把多个逻辑硬盘或分区首尾相接做成一个metadevice。具体结构如下图:
由于数据是从第一个block顺序往下写的,因此,concatenation方式具有良好的可扩展性。也就是说,管理员可以根据文件系统的实时使用情况随时扩充metadevice的大小。然而,就是因为这种顺序写入的结构,使得concatenation方式有个致命的缺点,即IO性能降低。因为当数据写入的时候,只要第一块硬盘没有写满,在其后的硬盘上,都不会有任何的写入动作。这样,也就造成了后面硬盘IO带宽的浪费,从而使整个 concatenation方式的RAID 0 IO性能降低。下面是一个制作Concatenation方式RAID 0的实例:
# metainit d1 2 1 /dev/dsk/c0t0d0s1 1 /dev/dsk/c0t1d0s5
metainit为制作metadevice的命令;d1为metadevice的名字;metadevice的名字用dN表示,N可以从0到 127;2 为RAID 0的子盘个数,子盘实际上是以striping的方式做成的;1 为每个striping的方式做成的子盘中的分区个数,只有当这个数字为1的时候,我们做成的metadevice才是真正的concatenation 方式;/dev/dsk/c0t0d0s1 为要做成metadevice的物理分区。这条命令可以解释为,用metainit命令制作一个concatenation方式的包含两个子盘名为d1的 RAID 0,两个子盘分别为/dev/dsk/c0t0d0s1和/dev/dsk/c0t1d0s5。
2.striping方式
striping方式把多个逻辑硬盘以条带化的方式连接成一个metadevice。具体方式参照下图:
striping方式就是把硬盘分割成若干条带,数据写入的时候和concatenation方式不同。striping方式在写入数据的时候由于条带化的分割,对所有的磁盘都有写入操作,因此striping方式比concatenation方式有着良好的IO。但是,也由于这种条带结构, striping方式不可以在线扩充文件系统容量。下面是一个制作striping方式RAID 0的实例:
# metainit d2 1 2 /dev/dsk/c0t0d0s4 /dev/dsk/c0t0d0s5 –i 32k
metainit为制作metadevice的命令;d2为metadevice的名字;1 为RAID 0的子盘个数,只有当这个数字为1的时候,我们做成的RAID 0才是真正的striping方式;2 为striping方式做成的子盘中的分区个数;/dev/dsk/c0t0d0s4 为要做成metadevice的物理分区;-i 参数为每个条带的大小;-i 32k的意思是每个条带为32k字节。这条命令可以解释为,用metainit命令制作一个striping方式的包含两个子盘名为d2的RAID 0,两个子盘分别为/dev/dsk/ c0t0d0s4和/dev/dsk/ c0t0d0s4,每个条带大小为32k。
除了striping方式和concatenation方式,我们还可以通过metainit命令制作混合方式的RAID 0,不过很少有客户会要求把RAID 0制作成混合方式。 下面是一个制作混合RAID 0的实例:
#metainit d12 3 2 c0t1d0s1 c1t1d0s1 1 c0t2d0s3 3 c0t3d0s4 c1t3d0s4 c2t3d0s4
这条命令可以解释为,用metainit命令制作一个包含3个子盘名为d12的RAID 0,第一个子盘分别为c0t1d0s1和c1t1d0s1做成的striping,第二个子盘分别为c0t2d0s3,第三个子盘分别为c0t3d0s4 c1t3d0s4 c2t3d0s4做成的striping。
五. RAID 1
我们通常所说的RAID 1也就是对磁盘进行并联,把两个或更多的硬盘或分区并联起来当做一个逻辑设备使用,起到镜像的作用。RAID 1提供了数据最大限度的安全性,它的数据安全性是没有RAID 1时候的X倍(X为子镜像数目)。为了提高数据安全性RAID 1浪费了X-1倍的空间,磁盘利用率是没有RAID 1时候的1/X,IO性能也略有下降。具体结构参照下图:
在RAID 1中,两个子镜像的数据是实时同步的。也就是说,两个子镜像在同一时间进行相同的读写操作。RAID 1的方式被广泛的应用到系统盘的磁盘管理之中。就我个人的经验,超过半数的客户会要求管理员或者工程师对他的系统盘进行镜像操作,以便于当一块硬盘损坏之后,可以从另一块镜像盘引导操作系统。 下面是一个系统盘制作RAID 1完整的实例;
1.首先规划需要镜像的硬盘
d0 d10 d20 / s0
d1 d11 d21 /var s1
d2 d12 d22 swap s3
d3 d13 d23 /export/home s6
d0,d1,d2,d3为对应各个分区的metadevice名字;d10等是每个metadevice对应的子镜像。一般在做系统盘镜像前,大家最好规划一下各个metadevice的对应关系和子镜像名字以免混乱,同时也便于后期的维护。
2.硬盘分区同步
# prtvtoc /dev/rdsk/c0t0d0s2 | fmthard -s - /dev/rdsk/c0t1d0s2
由于系统盘镜象要求磁盘分区完全一致,两块硬盘分区大小也必须相同。如果两块物理硬盘大小不一致,在保持所有分区大小和顺序完全一致后,其他的空间将会浪费掉。上面的prtvtoc可以使硬盘c0t1d0的分区和硬盘c0t0d0的分区相同,c0t0d0上的数据不会被破坏,但是c0t1d0上的数据将会被完全毁灭。除此之外,也可以利用系统中的format命令手动修改磁盘分区至完全一致。
3.制作metadb
# metadb -a -f -c 3 c0t0d0s7 c1t0d0s7
在c0t0d0s7、c0t1d0s7两个硬盘分区上建立初始的metadb,每块硬盘分区上的备份数目为3。
4.作根分区的两路子镜像
# metainit -f d10 1 1 c0t0d0s0
把c0t0d0s0制成名为d10的子镜像,实际上这个子镜像就是一个只包含一个分区的RAID 0。由于c0t0d0s0是操作系统的跟盘,分区中存在文件系统,所以使用参数-f在文件系统的分区中强制执行metainit命令,即:
# metainit d20 1 1 c0t1d0s0
把c0t1d0s0制作成名为d20的子镜像。
5.制作根分区的镜像盘
# metainit d0 -m d10
制名为d0的镜像盘,其中一路子镜像为d10。使用metainit命令和-f参数制作镜像盘,所制的镜像盘必须包含一路的子镜像。这路镜像硬盘必须是镜像源盘所对应的分区,也就是说这路子镜像中必须包含文件系统。
6.备份vfstab
、 # cp /etc/vfstab /etc/vfstab.backup
由于要修改vfstab文件,所以事先要备份vfstab文件,以便修改失败时可以通过单用户或者光盘单用户方式恢复。
7.修改vfstab文件中关于根分区的项目
# metaroot d0
# lockfs
# reboot
把系统逻辑设备制作成metadevice后,需要修改/etc/vfstab文件,从而使下次重启之后操作系统可以用metadevice的路径挂接文件系统。通常情况要把类似于/dev/dsk/c0t0d0s0和/dev/rdsk/c0t0d0s0的行改为 /dev/md/dsk/c0t0d0s0和/dev/md/rdsk/c0t0d0s0。
metaroot命令可以自动修改vfstab文件的有关根分区的内容, vfstab文件中非根分区的内容要进行手动修改。修改时注意项目之间要用tab键格开,不能用空格。
当系统重新引导成功后,用df –k命令可以看出系统根分区的挂接目录已经由原来的c0t0d0s0改为存在单路子镜像的metadevice,这个metadevice的名字是d0。
8.制作其他分区的镜像盘
其它分区镜像盘的制作方法类似于根分区的制作方法。
# metainit -f d11 1 1 c0t0d0s1
制作c0t0d0硬盘上的1号分区的metadevice,名为d11。
# metainit d21 1 1 c0t1d0s1
制作c0t1d0硬盘上的1号分区的metadevice,名为d21。
# metainit d1 -m d11
制作/var分区镜像的metadevice,名为d1。其中,包含单路子镜像的d11。d11必是包含文件系统的源盘对应的分区。
# metainit -f d12 1 1 c0t0d0s3
制作c0t0d0硬盘上的3号分区的metadevice,名为d12。
# metainit d22 1 1 c0t1d0s3
制作c0t1d0硬盘上的3号分区的metadevice,名为d22。
# metainit d2 -m d12
制作swap分区镜像的metadevice,名为d2,其中包含单路子镜像的d12。d12必须是包含文件系统的源盘对应的分区。
# metainit -f d13 1 1 c0t0d0s6
制作c0t0d0硬盘上的6号分区的metadevice,名为d13。
# metainit d23 1 1 c0t1d0s6
制作c0t1d0硬盘上的1号分区的metadevice,名为d23。
# metainit d3 -m d13
制作/export/home分区镜像的metadevice, 名为d3,其中包含单路子镜像的d13。d13也必须是包含文件系统的源盘对应的分区。
我们可以使用metastat命令来查看SUN Solstice DiskSuite软件使用的状态。metastat命令可以查看到各个metadevice的属性——也就是它们的RAID级别,各个 metadevice之间的依存关系,各个metadevice和系统逻辑硬盘分区的关系,各个metadevice的健康状况以及同步时显示同步百分比。在实际应用中,metastat是一个非常有用的命令,系统管理员和工程师可以很容易地从metastat命令的输出中观察到各个 metadevice的结构和健康状况。我们还可以使用metaclear命令清除对硬盘的metadevice操作。这个命令可以理解为是 metainit的反向命令。例如:
# metaclear d0
9.将另外一路子镜像盘加入到镜像盘中
# metattach d0 d20
# metattach d1 d21
# metattach d2 d22
# metattach d3 d23
分别把子镜像d20、d21、d22、d23加入相应的镜像盘。我们使用metattach命令把另外一路子镜像添加到镜像盘中。metattach命令的格式是:metattach 镜像盘名子镜像盘名,这两个名字必须都是metadevice名称。同样的,我们还经常使用metadetach命令将一路子镜像盘从镜像盘中分离出去。 metadetach命令和metattach命令的作用是相反的。
在使用metattach命令把另外一路子镜像添加到镜像盘之后,两路子镜像会进行同步,这个同步的过程比较漫长。
#metastat | grep %
查看镜像同步百分比。可以使用此命令查看所有分区同步的百分比。
10.修改/etc/vfstab文件中关于其它分区的项目
metaroot命令只能修改vfstab文件中关于根分区的项目,非根分区的项目需要手动修改。当修改vfstab文件和同步进程全部完成之后,可以重新引导操作系统,至此,系统盘镜像制作完毕。
六.RAID 5
RAID 5是一种带有校验位的RAID形式。RAID 5的构成至少需要3块硬盘。它在把物理硬盘以类似于striping方式排列起来,并在其中加入校验位。在RAID 5中,校验位是以Z字形的顺序排列的。这样排列的好处是,一旦其中任何一块硬盘损坏,RAID 5都可以至少占有2个数据模块和一个校验模块中至少两项。而另外一项总可以根据已经存在的两项算出。也就是说RAID 5的空间可以增加到没有RAID 5之前的X-1倍,而同时又可以允许任何一块硬盘故障而不丢失数据(X为RAID 5中的物理硬盘个数)。RAID 5的具体结构可以参照下图。
可利用metainit命令制作RAID 5,下面是一个制作RAID 5的实例:
# metainit /dev/md/dsk/d12 –r /dev/dsk/c0t0d0s3 /dev/dsk/c0t0d0s4 /dev/dsk/c0t0d0s5 –i 8k
我们用-r参数代表制作RAID 5,在-r参数后边加上需要做成RAID5的子磁盘;用 –i 参数来指定RAID 5中每个条带的大小。这条命令可以解释为用/dev/dsk/c0t0d0s3、/dev/dsk/c0t0d0s4、 /dev/dsk/c0t0d0s5三个分区制作一个名为d12的RAID 5,每个条带的大小为8k。同样可以用metastat命令查看RAID 5 的各项信息。由于RAID 5有着很好的容量和容错的平衡性,所以在实际项目实施中,RAID 5被应用十分普遍。由于通常情况下RAID 5都是用来存储数据,所以系统管理员需要经常观察RAID 5的健康状况,从而确保数据安全。
========
以下是使用心得(在一台SunFire V880使用):
1 在第0个盘上安装Solaris系统,由于无知没有预留metadb的空间
2 通过format命令,在第1、2个盘上安装metadb分区(c1t1d0s7,c1t2d0s7),在1-5盘上联立33GB的数据分区(c1t1d0s1,c1t2d0s1,c1t3d0s1,c1t4d0s1,c1t5d0s1)
3 建立meta数据
#metadb -a -f -c 3 c1t1d0s7 c1t2d0s7
结果:
# metadb
flags first blk block count
a u 16 8192 /dev/dsk/c1t1d0s7
a u 8208 8192 /dev/dsk/c1t1d0s7
a u 16400 8192 /dev/dsk/c1t1d0s7
a u 16 8192 /dev/dsk/c1t2d0s7
a u 8208 8192 /dev/dsk/c1t2d0s7
a u 16400 8192 /dev/dsk/c1t2d0s7
4 建立RAID5
#metainit /dev/md/dsk/d12 -r /dev/dsk/c1t1d0s1 /dev/dsk/c1t2d0s1 \
/dev/dsk/c1t3d0s1 /dev/dsk/c1t4d0s1 /dev/dsk/c1t5d0s1 -i 8k
结果:
# metastat d12: RAID
状态: 初始化
正在进行初始化: 56.6% 完成
交错: 16 块
大小: 276821091 块 (131 GB)
原始设备:
大小: 276823296 块 (131 GB)
设备 引导块 Dbase 状态 Reloc 热备援
c1t1d0s1 3059 否 初始化 是
c1t2d0s1 3059 否 初始化 是
c1t3d0s1 3059 否 初始化 是
c1t4d0s1 3059 否 初始化 是
c1t5d0s1 3059 否 初始化 是
Device Relocation Information:
Device Reloc Device ID
c1t1d0 是 id1,ssd@n20000004cf7f1ce9
c1t2d0 是 id1,ssd@n20000004cf7f1757
c1t3d0 是 id1,ssd@n20000004cf7f178b
c1t4d0 是 id1,ssd@n2000002037f834fc
c1t5d0 是 id1,ssd@n20000004cf7f1a88
5 格式化
# newfs /dev/md/dsk/d12
newfs: 建构新的文件系统 /dev/md/rdsk/d12: (y/n)? y
警告:最后一个未分配柱面中的 2974 扇区
/dev/md/rdsk/d12: 在 45056 磁道上,48 扇区的 128 柱面的 276821090 扇区
135166.5MB 在 2816 柱面群组 (16 c/g, 48.00MB/g, 5824 i/g)
超块 (fsck -F ufs -o b=#) 备份在:
32, 98464, 196896, 295328, 393760, 492192, 590624, 689056, 787488, 885920,
初始化柱面组:
........................................................
最后 10 个柱面组的超级块备份位置:
275847968, 275946400, 276044832, 276143264, 276241696, 276340128, 276438560,
276536992, 276635424, 276733856
6 mount
# mount /dev/md/dsk/d12 /data/
在/etc/vfstab中添加
/dev/md/dsk/d12 /dev/md/dsk/d12 /data ufs 2 yes -