• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

Solaris10下面的ZFS如何用?

发布: 2007-6-08 22:43 | 作者: seanhe | 来源: | 查看: 25次 | 进入软件测试论坛讨论

领测软件测试网
有谁用过吗?

 ashchen 回复于:2005-05-23 21:35:29

看到好多s10 zfs的介绍,但是没有说怎么用这种文件系统

 alfee 回复于:2005-05-24 10:32:09
ZFS,作为Solaris 10的下一代文件存储解决方案,ZFS即Zettabyte File System,也叫动态文件系统Dynamic File System, 是第一个128位文件系统,无限容量、自优化、永远数据一致、管理简单:

- 支持POSIX文件系统,应用无需移植
- 无限容量,比32/64位文件系统大16  billion billion倍
- 对于应用来说,ZFS像一个标准的POSIX文件系统,无需移植。
- 对于系统管理员来说,ZFS提供存储池的模型,彻底消除了卷管理的概念,及其带来的硬盘分区的问题,可以使所有文件系统利用存储池的所有设备的访问带宽,100%在线维护。
- 所有操作采用copy-on-write方式,硬盘状态永远有效, 无需fsck。
- 所有数据块被64位校验, 防止数据瘫痪, 并且数据可做Raid,其中一个数据损坏可由另一数据修复。
- 提供无限份的快照,提供磁盘限额

1。检查预装OS,如无 ZFS包,则需安装软件包:

# pkginfo |grep SUNWzfs
# pkgadd -d .

The following packages are available:
  1  SUNWzfs     Zettabyte File System (ZFS)
                 (sparc) 11.10.0,REV=2004.12.26.02.38

Select package(s) you wish to process (or 'all' to process
all packages). (default: all) [?,??,q]:1
...
Installation of <SUNWzfs> was successful.

2。建立storage pool:

# zpool create -f testpool mirror /dev/dsk/c0t1d0s0 /dev/dsk/c0t1d0s1
# zpool df testpool
Pool                   size   used  avail capacity
-------------------- ------ ------ ------ --------
testpool               500M  56.0K   500M     1%
# zpool vdevs -v testpool
mirror1
  c0t1d0s0
  c0t1d0s1

3。建立文件系统:

# zfs create testpool/user1
# zfs create testpool/user2
# mkdir -p /disk/user1 /disk/user2
# zfs mount testpool/user1 /disk/user1
# zfs mount testpool/user2 /disk/user2
# df -h -F zfs
文件系统               大小   用了   可用  容量    挂接在
testpool/user1        484M  27K   484M    1%    /disk/user1
testpool/user2        484M  27K   484M    1%    /disk/user2

3。测试ZFS的读写变化:

# cp /etc/n* /disk/user1; cp /etc/m* /disk/user2
# df -h -F zfs
文件系统               大小   用了   可用  容量    挂接在
testpool/user1        484M  60K   484M    1%    /disk/user1
testpool/user2        484M 123K   484M    1%    /disk/user2

4。增加新的存储到storage pool,扩展ZFS:

# zpool add -f testpool mirror c0t1d0s3 c0t1d0s4
# zpool df testpool
Pool                   size   used  avail capacity
-------------------- ------ ------ ------ --------
testpool              1000M   303K  1000M     1%
s6a# zpool vdevs -v testpool
mmirror1
  c0t1d0s0
  c0t1d0s1
mirror2
  c0t1d0s3
  c0t1d0s4

# df -h -F zfs
文件系统               大小   用了   可用  容量    挂接在
testpool/user1       982M   60K   982M    1%    /disk/user1
testpool/user2       982M  123K   982M    1%    /disk/user2

5。破坏storage pool硬盘的数据,观察ZFS中数据不受影响:

# dd if=/dev/urandom of=/dev/rdsk/c0t1d0s1 count=10000
10000+0 记录进入
10000+0 记录调出

# df -h -F zfs
文件系统               大小   用了   可用  容量    挂接在
testpool/user1       982M   60K   982M    1%    /disk/user1
testpool/user2       982M  123K   982M    1%    /disk/user2

