无法递归的五点半

for_each(day.begin(),day.end(),bind2nd(Add(),me))

导航

<2024年11月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

统计

常用链接

留言簿(4)

随笔分类

随笔档案

文章分类

相册

收藏夹

C++

Unix/Linux

个人主页

其他

软件工程

网络管理

综合

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜

#

Solaris使用点滴

偶尔会用用Solaris,一些点滴记录如下:
  • 关于环境变量
Solaris没有/etc/ld.so.conf,需要添加库目录可以使用"crle" (Configure Runtime Linker Environment)。如:
crle -u -l /usr/local/lib
  • 软件的安装
通常使用pkginfo、pkgadd和pkgrm
pkginfo查看软件包
查看当前操作系统已经安装的软件包。
# pkginfo | more
查看一个软件包。
# pkginfo -d /cdrom/cdrom0/s0/Solaris_2.7/Product -l SUNWaudio
pkgrm 删除软件包
# pkgrm SUNWaudio
 
pkgadd添加软件包
命令格式:
pkgadd [ -d [device | pathname ]] pkg_name
# pkgadd -d /cdrom/cdrom0/s0/Solaris_2.7/Product SUNWaudio
# pkgadd -d ./libgcc-3.3-sol10-sparc-local

posted @ 2007-03-15 21:18 五点半 阅读(380) | 评论 (0)编辑 收藏

JavaScript调试器

    最近作一个项目,C++的代码不多,B/S结构。因为使用了Ajax,有大量的JavaScript代码。临时学用JS。Web的东西就是不好调试,JS也是这样。昨天突然发现一个Firefox的插件,可以调试JS代码,做得很好(这是地址:https://addons.mozilla.org/firefox/216/)。可能很多人在用这个了,JS高手不要嘲笑哦:)

posted @ 2006-11-16 21:47 五点半 阅读(850) | 评论 (2)编辑 收藏

在Debian下安装Oracle 10 XE

现在安装Oracle已经很简单了,看来有官方的支持。记录下备忘:
  1. 在source.list中加入deb http://oss.oracle.com/debian/ unstable main non-free
  2. aptitude update
  3. aptitude oracle-xe-client oracle-xe-universal  包有点大200多兆
  4. 通过/etc/init.d/oracle-xe configure配置基本参数
  5. 通过http://127.0.0.1:8080/apex/进行管理
Oracle 10 XE 需要1G的交换分区,如果没有可以建一个交换文件
  1. dd if=/dev/zero of=/mnt/swapfile bs=1024 count=1048576
  2. mkswap /mnt/swapfile
  3. swapon /mnt/swapfile
参考了一下:疯狂小强 (没有使用aptitude,不过很详细)

posted @ 2006-11-03 23:17 五点半 阅读(678) | 评论 (0)编辑 收藏

指数函数的模板元编程

在程序中需要将一个正整数(如123)转换成一个固定长的串(如8位,00000123)。算法有很多了。我采用可以这个方法123+10^8=100000123,将100000123转换成串"100000123",然后返回这个串的子串substr(1)。在这个方法当中会涉及指数的运算,C++只能作浮点数的指数运算,为提高效率使用模板元编程,将这一过程提前到编译期完成。程序很简单,大家看看就明白了:

    template
<int d,int pow>
    
struct Power
    {
        
static const int value = Power<d,pow-1>::value * d;
    };

    template
<int d>
    
struct Power<d,0>
    {
        
static const int value = 1;
    };

    
/**
     * 该函数将一个整数转换成固定长度的0不齐的串,如12->"00012"
     
*/
    template
<int len>
    std::
string int_cast_zerostr(const int i)
    {

        std::
string result  = boost::lexical_cast<std::string>(Power<10,len>::value + i);
        
return result.substr(1);
    }

如果要将12转换成"00000012",可使用函数int_cast_zerostr<8>(12)。

谢谢小明的提醒,想起Boost有个format库,所以可以这样
    boost::format f("%08d");
    std::
string s = (f%12).str();
    std::cout
<<s; //s = "00000012"
不过个人更喜欢int_cast_zerostr<8>(12)方式。呵呵!

posted @ 2006-10-24 11:09 五点半 阅读(1114) | 评论 (1)编辑 收藏

将map中的数据导入到vector中

要将一个map<T1,T2>中的数据导入到一个vector<T2>中,可以考虑使用标准库中的transform,但map<T1,T2>::iterator与vector<T2>::iterator是不匹配的,受《Effective STL》第20条启发写个map2vector的functor,可以解决这个问题(不过这个还不算真正的meta-programming):
#include <map>
#include 
<vector>
#include 
<iostream>
#include 
<string>
#include 
<iterator>

using namespace std;

struct map2vector
{
    template
<typename T>
    
const typename T::second_type& operator()(const T& p)
        {
            
return p.second;
        }
};


int main()
{
    map
<string,string> m;
    vector
<string> v;

    m[
"key1"]="sdf111";
    m[
"k2"]="sdf11";
    m[
"k3"]="sdf2";

    transform(m.begin(),m.end(),back_inserter(v),map2vector());
    copy(v.begin(),v.end(),ostream_iterator
<string>(cout,"\n"));
    return 0;
}


posted @ 2006-10-23 21:57 五点半 阅读(1807) | 评论 (2)编辑 收藏

读《UNIX编程艺术》

    对每一个希望设计软件的人员,都有必要阅读这本书。对那些在Windows下开发的程序员,理曼德(Raymond)的话可能刺耳,赖着性子吧,中国的程序员有哪一位不是从DOS、Windows下转过来的呢?
   想当初DEC解体微软挖走了DEC公司那一帮操作系统大牛,这就有了WindowNT,有了Windows虚拟内存,直到现在WindowsXP也和NT 一脉相承。很少有人批评Windows的内核和API(Windows是符合POSIX)。但在软件用户接口设计,UNIX与Windows的一开始就沿 着两个截然相反的方向发展。UNIX崇尚命令行,崇尚对自己的操作负责,崇尚有计划、有条理的工作。Windows却认为用户可能粗心,用户可能根本就不 喜欢计算机,仅仅不得不学习计算机(多痛苦啊),好了,Windows告诉你“不用记什么命令,用鼠标点就行了”。一句话Windows统治了桌面。
   我到觉得将这本书作为对Windows设计的反思可能更好,一个UNIX程序员很有可能已经按书中所讲在设计软件了,比如他可能将配置文件放在/etc/ 下,并不是因为他很懂UNIX编程的艺术,他仅仅在按惯例做事。而Windows程序员,同样是按惯例,他将配置放在了注册表中,作为Windows程序 员他不是不知道注册表会膨胀,但他能打破惯例,在C盘建一个dot文件?
   比打口水战更有意义可能是UNIX\Windows的相互学习吧,有容乃大。如果说UNIX\Windows的设计理念完全不同,无法融合,学习两种不同的思维方式对我们来说也不是个坏事,你说呢?
   本文转自我的豆瓣书评:)

