http://blog.csdn.net/u013394982/article/details/18259015

DDP功能,即Dynamic Disk Pool,它是除了现有的RAID0,1,10,5,6这些传统RAID磁盘组以外的,非常有效的存储管理技术。它可以极大地简化对于闲置空间,闲置存储资源的管理,当然对于现有RAID组,它也简化了管理工作。
在讨论DDP功能之前,我们需要理解以下两个基本的概念:
1。D-Piece:D-Piece是在一块物理硬盘上开出的一段连续的,大小为512MB的存储空间。其中,每个D-Piece包含了4096个存储段,通过计算:512MB/4096=128kb,即每个存储段就是128kb大小。在一个虚拟的存储池中,一个存储的volume是由分布在不同的10个物理硬盘上的D-Piece所组成。
2。D-Stripe:它是由10个分布在不同的物理硬盘上的D-Piece所组成的,大小为4GB。在D-Stripe内,存储数据是以类似于RAID6的条带和校验方式存储的,也就是说如果10个D-Piece组成一个Stripe的话,那么Piece的组织方式就是传统的8+2方式,8个Piece(4GB大小)是存储数据的,1个Piece保存校验信息,最后一个Piece保存RAID定义的Q值。

从虚拟磁盘和LUN的维度来理解,DDP就是一个虚拟磁盘池,这个池是由很多个按照用户需求来定义生成的4GB大小的D-Stripe组成的。

如图所示,如果一个DDP包含了12块物理硬盘,其中的任意10块物理盘中的D-Piece可以组成一个D-Stripe用于存储数据。这里需要注意的一点是D-Piece和D-Stripe是近似平均分配在12块硬盘上的,但是视实际使用情况和数据存储量来看,有可能会有一些出入。当系统管理员完成了对于DDP的存储的配置之后,就像传统的RAID6配置一样,存储就会创建相应的D-Piece和D-Stripe。这时候在应用侧,就会看见一个虚拟磁盘被创建了。这个虚拟磁盘的容量是由N个D-Stripe所组成,例如我需要一个大小为32GB的空间,那么包含在这个虚拟磁盘中的D-Stripe数量为 N(D-Stripe)= 定义空间大小/4GB。
例如:一个容量为500GB的虚拟磁盘,会包含500GB/4GB个,即125个D-Stripe,对于一个虚拟磁盘,数据的占用空间会从D-Piece的最低的LBA地址开始使用。

一个DDP磁盘池中,可以包含多个虚拟磁盘,当然在一套存储系统,也允许包含多个DDP磁盘池。对于系统管理员的需求,也可以把传统的RAID磁盘组和DDP磁盘池二者结合来使用。

和传统的RAID组类似,DDP可以通过DCE特性(动态扩容),动态增加硬盘的方式来对存储系统进行扩容,目前可以支持的最大动态扩容量为12块物理硬盘。当DCE功能初始化之后,保存在现有的D-Piece上的数据会有一小部分被迁移到新扩容的磁盘上来。

DDP的另一个优势是区别于传统意义上的RAID原理,它并没有专门指定的热备磁盘,这样当某一块硬盘存在失效风险的时候,它能提供一个所谓的“集成保护能力”这样不仅可以简化存储设备的管理,也能极大地提高重建的性能,节省时间。当DDP中的磁盘有失效的状态发生,类似于RAID6的重建机制是保存在D-Stripe中的,在重建的过程中,它可以保证在任意一块物理磁盘中不会保存同一个D-Stripe上的两个D-Piece。独立的D-Piece机制可以最小化LBA地址范围。

如图所示:6号盘失效,随后,之前保留在这块物理硬盘上的D-Piece数据会在其他的可用硬盘上进行重建。因为是由多块盘在进行写入操作,所以实际的重建时间要大大小于传统的RAID重建时间。当有多块盘失效之后,系统会优先重建那些包含丢失了两个D-Piece的D-Stripe所在的硬盘,以减少数据丢失的风险。当关键数据被重建之后,系统会继续将其他失效的数据进行修复,保证数据的持续可用。从控制器的资源分配角度来看,DDP提供了两种用户可以自由定义的重建优先级配置:

1。降级重建,只有失去一个D-Piece数据的物理硬盘会重建,失去两个的会暂时不可用。这个优先级默认为“高”
2。关键重建,重建失去两个D-Piece数据的物理硬盘,这个优先级默认为“最高”对于超大规模的磁盘池,如果有两块物理硬盘失效,这种情况发生的概率会随着磁盘数量的增大而降低,如之前讨论的内容,按照优先级的配置,关键重建仅仅会持续很小的一个时间窗口,使得数据可用,然后会非常快的进行降级重建,也就是说超大规模的磁盘池场景下,DDP可以保证一定的容错性。

例如,假设我们有一个192块物理硬盘组成的存储系统,当有两块物理硬盘失效之后,在1分钟之内,即可完成关键重建工作,在这1分钟之后,系统都是可以提供容错的工作状态的。从数学角度来看,这样规模的一个存储系统,仅仅有5.2%的概率会发生降级重建,关键重建场景发生的概率仅仅有0.52%,这意味着仅仅有5.2GB的数据会在关键场景下进行重建。