# diff /etc/nsswitch.conf /disk/user1/nsswitch.conf

总结:
文件系统管理,ZFS提供一个新的易于使用的自动管理的模型,降低复杂性,减少错误和实施的时间
数据安全和完整性, ZFS数据在任何时间都是一致的
对于资源利用,ZFS存储池可为多个文件系统共享
增加灵活性, ZFS扩展或缩小是动态的,无需系统管理员介入
降低费用,可免除额外的卷管理的许可费用






 ashchen 回复于:2005-05-24 11:16:26
跪谢。
但我的DVD安装盘里没找到SUNWzfs

 herowang79 回复于:2005-05-24 12:11:14
真是受益匪浅呀

 ywsun 回复于:2005-05-24 12:56:55
非常好!

 alfee 回复于:2005-05-24 14:37:46
ZFS 现在才是Beta,比Solaris 10 GA晚了,但可从 Sun要到分开的软件包单装,玩一玩,用一个硬盘试验的,体会一下觉得有点意思。

 ashchen 回复于:2005-05-24 14:55:45
感谢回复。
solaris10的几个新技术都不错,但都还没体验。
Dynamic Tracing & 
Solaris Grid Containers & 
Predictive Self-Healing & 
ZFS Technology &

 brucewoo 回复于:2005-05-24 15:40:48
长见识,谢谢分享

 alfee 回复于:2005-05-24 21:09:18
已开始琢磨Dtrace,  既然有人喜欢,就分享下对Dtrace的印象


DTrace即动态跟踪Dynamic Tracing,是Solaris 10的一个新功能,透过此一新功能,用户能够动态检测操作系统内核和用户进程,以更精确地掌握系统的资源使用状况,提高系统性能,减少支持成本,并进行有效的调节。

1997年,供职于Sun而现已是Solaris内核开发部高级工程师的Bryan Cantrill 与他的工作组在紧张地研究一个性能问题,它出现在刚刚提及的Sun E10000服务器。该服务器在运行基准测试时,速度突然在一段时间内奇怪地降低。工作组经过六天夜以继日的工作后,终于发现了问题的根本原因。某个“愚蠢之极”的配置错误将服务器配置成了路由器。

“我很受震惊,”Cantrill 说到, “这是任何一个客户都可能遇到的问题,但是他们可不敢奢望让内核开发人员为之夜以继日地工作,编写自定义代码以弄清楚问题。我们得找出一个更好的方法。” 
经过两年半的紧张开发,Cantrill和他的工作组终于研究出了这个更好的方法: Dtrace

DTrace是过去十年中在操作系统方面最具意义的革新之一:

Probe,Solaris中分散着30,000多的位置指针,也叫探测器probes,DTrace可激活成千上万的探测器,记录所关注的位置指定的数据,如命中,即可从该地址显示用户进程或系统内核的数据,从而了解系统,包括:
1。任何函数的参数
2。内核的任何全局变量
3。函数调用的时间(NS,十亿分之一秒,无任何其它PC/Unix在ns一级精度)
4。跟踪堆栈,包括指明函数调用的代码
5。函数调用时运行的进程
6。产生函数调用的线程

Probe于自定义D语言程序相关联,probe表示的格式为:

provider:module:function:name

1。显示当前动态系统中的动态Dtrace探针probe:

# dtrace -l |more
   ID   PROVIDER            MODULE                          FUNCTION NAME
    1     dtrace                                                     BEGIN
    2     dtrace                                                     END
    3     dtrace                                                     ERROR
    4     vminfo          fasttrap                   fasttrap_uwrite softlock
    5     vminfo          fasttrap                    fasttrap_uread softlock
    6        fbt              pool                         pool_open entry
    7        fbt              pool                         pool_open return
    8        fbt              pool                        pool_close entry
    9        fbt              pool                        pool_close return
   10        fbt              pool                        pool_ioctl entry
   11        fbt              pool                        pool_ioctl return
   12        fbt              pool                         pool_info entry
   13        fbt              pool                         pool_info return
