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