此章节是重点之重点。先讲基本概念。WAFL的全称是Write Anywhere File Layout. 从类似于其它UNIX的文件系统比如Berkeley Fast File System (FFS) 和 TransArc Episode file system. 它的核心理念是"文件任意地方写"。先说普通的文件系统,是由inode和data组成,inode处于硬盘的固定位置(一般是初始位置),OS/磁头默认就已经知道了inode的地址,inode可以理解成文件的目录,系统启动后读inode文件便知道此文件系统包含有哪些文件并且知道这些文件所在的地址。而在WAFL里,inode大概分为两层:root inode和inode.  root inode是处于硬盘的固定位置。root inode很小,只有128 Bytes. root inode指向inode的地址。inode是可以放在任何地方的。一个inode文件一般只有4KB. 其实在inode这一层里面是有很多链式的inode的。当一个inode文件不够大,放不下一个大data文件的所有地址时,需要有多个inode文件来为此大data文件"服务",因此WAFL便用上层inode指向下层多个inode的方式。如下图:
当文件很小的时候,小到小于4KB时,此文件可直接放于inode里面。节省空间。
思考: 其实微软件用的inode只包含了文件第一个数据块的地址,然后第一个数据块又包含第二个数据块的地块。因此inode不需要那么大,只需要正常大小的inode即可。为何WAFL不用此方法的?这样便可节省inode空间啊...难道因为这是微软的专利?呵呵
NVRAM. 其实准确来说,不能称之为NVRAM,而应该称之为带了电池的RAM。因为NVRAM是不需要供电就可保存数据的。而RAM是要一直供电才能保存数据。所以NetApp里的"NVRAM"其实是有电池供应的RAM。以下就把NetApp "NVRAM"称为NVRAM. 从物理上看,NVRAM有两种结构:第一种是跟RAM共享DIMM, 即一条内存里把一部分空间作为NVRAM,且这部分空间用电池"保护"起来,成为
NVRAM;第二种是NVRAM就是一个卡,跟RAM在物理上没联系,虽然它们的样子都是内存条. 在低端的NetApp产品中多用第一种,在高端的NetApp产品中多用第二种。
RAM存放data缓存,而NVRAM则放操作log. 类似于数据库的archive log.
思考: NVRAM是有电池来保护,但RAM呢?RAM里装的可是data缓存啊。它掉电了可就丢失数据了啊。咨询了很多人,都得不到明确且detail的答复。。。
RAID. NetApp只用RAID 4和RAID DP. 我们知道RAID 4在业界很不受重用,为何?因为它不能支持并发随机IO写!又是为何呢?
RAID 3是利用每一条带的长度很短例如一个扇区512bit来实现性能的提升。它用大文件的支持很有效。但对随机IO读写的时候爱莫能助,因为每一个随机IO读写都要让RAID里的所有硬盘同时工作,它做不到让一个硬盘读写一个IO而另一个硬盘读写另一个IO。所以就有了RAID 4. RAID 4只是改进了RAID 3里的条带长度,比如把512bit改为4KB. 想通过如此来支持随机IO小文件(小于4KB)的读写. 事实上RAID 4是能够支持随机IO读的,但是写的时候就碰到一难题。当一个小于4KB的小文件写的时候需要改写两个盘的数据:Data盘和校验盘,而RAID 4是把其它一个硬盘作为校验盘的,所以当有两个小文件想写的时候,校验盘同一时间只能做一个数据的写了。这样,校验盘便成了瓶颈。这也是为什么后来有RAID 5的原因。RAID 5把校验盘通过条带化分配给了所有硬盘,提高的并发的几率!所以现在RAID 3和RAID 5都有人用,但RAID 4就不受待见,没人爱用了。
而NetApp到底是如何使用了RAID 4的呢? RAID 4只有一种情况可以并发IO写,那就是当要写的两个或多个小文件刚好处于同一条带时!此时,N个数据盘上的同一条带需要改写数据,并且校验盘的同一条带也要改写。WAFL便是通过软件层来让这一情况发生。WAFL通过编程来让一段时间内要写的数据尽量处于同一条带,当然,数据大于一个条带时那就处于相邻的条带了。RAID 4便是如此,WAFL巧妙地利用了它,使它的性能达到最优化。
而RAID DP(Double Parity),其实很类似于RAID 6. 它们的目的都是通过两个校验盘来防止两个数据盘同时掉线而掉数据。只是它们算法不一样。RAID 6用的是数据乘以一个系数后再异或来产生第二个校验数据;而RAID DP是不同条带之间做异或来产生第二个校验数据, 即两个校验盘中一个是横的条带的校验,另一个是斜的条带的校验。在此就不作评细介绍了,RAID的内容有时间再用另一篇幅介绍。
SnapShot. 普遍来说,SnapShot就是某一时刻把当前的数据做一个照相,快照,把它“记”下来,等以后可以把做快照时那一刻的数据翻出来使用。各厂商实现它的时候的方法论是一致的,但方法是不同的。方法论都是把inode复制下来。因为inode文件非常小,对它的copy可在瞬间完成。但在真正实现的时候就各不一样了。主要在三个阶段: 开始snapshot时,对还在内存里的缓存怎么办?然后具体copy inode的哪些信息或者说copy哪些inode? 最后在一次snapshot完成后,怎么保护被snapshot了的数据?即如何保证snapshot之后有数据改写的时候不改变snapshot了的数据?
首先看系统如何保护还在内存中缓存的数据。这些数据是要被snapshot的,但它还没被写进磁盘,且在磁盘的inode里也没有信息。所以系统要对它进行snapshot操作。每个厂商都有不同实现,我不清楚其它厂商是如何做的。而NetApp是把内存的数据分配空间,更新inode从内存到硬盘;更新块图文件;更新磁盘缓存(注意,是硬盘上的缓存。这点也要保护)
其次,其它厂商可能是复制inode文件来作为snapshot, 而NetApp只是复制root inode来作为snapshot.
最后,NetApp是用redirect . write方式来保护snapshot数据(红皮书上写的Write . Copy是不确切的。本质上是redirect . write)。即,snapshot完成后,如果有数据要删除,则只是删除root inode、inode里相应的信息,不删除真正的data;而如果有数据要被改写,则不改变原有data,而是把改写后的数据再完整地写在其它地方,即inode指向其它地址,不占用原有的地址。
思考: 硬盘里打开缓存?那安全性可就非常不高啊。因为掉电的话没法对硬盘的缓存进行保护啊!!
上面三个便是基本概念了,以后我将转载相关文章作详细介绍。本人只写了对这些技术的理解。接下来将会对这几个技术作为整体的思考。因为他们之间关联太紧密了。
WAFL的特性:
1. root inode处于硬盘固定位置,而data和inode可放于任何地方
2. WAFL把data和inode放于相邻的位置。且尽量让一次要写的数据在RAID 4的同一条带上。
3. 利用块图文件来指示某一个块是在被哪个文件系统所用。比如是被当前文件系统所用呢,还是被某一时间的snapshot所用。
4. WAFL从来不覆盖旧块
5. WAFL每次做check point的时候,不仅将实际数据flush到新块,连inode元数据都要写到新块而不覆盖旧块,这也就是snapshot为何胆敢只拷贝root inode就完成了的原因。
思考: 其实Data .TAP是不知道RAID才对。它只负责把数据放于相邻的block上而已吧。
写过程:
RAM里存放将要写进硬盘里的data, 称为data缓存。而NVRAM里存放的着操作的log。log里记录着"新建一个属性为XX的文件", "删除XX文件里的XX内容". NVRAM的空间平均分为两部分,两个空间轮流使用。当一个空间的值超过一定的阀值或者超过10秒,(此时叫consistency point 触发点), 就进行一次flush。即根据NVRAM里的log,把inode写进硬盘,并且清除NVRAM里的log。inode写进去了,那data呢?其实在此次CP之前,data是不断被写进硬盘里的!flush做的仅是把inode写进去!在flush开始后,NVRAM里另一半的空间就接替了原空间作为当前空间接替工作。等下个CP来时,又换回另一空间继续工作。(注意,在cluster的时候
VNRAM是分为四个相同的空间。其中两空间为本node使用,另两空间为对端node使用)
WAFL给RAID芯片发送data和地址. 在这里,RAID芯片可不认识inode和root inode了,RAID只知道data,并且知道哪些data需要存进哪些LBA地址. 若探讨得更底层些,那WAFL层的data和inode是被raid写到同一条带上,当然,RAID会计算出校验数据写进同一条带上的校验盘。而WAFL层的root inode是被写进硬盘的某一固定位置(应该是头部吧?)。磁盘头从与data/inode的位置到root inode的位置需要一定的寻道时间,这个时间省不了。写数据的顺序是先写data/inode再写root inode.
因为这里也有寻道时间。之前我便有个疑惑,普通的文件系统从data到inode有寻道时间,而WAFL从data/inode到root inode也有寻道时间,这似乎并不能减少寻道时间的减少。苦苦思索后,只能这么猜想了: NetApp是在写完一个CP中的所有data/inode后,再写root inode. 这样便节省了一定的寻道时间。。这个问题有待以后慢慢思考
如此一来WAFL便不用耗费大量时间去做一致性检查了。因为它总是先写data,再写root inode. WAFL每10秒就更新一次一致点,这个一致点其实是一个内部的snapshot, 只不过此snapshot无法被访问. 当掉电时,NVRAM可保护log,即保护了操作记录。文件系统能知道掉电前的所有操作还有最近的snapshot。另外,NVRAM记录的log是很精简的,它用很少的空间大小记录了几千几万个操作。就不用再去做文件系统一致性检查了,只用很短的时间便可恢复文件系统。但有一个问题,RAM里的数据是无法保护的啊!到现在我也不知道NetApp对RAM是怎么处理的。如果它对RAM里的数据没有log起来,那它掉电情况下,数据就永远地丢了。可能NetApp只是想节省一致性检查的时间,而对数据的保护不太在乎吧?
另附上硬盘空间图:

转载于:https://blog.51cto.com/flybirddidi/218419

Netapp存储基础之WAFL, NVRAM, RAID, SnapShot相关推荐

  1. Netapp存储基础总概.

    Netapp存储技术跟其它厂商的存储技术在实现上有较大的不同.它独有的技术具体体现在几个方面: Data ONTAP操作系统.WAFL文件系统.NVRAM.RAID DP,当然还有以此三个技术引申出来 ...

  2. Netapp存储基础之Data ONTAP

    Data .TAP是基于Unix改装而来的Unix类操作系统.最早起源于Berkeley源码,并针对Filer文件系统访问优化的需要进 行了代码优化.它结合WFAL文件系统和微核设计待多项专利,在文件 ...

  3. 【存储数据恢复】NetApp存储WAFL文件系统数据恢复案例

    存储数据恢复环境: NetApp存储设备,WAFL文件系统,底层是由多块硬盘组建的raid磁盘阵列. 存储故障: 工作人员误操作导致NetApp存储内部分重要数据被删除. 存储数据恢复过程: 1.将存 ...

  4. 手码万字-带你全面了解存储基础知识

    前言 很多刚接触存储的朋友一定会被各种概念搞混,许多概念光从官方解释的文字很难去理解,本文我会以多年接触存储的经验,以个人尽量通俗的语言并结合实际的案例或环境把存储可能涉及的基础知识梳理一遍,全文手打 ...

  5. 【服务器数据恢复】NetApp存储无法访问的数据恢复案例

    服务器数据恢复环境: NetApp某型号存储: 配备SAS硬盘,该硬盘520字节一个扇区: 所有的lun映射到小型机使用,存放Oracle数据库文件,采用ASM裸设备存储方式. 服务器故障: 管理员误 ...

  6. ibm存储管理软件 linux,IBM storwize V5000存储基础配置

    IBM storwize V5000存储基础配置 初始帐号密码 Superuser / passw0rd 设备和系统的基本状态 首先添加配置主机,前提是已经连接好光纤线,配置好光纤交换机 这里我们使用 ...

  7. 新兵训练营系列课程——海量数据存储基础

    2019独角兽企业重金招聘Python工程师标准>>> 新兵训练营系列课程--海量数据存储基础 2015年8月12日 09:24 阅读 16831 微博平台研发作为微博的底层数据及业 ...

  8. 【存储数据恢复】NetApp存储误删文件夹的数据恢复案例

    存储服务器数据恢复环境: 某公司一台netAPP某型号存储. 存储服务器故障&分析: 管理员在工作中误删除了NetApp存储中某重要文件夹,刚开始没有怎么在意这个事情,后来发现问题严重了,管理 ...

  9. 服务器虚拟化基于NetApp存储的Microsoft私有云解决方案

    主要功能 降低成本 使用 NetApp 和 Microsoft 基础架 构,从虚拟化发展到私有云,并降 低提供 IT 服务和应用的成本. 提高灵活性 借助可扩展的动态 IT 基础架构, 更快地响应不断 ...

