存储空间存储分层
在谈到存储分层之前,我们需要了解Windows Server存储空间里面包含了多少层以及如何定义每一个分层。基于读写性能快慢的相对值,存储空间分为两个数据存储层,一个存储层为快速层,通常由SSD硬盘提供,用于存储热数据,也即经常访问的数据;另一个存储层为慢速层,通常由HDD硬盘提供,用于存储冷数据,也即不经常访问的数据。默认情况下,存储空间具有这两个存储速率不同的存储层的虚拟磁盘,存储分层目的在于平衡 SSD性能和硬盘驱动器 (HDD)容量。在存储层都有可用空间时,新的数据通常往慢速层写入,然后存储空间将会根据访问数据的频率,以透明方式在两个层之间移动子文件级的数据。存储层可以通过将最常用的热数据移到SSD存储来满足热数据的性能要求,将冷数据移动到HDD层来满足普通数据的容量要求。存储分层工作原理如图1所示。
图1存储空间分层技术
存储控制器服务器操作系统Windows Server 2012和Windows 8及后续版本内置了存储分层管理服务(Storage Tiers Management Service),该服务在安装Windows Server文件服务器角色后被激活处于运行状态。存储分层管理服务可以自动计算数据热度并按照默认策略在每天晚上1点启动冷热数据移动。要观察存储分层任务和行为,可以登录存储控制器服务器,打开服务器的控制面板里找到计划任务程序,在计划任务程序里依次展开“计划任务程序”—“Microsoft”—“Windows”下找到名为“Storage TiersManagement”的项目,打开Storage Tiers Optimization 属性,在触发器选项卡里我们就能看到存储分层管理服务在每天凌晨1点触发冷热数据迁移的计划任务,如图2所示。这个默认设置不是一成不变的,可按照需求和实际情况修改触发分层任务的时间。
图2存储空间自动分层任务
除了修改分层操作任务的触发时间,还可以不依赖计划任务程序完成存储分层。为了找到Storage Tiers Management Service如何实现存储分层,我们可以从预置的计划任务里找到分层操作相关的命令和参数。点击Storage Tiers Optimization 属性窗口的操作选项卡,在详细信息栏可看到Storage Tiers Management Service所执行的具体任务和相关参数,事实上存储分层使用defrage命令和-c -h -g -#这4个参数完成,如图3所示。
图3存储空间分层调度操作
获取到分层存储命令及参数后,我们就可以使用命令手动触发冷热数据迁移了,只要在命令提示符里输入C:\ Windows\system32\defrag.exe-c -h -g -#即可。
如果熟悉Windows里磁盘优化(碎片整理)会发现做存储分层移动的命令和磁盘碎片整理的命令一样,只是参数不同。在Windows Server 2012/Windows 8之前的版本里微软并没有引入存储空间,也没有存储分层这个技术,所以使用defrag.exe /? 命令获取帮助后,在Windows Server2012 R2/Windows 8.1系统里面会多出-g这个参数。这个参数非常重要,其意义意义在于优化存储层,按照数据热度为数据找到合适的存储层。
需要强调的是,存储分层基于数据的粒度而非文件的粒度,存储分层服务按照1MB的单位分析和移动数据。如果文件大于1MB,而且只有部分“热”数据,那么一个文件只有一定比例的数据会被移动到SSD层,比如有一个虚机虚拟磁盘上面的数据只有20%热数据,只有这20%的数据会被移动到SSD分区,而不会把整个虚拟磁盘文件移动到SSD分区。举个实际的例子,一台虚机的VHDX大小一共100GB,里面安装了SQL Server 实例,在实例下20GB的数据库和日志文件用于交易系统,该交易系统每天产生过万条交易,那么这20GB的数据将会移动到SSD分区,而剩余的80GB系统文件和其他文件的数据则不一定会移动到SSD分区。至于存储空间如何进行数据热度计算,请参考另外一篇博客《Windows Server 软件定义存储—存储空间IO的分发》 。