VMware vSphere中三种磁盘:精简置备/厚置备置零/厚置备延迟置零

有时候我们可能会遇到这样几种现象:虚拟机置备100G,但是平台上却显示虚拟机使用了500G存储?

平台上看到所有虚拟机加起来才3T,存储上5T的空间却没了,严重的还导致所有虚拟机宕机。

为啥?都是"精简置备"惹得货,不,"精简置备"是个好东西,只是你只看到了他的有点,却忘了它得缺点!

下面来了解一下VMware存储置备得几种方式吧。

vSphere 支持两种模型的存储置备:厚置备和精简置备。

厚置备:

厚置备是传统存储置备模型。对于厚置备,预先提供大量存储空间以满足未来的存储需要。但是,空间可能一直未被使用,这样会导致无法充分利用存储容量。

精简置备:

此方法与厚置备相反,通过以灵活的按需方式分配存储空间,可帮助您消除无法充分利用存储的问题。可以通过 ESXi,使用两种模型的精简置备(阵列级别和虚拟磁盘级别)。

其中厚置备又分为厚置备置零和厚置备延迟置零。厚置备置零即存储磁盘被分配给VM时即刻抹除其上所有数据,将所有二进制都写"0",而延迟置零则相反,存储同样在分配空间时划出等量空间给VM,但是其上二进制不做任何处理,当VM写入数据要用对应区块时才清除其上数据。而精简置备就比较另类了,它骗了VM,VM编辑设置里面所写容量空间只是平台许诺得空间,这个空间量只会限制系统内部所看到得最大容量,注意,是系统内部!对于平台来说,你用多少,我就给你多少,所以>>>一台VM得实际存储使用量比它设置得还大。

厚置备得两种方式相当于我们得电脑硬盘,反正就这么大,哪些扇区归你也都是提前设定得。区别在于是否在分配时就全部置零。这两种很简单,主要是,精简置备,可能你并不了解它。

下面来看看我理解中精简置备是怎么运行得,接入磁盘每个扇区区块是1GB,每次虚拟机写入/删除量也是1GB,我们用10个方格表示存储上10GB空间,一台虚拟机置备空间大小为4GB。

系统可见数据量为4G,实际存储使用量为6G

从上边可见,虚拟机系统内部可见使用数据量为4GB,但是存储上使用量为6GB,这一点是由于精简置备得规则决定得。厚置备是给你画了一个圈,只要在圈里面,怎么玩儿,随你。但是精简置备不可能给你画个圈,那样就没有意义了,所以就是你需要写入数据得时候,就给你找多大数据量得空白扇区,而不会主动去覆盖你已经删除数据得扇区,除非你系统内部发送置零清除已删除数据得扇区或者平台主动去统一回收这些扇区。

VMware这样考虑是有原因得,因为像你电脑硬盘,数据删除了还可以恢复,精简置备也要保留这种特性,所以不会主动去回收这些空间。实际上在vSphere 6.7里面,已经慢慢开始加入了回收得功能,只是回收力度很小,只有在存储空间容量快满时才会触发vSphere去回收空间。

所以,当环境存储充足时,比如桌面虚拟化,我这台存储空间就是为桌面设计得容量,这时候可以采用厚置备延迟至零(厚置备置零模式在配置虚拟机时等待置零操作会很久,如果不是数据保密要求很高等特殊场景,不建议选择这个)。如果存储空间不足,或存储需要超容量分配,可以选择精简置备,以达到节省存储空间得目的,但是记得定期去回收存储空间。并不是所有存储都可以回收空间,只是一部分存储支持。

下面是存储空间回收步骤,献给有需要得人:

1、打开ESXI主机SSH服务,flash客户端在安全配置中,HTML5客户端在服务中;

2、CRT或者PUTTY等工具SSH连接ESXI主机;

3、执行命令"ls -l /vmfs/volumes \n"查看所有存储卷,复制需要回收空间存储得UUID;

4、执行命令"esxcli storage vmfs unmap -u UUID号"即回收该存储卷上的可用空间;

5、每台主机上的每个卷均需要执行一次,即所需执行次数=主机数*存储卷数量。每次执行大约在几小时左右,视空间大小决定。

原文地址:https://www.cnblogs.com/lsmsd/p/12328954.html

时间: 2024-10-11 14:12:05

VMware vSphere中三种磁盘:精简置备/厚置备置零/厚置备延迟置零的相关文章

VMware中三种网络连接的区别