最新文章

  1. Go 学习笔记(32)— 类型系统(命名类型、未命名类型、底层类型、类型强制转换、类型别名和新声明类型)
  2. 异常处理汇总-开发工具
  3. Intel Realsense D435 python multiprocessing 摄像头多进程流传输
  4. 我的第一个oracle触发器
  5. 更新系统时跳过某个软件包
  6. when and where is getControllerName called
  7. 深度学习之基于Inception_ResNet_V2和CNN实现交通标志识别
  8. 对浅拷贝与深拷贝的研究
  9. 大疆反腐45人被查处 被开除员工喊话CEO汪滔自称“被冤枉”
  10. 像差与zernike多项式
  11. CentOS 6.x + Nginx + PHP + MySQL + EduSoho[文档]
  12. mysql自定义序号_mysql序列号生成器 mysql自定义函数生成序列号的例子
  13. 显示器测试软件贴吧,卡硬工具箱怎么检测显示器 屏幕坏点查看教程
  14. 【JavaScript】- forEach的用法
  15. 没人教的项目管理方法
  16. python sympy包符号运算进行定积分计算
  17. 如何打开.pt文件?
  18. [MAC各类右键菜单修改]Automator WorkFlow: 扩展右键菜单
  19. 解决方法:点击火车头开心版出现Exception Processing Message 0xc0000005 Parameters
  20. 细菌大盘点(二) | 葡萄球菌、沙门氏菌、弯曲杆菌

热门文章

  1. Java项目:家居购物商城系统(java+html+jdbc+mysql)
  2. ai条码插件免安装_ai条码插件2款下载|Barcode Toolbox插件+Barcode条码插件下载 - 偶要下载站...
  3. 手机qq2008触屏版_比微信老却是00后最爱 手机QQ 16年进化史
  4. uni-app 之 使用扩展组件(uni ui) Pagination 分页器使用示例
  5. 规范化制度保障安擎高品质产品
  6. 07.LoT.UI 前后台通用框架分解系列之——强大的文本编辑器
  7. Android WebView访问SSL证书网页(onReceivedSslError)
  8. Chromium之各国语言切换
  9. 熬夜翻译完的PureFTPd配置文件
  10. Vue开发入门看这篇文章就够了