从图中可以看到,对比传统重建方式的持续时间的对比。对比传统的RAID组的工作模式,DDP大大简化了管理工作,从根本上说,对于存储系统的规划,系统管理员仅仅需要做一件事情,就是决定存储系统的硬盘数量。
当然,DDP功能也有一些限制,例如:
1。在虚拟磁盘中的数据段大小是128kb,这是固定的,不可以修改。
2。不支持动态的RAID组迁移功能
3。预读的冗余校验功能是不能基于虚拟磁盘来使用的。
4。DDP的最大容量是64TB
5。不支持SSD硬盘

存储设备的DDP功能详解的更多相关文章

  1. MySQL日志功能详解

    MySQL日志功能详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.查询日志 它是用来保存所有跟查询相关的日志,这种日志类型默认是关闭状态的,因为MySQL的用户有很多,如果 ...

  2. 【转】 /etc/fstab功能详解

    [转] /etc/fstab功能详解 最近去客户现场时,遇到 了一个关于挂载文件/etc/fstab文件的问题,就写了一下/etc/fstab文件的作用一个文件中各个参数的含义.供大家参考有不正确的地 ...

  3. .NET ORM框架 SqlSuagr4.0 功能详解与实践【开源】

    SqlSugar 4.0 ORM框架的优势 为了未来能够更好的支持多库分布式的存储,并行计算等功能,将SqlSugar3.x全部重写,现有的架构可以轻松扩展多库. 源码下载: https://gith ...

  4. Fiddler抓取https请求 & Fiddler抓包工具常用功能详解

    Fiddler抓取https请求 & Fiddler抓包工具常用功能详解   先来看一个小故事: 小T在测试APP时,打开某个页面展示异常,于是就跑到客户端开发小A那里说:“你这个页面做的有问 ...

  5. Linux命令-自动挂载文件/etc/fstab功能详解

    Linux命令-自动挂载文件etcfstab功能详解 一./etc/fstab文件的作用 磁盘被手动挂载之后都必须把挂载信息写入/etc/fstab这个文件中,否则下次开机启动时仍然需要重新挂载. 系 ...

  6. python通过socket实现多个连接并实现ssh功能详解

    python通过socket实现多个连接并实现ssh功能详解 一.前言 上一篇中我们已经知道了客户端通过socket来连接服务端,进行了一次数据传输,那如何实现客户端多次发生数据?而服务端接受多个客户 ...

  7. 【转载】Linux命令-自动挂载文件/etc/fstab功能详解[转]

    博客园 首页 新随笔 联系 订阅 管理 随笔 - 322  文章 - 0  评论 - 19 Linux命令-自动挂载文件/etc/fstab功能详解[转]     一./etc/fstab文件的作用 ...

  8. iOS之UI--使用SWRevealViewController实现侧边菜单功能详解实例

    使用SWRevealViewController实现侧边菜单功能详解 下面通过两种方法详解SWRevealViewController实现侧边菜单功能: 1.使用StoryBoard实现   2.纯代 ...

  9. SVN功能详解

    SVN功能详解   TortoiseSVN是windows下其中一个非常优秀的SVN客户端工具.通过使用它,我们可以可视化的管理我们的版本库.不过由于它只是一个客户端,所以它不能对版本库进行权限管理. ...

随机推荐

  1. MAC中安卓开发环境的下载

    今天终于为我的Macbook Pro Retina搭建好了Android开发环境,几经折磨,差点放弃了: 总结如下:1.最好选择ADT Bundle,这里面已经集成好了Eclipse.ADT.Andr ...

  2. Java中生产者与消费者模式

    生产者消费者模式 首先来了解什么是生产者消费者模式.该模式也称有限缓冲问题(英语:Bounded-buffer problem),是一个多线程同步问题的经典案例.该问题描述了两个共享固定大小缓冲区的线 ...

  3. Eclipse Error: The refactoring does not change any source code

    最近在做android项目的过程中遇到这样一个问题,新增一个activity的时候添加不成,eclipse提示The refactoring does not change any source co ...

  4. Windows-CreateProcess-lpsiStartInfo-STARTUPINFO-dwFlags

    dwFlags: 简单地告诉CreateProcess函数结构中哪些成员有效: STARTF_USESIZE:使用dwXSize和dwYSize STARTF_USESHOWWINDOWS: wSho ...

  5. HDU 5499:SDOI

    SDOI Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total Sub ...

  6. jQuery prop() 方法

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  7. POI解析excel格式的文件(xls,xlsx)

    先贴出所需的jar包: 1.poi-3.17-beta1.jar 2.poi-ooxml-3.17-beta1.jar 3.poi-ooxml-schemas-3.17-beta1.jar 4.com ...

  8. pandas Timestamp的用法

    (Timestamp('2018-08-01 00:00:00'), <class 'pandas._libs.tslibs.timestamps.Timestamp'>) 注意这里面的T ...

  9. adb学习笔记

    一.adb实现原理 adb的目的是想仅在PC端执行adb操作来获取手机里面的文件或向手机内部发送文件.这是通过Ubuntu中adb操作作为客户端与Ubuntu中运行的adb service交互,Ubu ...

  10. ORACLE与SQL SERVER语法区别

    一.数据类型 ORACLE与SQL SERVER在数据类型的对比如下: SQL SERVER ORACLE 数字类型 DECIMAL[(P[, S])] NUMBER[(P[, S])] NUMERI ...