。。。
43545        fbt              zmod                        z_strerror return
43546        fbt              zmod                      z_uncompress entry
43547        fbt              zmod                      z_uncompress return


即当前本人V210上有43547个probe。


2。体验 dtrace 与 Unix ps 命令:

如用ps看mozilla进程:

# ps -e |grep mozilla
  2386 pts/11      0:00 mozilla
  2436 pts/11     10:12 mozilla-

也可使用dtrace 通过probe探针看:

# dtrace -n 'syscall::exece:return { trace(execname);}'
dtrace: description 'syscall::exece:return ' matched 1 probe
CPU     ID                    FUNCTION:NAME
  0  11082                     exece:return   uname                            
  0  11082                     exece:return   uname                            
  0  11082                     exece:return   basename  
。。。
  0  11082                     exece:return   sed                              
  0  11082                     exece:return   mozilla-bin                      
  1  11082                     exece:return   csh                              
  1  11082                     exece:return   mozilla      
。。。

2。实际dtrace看的更细,

如用date显示系统时间,很快就结束了,无法跟踪,体验dtrace跟踪效果:

% date
2005年05月24日 星期二 20时39分03秒 CST

# dtrace -n 'syscall::exece: {trace(timestamp)}'
ddtrace: description 'syscall::exece: ' matched 2 probes
CPU     ID                    FUNCTION:NAME
  0  11081                      exece:entry   102890531281542
  0  11082                     exece:return   102890532181875

即可跟踪其在第102890531281542纳秒开始读取,第102890532181875返回结果。


3。体验Dtrace 对系统调用更多的观察:

如看机器忙闲状态,常用vmstat:

# vmstat 1
 kthr      memory            page            disk          faults      cpu
 r b w   swap  free  re  mf pi po fr de sr s0 s3 s1 s1   in   sy   cs us sy id
 0 0 0 5523680 1378352 14 48 84 1  0  0  1  0  1  0  0  341 2058  883  3  1 96
 0 0 0 5368296 1218688 0 23 15  0  0  0  0  0  0  0  0  336 2605  722 10  1 89
 
得知产生2605多系统调用,但无和简单查找哪个进程的问题呢,试用dtrace看:

# dtrace -n 'syscall::read:entry {@NUM[execname] = count();}'
ddtrace: description 'syscall::read:entry ' matched 1 probe
^C

  dtfile                                                            5
  sdtperfmeter                                                     12
  soffice.bin                                                      23
  dic                                                              23
  dtterm                                                           53
  mozilla-bin                                                     394
  Xsun                                                            545

显然发现CDE和Mozilla是产生大量系统调用的程序,看I/O分布也可:

如还是Mozilla:

# dtrace -n 'syscall::write:entry {@NUM[execname] = quantize(arg2);}'
...

  mozilla-bin                                       
           value  ------------- Distribution ------------- count    
               0 |                                         0        
               1 |@@@@@@@@@@@@@@@@@@@@@                    470      
               2 |                                         0        
               4 |                                         7        
               8 |                                         0        
              16 |                                         0        
              32 |                                         0        
              64 |                                         0        
             128 |                                         10       
             256 |@@@@@@@@                                 184      
             512 |@@@@@@                                   146      
            1024 |@@@                                      78       
            2048 |                                         8        
            4096 |                                         1        
            8192 |                                         0    
...

可观察到大量Mozilla产生的I/O在256-512字节间。


4。 想再仔细看程序内部情况?

truss不错:

# truss /usr/sfw/bin/mozilla
execve("/usr/bin/ksh", 0xFFBFF564, 0xFFBFF574)  argc = 3
resolvepath("/usr/bin/ksh", "/usr/bin/ksh", 1023) = 12
resolvepath("/usr/lib/ld.so.1", "/lib/ld.so.1", 1023) = 12
stat("/usr/bin/ksh", 0xFFBFF340)                = 0
open("/var/ld/ld.config", O_RDONLY)             Err#2 ENOENT
stat("/lib/libc.so.1", 0xFFBFEE70)              = 0
resolvepath("/lib/libc.so.1", "/lib/libc.so.1", 1023) = 14
open("/lib/libc.so.1", O_RDONLY)                = 3
mmap(0x00010000, 8192, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_ALIGN, 3, 。。。


试下dtrace:

# dtrace -n 'syscall::read:return /execname =="mozilla" /{ ustack();}'
dtrace: description 'syscall::read:return ' matched 1 probe
CPU     ID                    FUNCTION:NAME
  0  10984                      read:return 
              libc.so.1`_read+0x8
              ksh`io_readbuff+0x264
              ksh`0x245e4
              ksh`io_readc+0x2c
              ksh`0x29c54
              ksh`main+0xa30
              ksh`_start+0x108

  0  10984                      read:return 
              libc.so.1`_read+0x8
              ksh`io_readbuff+0x264
              ksh`0x245e4
              ksh`io_readc+0x2c
              ksh`0x28938
              ksh`0x28654
...

看到n多调用,开始和返回,够开发人员分析的。

总结,Dtrace功能强大,精度高,轻量,truss有时降低系统30%CPU利用率。但复杂,需对系统内核和应用熟悉,否则看不懂跟踪到的数据,估计以后CU该开Dtrace编程板块了。



Bryan Cantrill


 alfee 回复于:2005-05-24 21:25:36
谁对Predictive Self-Healing,可耐心看看:

在Solaris 10中,为构建和部署具有自我修复能力的系统和服务,Sun开发了一个新的体系结构,即预测性自我修复,使Sun系统和服务在出现软硬件故障时得到最大可用性,包括:

 Fault Management Architecture (FMA),即Solaris故障管理器,传统的错误信息被遥测事件所取代,自动诊断导致故障的原因,并启动自我修复活动,如向系统管理员传递消息,隔离或取消激活故障组件,及指导系统管理员进行修复

 Service Management Facility (Greenline,SMF),即Solaris服务管理器,依服务的相关性启动、停止、和管理服务,并兼容现有管理习惯,如启动脚本等
预测性自我修复技术可使服务与管理更加简便快捷,从而降低 管理成本。

fmd是以插件模块方式实现的,可被加载:

# ls /usr/lib/fm/fmd/plugins /usr/platform/sun4u/lib/fm/fmd/plugins
/usr/lib/fm/fmd/plugins:
cpumem-retire.conf  eft.conf            io-retire.conf      syslog-msgs.conf
cpumem-retire.so    eft.so              io-retire.so        syslog-msgs.so

/usr/platform/sun4u/lib/fm/fmd/plugins:
USII-io-diagnosis.conf  USII-io-diagnosis.so    cpumem-diagnosis.conf   cpumem-diagnosis.so

如显示加载的模块:

# fmadm config
MODULE                   VERSION STATUS  DESCRIPTION
cpumem-diagnosis         1.3     active  UltraSPARC-III CPU/Memory Diagnosis
cpumem-retire            1.0     active  CPU/Memory Retire Agent
eft                      1.12    active  eft diagnosis engine
fmd-self-diagnosis       1.0     active  Fault Manager Self-Diagnosis
io-retire                1.0     active  I/O Retire Agent
syslog-msgs              1.0     active  Syslog Messaging Agent

显示各模块的统计:
ev_recv - 模块接受的事件数
ev_acpt - 模块受理的事件数
wait - 等待检查的事件数
svc_t - 模块接收事件的平均时间(ms)
solve - 模块加载后处理的总数

# fmstat
module             ev_recv ev_acpt wait  svc_t  %w  %b  open solve  memsz  bufsz
cpumem-diagnosis         0       0  0.0    0.2   0   0     0     0   3.0K      0
cpumem-retire            0       0  0.0    0.2   0   0     0     0      0      0
eft                      0       0  0.0    0.2   0   0     0     0   552K      0
fmd-self-diagnosis       0       0  0.0    0.2   0   0     0     0      0      0
io-retire                0       0  0.0    0.2   0   0     0     0      0      0
syslog-msgs              0       0  0.0    0.2   0   0     0     0    32b      0

显示系统所有不完美的部件:
# fmadm faulty
   STATE RESOURCE / UUID
----------------------------------------------------------------------

本人机器上木有错误, 没办法在线搞坏内存,如有错误,修复据说可用:

# fmadm repair
...

(没试过)

Service Management Facility (SMF)提供统一的Solaris服务的配置基础架构,可精确模型化任何Solaris服务,和与Solaris及其它服务交互作用。
比起使用rc脚本,SMF可按照服务间的依靠关系并行启动服务,即使系统快速启动,和减少因服务相互依赖而产生的冲突。

Solaris用一个URI字符串,即Fault Managed Resource Identifier (FMRI )去标识SMF系统对象,SMF管理的服务所用的FMRI字符串为svc和lrc,如显示:

# svcs
legacy_run     17:16:59 lrc:/etc/rcS_d/S29wrsmcfg
legacy_run     17:17:19 lrc:/etc/rc2_d/S10lu
legacy_run     17:17:19 lrc:/etc/rc2_d/S20sysetup
...
online         17:15:25 svc:/system/svc/restarter:default
online         17:15:28 svc:/network/pfil:default
online         17:15:28 svc:/system/filesystem/root:default
online         17:15:29 svc:/network/loopback:default
...
online         17:17:38 svc:/system/zones:default
offline        17:15:27 svc:/application/print/ipp-listener:default
offline        17:17:14 svc:/application/print/rfc1179:default
maintenance    17:17:20 svc:/network/ssh:default

显示服务相互的依赖关系,如 nfs:

# svcs -d svc:/network/nfs/client:default
STATE          STIME    FMRI
disabled       17:15:26 svc:/network/rpc/keyserv:default
online         17:16:58 svc:/milestone/network:default
online         17:17:08 svc:/network/rpc/bind:default
online         17:17:09 svc:/milestone/name-services:default
online         17:17:10 svc:/network/nfs/cbd:default
online         17:17:15 svc:/network/rpc/gss:default
online         17:17:17 svc:/network/nfs/nlockmgr:default
online         17:17:18 svc:/network/nfs/mapid:default

显示服务的属性:

# svcprop svc:/network/nfs/client:default
general/enabled boolean false
general/entity_stability astring Unstable
general/single_instance boolean true
network/entities fmri svc:/milestone/network
network/grouping astring require_any
network/restart_on astring error
network/type astring service
nlockmgr/entities fmri svc:/network/nfs/nlockmgr
...
start/timeout_seconds count 3600
start/type astring method
stop/exec astring /lib/svc/method/nfs-client\ %m
stop/timeout_seconds count 60
...
restarter/state astring online
restarter/state_timestamp time 1105175836.097824000

启动和停止服务:
# svcadm enable system/sar

# svcs
STATE          STIME    FMRI
legacy_run     17:16:59 lrc:/etc/rcS_d/S29wrsmcfg
...
online         18:54:16 svc:/system/sar:default
...

# svcadm disable svc:/system/sar:default
# svcs -a
STATE          STIME    FMRI
legacy_run     17:16:59 lrc:/etc/rcS_d/S29wrsmcfg
...
disabled       18:57:22 svc:/system/sar:default
...

总结, 好像挺好,但有时真不停使唤,无法向以前改脚本似的控制系统,服务起不来时,欲库无泪,更怀疑生活的美好。

 alfee 回复于:2005-05-24 21:30:38
Solaris Containers/zone以前发过的,索性再放到一块,好找:

Solaris 可以通过 Solaris Containers/zone,支持在一个Solaris中创建N多独立的Solaris运行环境,即zone,虚拟化OS,可整合N多服务器于1个 Solaris中,但如何避免像 LPAR一样,因为一个OS实例shutdown或死掉了,自己带的CPU也不能给其他的OS实例使用,而可继续给剩下的OS实例用。

在下试了一下在 Solaris中设置公平共享调度(Fair Share Scheduing - FSS)于zone中:

1.激活Solaris Resource Manager的资源组功能:

#pooladm -e

2.创建CPU组cpu-set,0到2个CPU:
# poolcfg -dc 'create pset cpu-pset ( uint pset.min=0; uint pset.max=2)'

3.创建资源组rpool
# poolcfg -dc 'create pool rpool'

4.关联CPU组与资源组:
# poolcfg -dc 'associate pool rpool (pset cpu-pset)'

5.送一个真实的CPU到CPU组中,资源组及算建立:
# poolcfg -dc 'transfer to pset sun-pset (cpu 0)'


6.在Solaris中创建虚拟的OS实例shop:

# zonecfg -z shop //建立OS实例shop
zonecfg:shop> create
zonecfg:shop> set zonepath=/diskarray/shop //给实例分配文件系统
zonecfg:shop> set autoboot=true //在OS启动时自动启动
zonecfg:shop> set pool=sun-pool //给实例分配资源组
zonecfg:shop> add net
zonecfg:shop:net> set physical=ce0
zonecfg:shop:net> set address=10.1.1.17/24 //给实例分配IP
zonecfg:shop:net> end
zonecfg:shop> add rctl //分配FSS
zonecfg:shop:rctl> set name=zone.cpu-shares //动态分50%资源
zonecfg:shop:rctl> add value (priv=privileged,limit=50,action=none)
zonecfg:shop:rctl> end
zonecfg:shop> commit
zonecfg:shop> export
zonecfg:shop> exit
# zoneadm -z shop install
# zoneadm -z shop ready
# zoneadm -z shop boot
# zlogin -C shop
...
shop console login:

7.多建几个实例加载负载,可见各个zone中CPU公平共享CPU资源,如一些宕了,
剩下的动态共享全部CPU:
# mpstat 1
CPU minf mjf xcal intr ithr csw icsw migr smtx srw syscl usr sys wt idl
0 165 3 303 401 299 901 8 18 24 0 2246 5 5 0 89
0 8 0 202 406 305 34 0 0 0 0 61 0 0 0 100
0 225 1 202 404 302 72 19 4 1 0 388 96 3 0 1
0 775 0 238 409 308 105 32 9 0 0 1235 90 10 0 0

 ashchen 回复于:2005-05-24 21:57:38
sun的确有很多天才设计师啊。
如果能抛弃unix字符界面就完美了,但CDE,Gnome都不是我喜欢的。
solaris的服务管理转向数据库,文件系统引用pool的概念...
如果shell再升级一下概念比如命令调用器之类的,硬件管理再...
遐想中..呵呵

 songyupo 回复于:2005-05-24 23:15:17
真不错,就是看不懂

 孙轩 回复于:2005-05-25 02:55:23
so good

 kaka_sun 回复于:2005-05-25 09:13:11
这些都是用在Solaris10里吗?

 hospitaltnt2 回复于:2005-05-29 09:38:33
永远支持SUN,支持Solaris!!!

 飞天二狭 回复于:2005-05-29 18:02:57
收藏!

 junglelion 回复于:2005-06-07 18:06:26
ZFS的结构图不太对,没有体现传统的盘/卷/fs的三层结构和ZFS两层结构的差异。 ZFS的研发好像遇到不少问题,下一个版本的10估计也发布不了,要从头开始写。
建议SUN从veritas挖点核心人员,加快ZFS的进度,s10才够牛啊!

 rockamong 回复于:2005-06-08 10:08:32
好文,顶一下

 laosun 回复于:2005-09-07 17:46:48
ZFS 就别吹了,在ALPHA上的OS中,10年前就有ADVFS含这个功能了,还特稳定.早就不用UFS了.
系统软分区的概念也早有了,还能跑不同的OS.

 enjoy 回复于:2005-09-07 21:18:56
好!顶一下

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备2023014753号-2
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网