高速掌握sinox2014激动人心的ZFS和RAID技术
Sinox2014引入激动人心的zfs系统以及其支持的RAID,让用户高速打造便宜的高可靠性文件server。
1文件介绍
1
|
# zpool create tank mirror c1t0d0 c1t1d0 |
1
2
3
|
# zpool list NAME SIZE USED AVAIL CAP HEALTH ALTROOT tank 80G 137K 80G 0% ONLINE - |
2系统层次
1
|
# zfs create tank/home |
1
2
3
4
5
6
|
# zfs set mountpoint=/export/zfs tank/home # zfs set sharenfs=on tank/home # zfs set compression=on tank/home # zfs get compression tank/home NAME PROPERTY VALUE SOURCE tank /home compression on local |
1
2
|
# zfs create tank/home/bonwick # zfs create tank/home/billm |
1
|
# zfs set quota=10G tank/home/bonwick |
1
2
3
4
5
6
|
# zfs list NAME USED AVAIL REFER MOUNTPOINT tank 92.0K 67.0G 9.5K /tank tank /home 24.0K 67.0G 8K /export/zfs tank /home/billm 8K 67.0G 8K /export/zfs/billm tank /home/bonwick 8K 10.0G 8K /export/zfs/bonwick |
3相关差别
- 传统的文件系统被限制在单个磁盘设备之内,它们的尺寸是不能超越单个磁盘设备。
- 传统文件系统须要驻留于单独设备或者须要一个卷管理系统去使用一个以上的设备,而ZFS建立在虚拟的,被称为“zpools”的存储池之上 (存储池最早在AdvFS实现,而且加到后来的Btrfs)。[1]
- 过去的文件系统是被影射到一个物理存储单元,如:分区;全部的ZFS文件系统共享池内的可获得的存储空间。
- ZFS 文件系统不须要通过编辑/etc/vfstab 文件来维护。
4创建过程
1
|
# zpool create tank c1t0d0 c1t1d0 |
1
|
# zpool create tank mirror c1d0 c2d0 mirror c3d0 c4d0 |
1
|
# zpool create tank raidz c1t0d0 c2t0d0 c3t0d0 c4t0d0 /dev/dsk/c5t0d0 |
1
2
3
4
5
6
7
|
# zpool create tank c1t0d0 c1t1d0 invalid vdev specification use ’-f’ to override the following errors: /dev/dsk/c1t0d0s0 is currentlymounted on dev /dsk/c1t0d0s1 is currentlymounted on swap /dev/dsk/c1t1d0s0 is part of active ZFS pool ’zeepool’ Please see zpool(1M) |
1
2
3
4
|
Mounted file system The disk or one of its slices contains a file system that is currently mounted. To correct this error,use the umount command. File system in /etc/vfstab The disk contains a file system that is listed in the /etc/vfstab file,but the file system is not currently mounted. To correct this error,remove or comment out the line in the /etc/vfstab file. Dedicated dump device The disk is in use as the dedicated dump device for the system. To correct this error,use the dumpadm command. Part of a ZFS pool The disk or file is part of an active ZFS storage pool. To correct this error,use the zpool command to destroy the pool. |
5存储池管理设备
1
2
3
4
5
6
7
8
9
10
11
12
|
# zpool add -n zeepool mirror c3t1d0 c3t2d0 would update ’zeepool’ to the following configuration: zeepool mirror c1t0d0 c1t1d0 mirror c2t1d0 c2t2d0 mirror c3t1d0 c3t2d0 |
6查询存储池状态
1
2
3
4
5
6
7
8
9
10
11
12
13
|
# zpool list NAME SIZE USED AVAIL CAP HEALTH ALTROOT tank 80.0G 22.3G 47.7G 28% ONLINE - dozer 1.2T 384G 816G 32% ONLINE - NAME:The name of the pool. SIZE:The total size of the pool,equal to the sum
top -level virtual devices. USED:The amount of space allocated by all datasets and internal metadata. Note that this amount is different from the amount of space as reported at the file system level. AVAILABLE:The amount of unallocated space in
CAPACITY (CAP):The amount of space used,expressed as a percentage of total space. HEALTH:The current health status of the pool. ALTROOT:The alternate root of the pool, if any. |
1
2
3
|
# zpool list tank NAME SIZE USED AVAIL CAP HEALTH ALTROOT tank 80.0G 22.3G 47.7G 28% ONLINE - |
1
2
3
4
5
|
# zpool list -o name,size NAME SIZE tank 80.0G dozer 1.2T Scripting ZFS Storage Pool Output |
than by spaces. For example,to request a simple list of all pool names on the system:
1
2
3
4
5
6
7
|
# zpool list -Ho name tank dozer Here is another example: # zpool list -H -o name,size tank 80.0G dozer 1.2T |
1
2
3
4
5
6
|
# zpool iostat capacity operations bandwidth pool used avail read write read write ---------- ----- ----- ----- ----- ----- ----- tank 100G 20.0G 1.2M 102K 1.2M 3.45K dozer 12.3G 67.7G 132K 15.2K 32.1K 1.20K |
7管理方式
cache->HDD ZFS的三层结构。在FreeNAS中这点做得非常好,设置非常方便,有文章指出,4G系统内存下,网络訪问速度约为400Mbit/sec read + 300Mbit/sec write,而8G内存+64G SSD的缓存结构下,能够达到900Mbit/sec read + 600Mbit/sec write,跑满千兆网络,同一时候iSCSI性能飞升,生产环境中也应该这样搭建使用。命令也非常easy,仅仅须要在create的时候添加cache SSD0,也能够单独使用命令
8创新
Silent Data Corruption。而在ZFS中,对全部数据无论是用户数据还是文件系统自身的metadata数据都进行256位的Checksum(校验),当ZFS在提交数据时会进行校验,彻底杜绝这样的Silent Data Corruption情况。
在ZFS中则提出了相相应的ZFS Mirror和RAID-Z方式,它在负责读取数据的时候会自己主动和256位校验码进行校验,会主动发现这样的Silent Data Corruption,然后通过相应的Mirror硬盘或者通过RAID-Z阵列中其它硬盘得到正确的数据返回给上层应用,而且同一时候自己主动修复原硬盘的 Data Corruption 。
RAID技术在存储领域的有着很关键的数据,满足了不同的需求。RAID依照实现原理的不同分为不同的级别,不同的级别之间工作模式是有差别的。整个的 RAID结构是一些磁盘结构,通过对磁盘进行组合达到提高效率,降低错误的目的,不要由于这么多名词而被吓坏了,它们的原理实际上十分简单。以下我就给大家简介一下在ZFS中能够实现的三种RAID技术:RAID 0、RAID 1和RAID Z(RAID 5的改进)。RAID 0:无差错控制的带区组
要实现RAID0必需要有两个以上硬盘驱动器,RAID0实现了带区组,数据并非保存在一个硬盘上,而是分成数据块保存在不同驱动器上。RAID0分为串联卷和并两卷两种。
串联卷写数据是依照顺序写进不同的可用分片,当第一个分片写满时才写第二个分片,这样的存储方式仅仅是为我们提供了一种方便的管理结构,便于我们将多个硬盘组合起来,却没有实现更好的性能。
并联卷在写数据时,是将数据平均分布到各个分片上。由于将数据分布在不同驱动器上,所以数据吞吐率大大提高,驱动器的负载也比較平衡。假设刚好所须要的数据在不同的驱动器上效率最好。它不须要计算校验码,实现easy。它的缺点是它没有数据差错控制,假设一个驱动器中的数据错误发生,即使其他盘上的数据正确也无济于事了。不应该将它用于对数据稳定性要求高的场合。假设用户进行图象(包含动画)编辑和其他要求传输比較大的场合使用RAID0比較合适。同一时候,RAID0能够提高传输数据速率,比方所需读取的文件分布在两个硬盘上,这两个硬盘能够同一时候读取。那么原来读取相同文件的时间被缩短为1/2。在全部的级别中,RAID
0的速度是最快的。可是RAID 0没有冗余功能的,假设一个磁盘(物理)损坏,则全部的数据都无法使用。
在ZFS文件系统里,我们能够非常easy的实现这样的结构,在我们组建存储池的过程中,我们就能够建立我们须要的RAID结构的存储池,而在默认情况下,ZFS建立的就是RAID0结构的存储池。
比如:命令 Tonsen#zpool create mypool c0d0 c0d1 就是将c0d0和c0d1组成了一个RAID0结构的存储池,以后向这个池中添加数据时,它的数据分布就是採用平均分布的形式。
RAID 1:镜象结构
对于使用这样的RAID1结构的设备来说,RAID控制器必须能够同一时候对两个盘进行读操作和对两个镜象盘进行写操作,所以必须有两个驱动器。由于是镜象结构在一组盘出现故障时,能够使用镜象,提高系统的容错能力。它比較easy设计和实现。每读一次盘仅仅能读出一块数据,也就是说数据块传送速率与单独的盘的读取速率同样。由于RAID1的校验十分完备,因此对系统的处理能力有非常大的影响,通常的RAID功能由软件实现,而这样的实现方法在server负载比較重的时候会大大影响server效率。当您的系统须要极高的可靠性时,如进行数据统计,那么使用RAID1比較合适。并且RAID1技术支持“热替换”,即不断电的情况下对故障磁盘进行更换,更换完成仅仅要从镜像盘上恢复数据就可以。当主硬盘损坏时,镜像硬盘就能够取代主硬盘工作。镜像硬盘相当于一个备份盘,可想而知,这样的硬盘模式的安全性是非常高的,RAID
1的数据安全性在全部的RAID级别上来说是最好的。可是其磁盘的利用率却仅仅有50%,是全部RAID级别中最低的。
在ZFS文件系统里,我们能够通过在命令中添加mirror參数来构建镜像结构的存储池。
比如:命令 Tonsen#zpool create mypool mirror c0d0 c0d1 就是将c0d0和c0d1组成了一个RAID1结构的镜像存储池,以后向这个池中添加数据时,它的数据分布是会写到它全部的镜像盘上。
使用命令 Tonsen#zpool status 我们能够非常清楚的看到镜像结构,例如以下:
pool: mypool
state: ONLINE
scrub: none requested
config:
NAME STATE READ WRITE CKSUM
mypool ONLINE 0 0 0
mirror ONLINE 0 0 0
c0d0 ONLINE 0 0 0
c0d1 ONLINE 0 0 0
errors: No known data errors
我们甚至能够在ZFS中将RAID0和RAID1组合起来,形成一个综合的RAID结构。
比如:命令 Tonsen#zpool create mypool mirror c0d0 c0d1 mirror c1d0 c1d1 就是将c0d0、c0d1和c1d0、c1d1分别组成两个镜像,然后这两个镜像又构成一个RAID0的结构。这样的结构既提高了可靠性也提高了性能。
使用命令 Tonsen#zpool status 查看一下它的结构,例如以下:
pool: mypool
state: ONLINE
scrub: none requested
config:
NAME STATE READ WRITE CKSUM
mypool ONLINE 0 0 0
mirror ONLINE 0 0 0
c0d0 ONLINE 0 0 0
c0d1 ONLINE 0 0 0
mirror ONLINE 0 0 0
c1d0 ONLINE 0 0 0
c1d1 ONLINE 0 0 0
errors: No known data errors
RAID 5:分布式奇偶校验的独立磁盘结构
它的奇偶校验码存在于全部磁盘上,当中的p0代表第0带区的奇偶校验值,其他的意思也同样。RAID5的读出效率非常高,写入效率一般,块式的集体訪问效率不错。由于奇偶校验码在不同的磁盘上,所以提高了可靠性,同意单个磁盘出错。RAID 5也是以数据的校验位来保证数据的安全,但它不是以单独硬盘来存放数据的校验位,而是将数据段的校验位交互存放于各个硬盘上。这样,不论什么一个硬盘损坏,都能够依据其他硬盘上的校验位来重建损坏的数据。硬盘的利用率为n-1。可是它对传输数据的并行性解决不好,并且控制器的设计也相当困难。而对于RAID
5来说,大部分传输数据仅仅对一块磁盘操作,可进行并行操作。在RAID 5中有“写损失”,即每一次写操作,将产生四个实际的读/写操作,当中两次读旧的数据及奇偶信息,两次写新的数据及奇偶信息。
RAID Z:是RAID5的改进版本号,是solaris10里ZFS特有的一种Raid级别。
容错能力与RAID 5同样,可是对于RAID 5的写入漏洞问题提供了软件解决方式,使用动态的条带化。传统的RAID 5都存在着“写漏洞”,就是说假设RAID 5的stripe在正写数据时,假设这时候电源中断,那么奇偶校验数据将跟该部分数据不同步,因此前边的写无效;RAID-Z用了“variable- width RAID stripes”技术,因此全部的写都是full-stripe writes。之所以能实现这样的技术,就是由于ZFS集成了文件系统和设备管理,使得文件系统的元数据有足够的信息来控制“variable-width
RAID stripes”。理论上说,创建RAID-Z须要至少三块磁盘,这跟RAID 5差点儿相同。
比如:Tonsen#zpool create mypool raidz c0d0 c0d1 c1d0 c1d1 就是创建了一个由c0d0、c0d1、c1d0和c1d1四块硬盘组成的raidz结构。
使用命令 Tonsen#zpool status 来查看它的结构例如以下:
pool: mypool
state: ONLINE
scrub: none requested
config:
NAME STATE READ WRITE CKSUM
mypool ONLINE 0 0 0
raidz1 ONLINE 0 0 0
c0d0 ONLINE 0 0 0
c0d1 ONLINE 0 0 0
c1d0 ONLINE 0 0 0
c1d1 ONLINE 0 0 0
errors: No known data errors
在ZFS文件系统里,我们能够通过非常easy的方式,就能组织我们须要的各种RAID结构的存储单元,这为我们提供了异常强大的存储管理能力.
高速掌握sinox2014激动人心的ZFS和RAID技术的更多相关文章
- 图文并茂 RAID 技术全解 – RAID0、RAID1、RAID5、RAID10
RAID 技术相信大家都有接触过,尤其是服务器运维人员,RAID 概念很多,有时候会概念混淆.这篇文章为网络转载,写得相当不错,它对 RAID 技术的概念特征.基本原理.关键技术.各种等级和发展现状进 ...
- 【转】RAID 技术发展综述
原文地址:https://blog.csdn.net/liuaigui/article/details/4581970 摘要 :现代企业信息化水平不断提高,数据已经取代计算成为了信息计算的中心.这 ...
- 图文并茂 RAID 技术全解 – RAID0、RAID1、RAID5、RAID100
RAID 技术相信大家都有接触过,尤其是服务器运维人员,RAID 概念很多,有时候会概念混淆.这篇文章为网络转载,写得相当不错,它对 RAID 技术的概念特征.基本原理.关键技术.各种等级和发展现状进 ...
- RAID技术全解图解-RAID0、RAID1、RAID5、RAID100【转】
图文并茂 RAID 技术全解 – RAID0.RAID1.RAID5.RAID100…… RAID 技术相信大家都有接触过,尤其是服务器运维人员,RAID 概念很多,有时候会概念混淆.这篇文章为网络转 ...
- RAID技术超详细讲解
RAID 技术是一种多磁盘技术,面对数据的各方面有着两面性的影响,整体来说优点大于缺点的,下面我将详细介绍一下 RAID ,简称磁盘阵列技术. 一.RAID 概述 1988 年美国加州大学伯克利分校的 ...
- RAID 技术全解
图文并茂 RAID 技术全解 – RAID0.RAID1.RAID5.RAID100-- RAID 技术相信大家都有接触过,尤其是服务器运维人员,RAID 概念很多,有时候会概念混淆.这篇文章为网络转 ...
- RAID技术介绍
RAID技术介绍 简介 RAID是一个我们经常能见到的名词.但却因为很少能在实际环境中体验,所以很难对其原理 能有很清楚的认识和掌握.本文将对RAID技术进行介绍和总结,以期能尽量阐明其概念. RAI ...
- [转]RAID技术介绍和总结
以下内容转自伯乐在线:http://blog.jobbole.com/83808/ 原文出处: 涯余(@若东临于沧海) ---------------------------------------- ...
- RAID技术介绍和总结
简介 RAID是一个我们经常能见到的名词.但却因为很少能在实际环境中体验,所以很难对其原理 能有很清楚的认识和掌握.本文将对RAID技术进行介绍和总结,以期能尽量阐明其概念. RAID全称为独立磁盘冗 ...
随机推荐
- windows下VC界面 DIY系列1----写给想要写界面的C++程序猿的话
非常早就想写关于C++ UI开发的一系列博文,博客专栏刚审核通过,就立即開始刷博文,不能辜负自己的一番热血,我并非写界面的高手,仅仅想通过写博文提高我自己的技术积累,也顺便帮助大家解决界面开发的瓶颈. ...
- 在java代码中获取JVM参数(转)
近日关注性能调优,关注JMX,发现java.lang.management.*之强大.同时查阅了资料,整合一版关于JVM参数获取的note,仅供参考: MemoryMXBean memorymbean ...
- 看你的门-攻击服务器(4)-HTTP参数注入攻击
首先需要声明.这纯粹是没有远见和有点真才实学开发一个愚蠢的观点,只为web参考系统安全. 1.HTTP参数注入攻击 參数,被用做后端HTTP请求中的參数,这个时候就有可能会导致HTTP參数注入. 一个 ...
- CGI原理解析系列之中的一个----CGI怎样获取WEBserver数据
//gcc get_post.c -o get_post.ums; #include <stdio.h> #include <stdlib.h> #include <un ...
- ios save image to album
- (void)savePhotoToAlbum { ZoomScrollView *zoomScrollView = (ZoomScrollView*)[self.scrollView viewWi ...
- javascript小白学习指南0---1
引言: 做为一名程序猿.都是真心的想把自己的东西分享出来,供大家一起学习探讨.一起提高技能.一起涨工资,呵 这一系列的文章都是关于Javascript 基础的 当然文章其中穿插了些我自己的理解.希 ...
- ImageView建立selector在录音中遇到的小问题及解决方案
随着两张照片做了一个selector,采用ImageView的src要么background采用selector当点击,总不会出现点击效果,这就是为什么?经过一番折腾,后来发现"揭秘&quo ...
- 60分钟Python快速学习(转)
60分钟Python快速学习(给发哥一个交代) 阅读目录 第一步:开发环境搭建: 第一个Python功能:初识Python 02.Python中定义变量不需要数据类型 03.在Pythod中定义方法 ...
- Bind和Eval的区别详解
原文:Bind和Eval的区别详解 1.简单描述Eval和Bind的区别 绑定表达式 <%# Eval("字段名") %> <%# Bind("字段名& ...
- Cisco笔试——2014年
笔试时间:11月1日(周六)下午13:00-14:10 申请者考场地点:上海市徐汇区梅陇路130号华东理工大学徐汇校区第六教学楼六大 我报的思科的软件开发software,属于(常规) 一共70多道题 ...