posted @ 2006-07-03 17:45 五点半 阅读(612) | 评论 (0)编辑 收藏

SUN Solstice DiskSuite 磁盘管理软件的初步使用[转]

一. SUN Solstice DiskSuite
        SUN 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     -



posted @ 2006-06-19 23:42 五点半 阅读(1137) | 评论 (0)编辑 收藏

试用Google SpreadSheets

    昨天注册了一下,今天收到google的邀请,试用了一把。感觉不错,可以编辑电子表格,可以打开本地的Excel文件,至于功能,对于我已经足够了。但速度很慢,据说WikiCalc可以离线操作。
    一点感想,计算机行业中有时创意比技术还重要,看这一批一批被应试教育抹杀了思想的孩子长大后还有大胆的创意吗?

posted @ 2006-06-11 10:33 五点半 阅读(435) | 评论 (1)编辑 收藏

使用Lua

    一直以为,只有游戏开发才会使用Lua。昨天认真的看了一天《Programming in Lua》才知道自己完全错了。Lua真是非常强大的动态语言。
    初步决定在现在进行的项目中使用Lua作为配置管理(本来是使用类似ini的配置文件,不要说我太土哦)。但现有的封装Lua API的C++库好象都不是太好用,决定自己写一个简单的,先用着。

posted @ 2006-06-11 09:34 五点半 阅读(528) | 评论 (0)编辑 收藏

读《编程卓越之道(第一卷 深入理解计算机)》

    星期天,买了这本书。其实有一本国外教材就叫《深入理解计算机》,厚厚的、很经典、很实用。这本是《编程卓越之道》的第一卷,作者就是那个写《汇编程序的艺术》的Randall Hyde。这本书可以看成是厚《深入理解计算机》的简略本,把程序中最重要的计算机系统知识为读者疏离了一遍。书中没有太多的理论,读起来很轻松愉快,但我可以保证,读者的计算机系统知识再全面也能有一些收获,可能是不知道的、可能是以前没有注意到的、也可能是知道又遗忘的。

posted @ 2006-06-07 11:26 五点半 阅读(1798) | 评论 (1)编辑 收藏

仅列出标题
共4页: 1 2 3 4