VMware中三种网络连接的区别 1.概述 2.bridged(桥接模式) 3.NAT(网络地址转换模式) 4.host-only(主机模式) 5.replicate physical network connection state 选项解释 1.概述 大家在安装完虚拟机后,默认安装了两个虚拟网卡,VMnet1和VMnet8,如下图.其中VMnet1是host网卡,用于host方式连接网络的.VMnet8是NAT网卡,用于NAT方式连接网络的.它们的IP地址是随机生成的. VMware提供了三

VMWare网络链接三种方式

本文转自:http://www.cnblogs.com/xiaochaohuashengmi/archive/2011/03/15/1985084.html VMware虚拟机上网络连接(network type)的三种模式--bridged.host-only.NAT VMWare提供了三种工作模式,它们是bridged(桥接模式).NAT(网络地址转换模式)和host-only(主机模式).要想在网络管理和维护中合理应用它们,你就应该先了解一下这三种工作模式. 1.bridged(桥接模式)

详解Oracle数据货场中三种优化:分区、维度和物化视图

转 xiewmang 新浪博客 本文主要介绍了Oracle数据货场中的三种优化:对分区的优化.维度优化和物化视图的优化,并给出了详细的优化代码,希望对您有所帮助. 我们在做数据库的项目时,对数据货场的优化,大约的原理只有两个:一是数据分块储藏,便于数据的转储和管教:二是其中处理,长进数据供给的速度.本文主要介绍了Oracle数据货场中的三种优化:对分区的优化.维度优化和物化视图的优化,基上面两个大约的原理,借助于数据货场的观念,罗列数据库的优化措施:1.分区在数据货场中,事实表,索引表,维度表分

unity中三种调用其他脚本函数的方法

第一种,被调用脚本函数为static类型,调用时直接用  脚本名.函数名().很不实用-- 第二种,GameObject.Find("脚本所在物体名").SendMessage("函数名");  此种方法可以调用public和private类型函数 第三种,GameObject.Find("脚本所在物体名").GetComponent<脚本名>().函数名();此种方法只可以调用public类型函数 unity中三种调用其他脚本函数的

文顶顶 iOS开发UI篇—iOS开发中三种简单的动画设置

iOS开发UI篇—iOS开发中三种简单的动画设置 [在ios开发中,动画是廉价的] 一.首尾式动画 代码示例: // beginAnimations表示此后的代码要“参与到”动画中 [UIView beginAnimations:nil context:nil]; //设置动画时长 [UIView setAnimationDuration:2.0]; self.headImageView.bounds = rect; // commitAnimations,将beginAnimation之后的所

iOS开发UI篇—iOS开发中三种简单的动画设置

iOS开发UI篇—iOS开发中三种简单的动画设置 [在ios开发中,动画是廉价的] 一.首尾式动画 代码示例: // beginAnimations表示此后的代码要“参与到”动画中 [UIView beginAnimations:nil context:nil]; //设置动画时长 [UIView setAnimationDuration:2.0]; self.headImageView.bounds = rect; // commitAnimations,将beginAnimation之后的所

Android中三种超实用的滑屏方式汇总(转载)

Android中三种超实用的滑屏方式汇总 现如今主流的Android应用中,都少不了左右滑动滚屏这项功能,(貌似现在好多人使用智能机都习惯性的有事没事的左右滑屏,也不知道在干什么...嘿嘿),由于前段时间项目的需要,所以也对其研究了一下,总的来说滑屏实现有三种方式:(至于其他的实现方式目前后还没碰到...) 1.ViewPager 2.ViewFlipper 3.ViewFlow 一.ViewPager 官方文档介绍:http://developer.android.com/reference/

iOS开发中三种简单的动画设置

iOS开发中三种简单的动画设置 [在ios开发中,动画是廉价的] 一.首尾式动画 代码示例: // beginAnimations表示此后的代码要“参与到”动画中 [UIView beginAnimations:nil context:nil]; //设置动画时长 [UIView setAnimationDuration:2.0]; self.headImageView.bounds = rect; // commitAnimations,将beginAnimation之后的所有动画提交并生成动

sharepoint 判断用户是否存在某个组中三种方法

1.思路:查找用户所有的组来匹配是否在特定的组(推荐) 不用担心组不存在而报错. public static bool IsUserMemberOfGroup(SPUser user, string groupName) { bool result = false; if (!String.IsNullOrEmpty(groupName) && user != null) { foreach (SPGroup group in user.Groups) { if (group.Name =