0

0

如何处理文件系统和快照空间大小不一致

坏嘻嘻

坏嘻嘻

发布时间:2018-09-29 15:38:43

|

2562人浏览过

|

来源于php中文网

原创

本文在介绍如何处理文件系统和快照空间大小不一致的基础上,重点探讨了其具体步骤,本文内容紧凑,希望大家可以有所收获。

为什么文件系统和快照空间大小不一致?

有用户咨询,在ECS实例内删除文件后再打快照,发现快照容量并没有变小。出现该现象的原因与快照原理、以及文件系统与磁盘、快照的关系有关,即,只要被写过数据的存储块(Block),即使在磁盘中的相关文件已经被删除,数据块仍会被记录到快照中,所以出现快照比磁盘占用空间大的现象。文件系统中所谓删除只是在需要删除的文件头部做个标记,让用户知道这块空间可以利用了,但并不会减少磁盘本身的空间占用。

为什么文件系统和快照空间大小不一致?

用户在实例内部看到的是磁盘 (EBS),在磁盘分区上创建的是文件系统 (File System)。文件系统负责管理磁盘空间,其操作最终均转化为磁盘的 I/O 请求。EBS 会记录 Block(指磁盘的逻辑块地址被块存储划分为相同大小的块)状态,按需将脏数据拷贝到 OSS,这就是打快照的过程。

以下原因可能会造成文件系统的空间与快照大小不一致:

文件系统本身的元数据会占用磁盘空间。

创建文件系统过程会写大量 Block。特别的,Windows 的慢速格式化会写脏大量 Block,而使用快速格式化可以减少写Block 的数量。

文件系统为了减小开销,删除文件只是在内部做个标记,而 EBS 不感知这个删除指令,Block 仍然是已分配状态,所以仍会把这部分也做到快照里,导致快照比文件系统大。

Virtio-block 和 Xen 的 Block-front 等模块不支持 TRIM 指令(一种IO指令,提示LBA上的某段数据不再使用,可以被删除),因而磁盘无法感知数据可以被删除。

创建快照原理

创建快照原理如下图所示。

说明:

将磁盘 LBA(逻辑块地址) 划分为 Block,未分配过的称为空块,图中白色小方框表示。

只要 Block 被写过(已分配,将不再是空块),就将参与计量。

磁盘第一个快照是全量,空块不拷贝。

磁盘后续快照是增量快照,拷贝自上一个快照以来的增量脏数据,因此同一个 Block 在不同快照中可能会出现多个版本(图中用不同颜色来表示)。

微信截图_20180929153521.png

快照计量方法

如上图所示,快照记录空间共有 11 个 Block,比磁盘 T2 中的 9 个 Block 还要多出 2 个。

对单块磁盘的所有快照整体计量。

赣极购物商城网店建站软件系统
赣极购物商城网店建站软件系统

大小仅1兆左右 ,足够轻便的商城系统; 易部署,上传空间即可用,安全,稳定; 容易操作,登陆后台就可设置装饰网站; 并且使用异步技术处理网站数据,表现更具美感。 前台呈现页面,兼容主流浏览器,DIV+CSS页面设计; 如果您有一定的网页设计基础,还可以进行简易的样式修改,二次开发, 发布新样式,调整网站结构,只需修改css目录中的css.css文件即可。 商城网站完全独立,网站源码随时可供您下载

下载

只对已分配的 Block 进行计量。不同时间点相同版本 Block 只统计一次。

不同版本的 Block 占用 N 倍空间。

删除快照的原理

删除快照的原理如下图所示。

说明:

离线分析已删除快照的所有 Block,删除其中未被其他快照引用的数据。

删除 S1 之后,剩下的快照一共有 10 个 Block(包含 S0 的 6 个、S1 产生的 2 个脏数据、S2 的 2 个。),而不是 8 个 Block(S0 的 6 个、S2 的 2 个)。

微信截图_20180929153531.png

“数据写入操作”的准确定义

首先澄清一个概念,对底层分布式存储系统而言,“数据写入操作”不仅仅意味着用户写入的业务数据,也包括格式化磁盘等一系列I/O操作。

用户在拿到磁盘后,必须要先格式化才能正常使用。格式化的本质是建立文件系统的过程。一个分区或磁盘在作为文件系统使用前,需要初始化,并将数据结构记录到磁盘上,这个过程就叫建立文件系统。

因此,在磁盘上建立文件系统,也就意味着对磁盘有数据写入操作。不同的文件系统,在格式化时写入的文件大小也不尽相同,具体如下:

Windows系统格式化,分为快速和正常格式化:

快速格式化只是给分区分配文件系统,并重写目录表;

正常格式化不但会进行上述工作,还会对分区逐扇区进行扫描以确定和标记坏扇区;

因此正常格式化操作,会填充磁盘空块,相当于把磁盘全盘写了一遍。在此种情况下,第一个全量快照的大小会近似于磁盘容量。而快速格式化占用的实际空间则相对较少。

Linux系统格式化,也同样是建立文件系统的过程。因此刚刚格式化完毕的磁盘,在用户没有写入业务数据的时候,第一个快照也会有一定的容量大小,具体要看不同的文件系统格式而定。

相关专题

更多
什么是分布式
什么是分布式

分布式是一种计算和数据处理的方式,将计算任务或数据分散到多个计算机或节点中进行处理。本专题为大家提供分布式相关的文章、下载、课程内容,供大家免费下载体验。

319

2023.08.11

分布式和微服务的区别
分布式和微服务的区别

分布式和微服务的区别在定义和概念、设计思想、粒度和复杂性、服务边界和自治性、技术栈和部署方式等。本专题为大家提供分布式和微服务相关的文章、下载、课程内容,供大家免费下载体验。

228

2023.10.07

treenode的用法
treenode的用法

​在计算机编程领域,TreeNode是一种常见的数据结构,通常用于构建树形结构。在不同的编程语言中,TreeNode可能有不同的实现方式和用法,通常用于表示树的节点信息。更多关于treenode相关问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

529

2023.12.01

C++ 高效算法与数据结构
C++ 高效算法与数据结构

本专题讲解 C++ 中常用算法与数据结构的实现与优化,涵盖排序算法(快速排序、归并排序)、查找算法、图算法、动态规划、贪心算法等,并结合实际案例分析如何选择最优算法来提高程序效率。通过深入理解数据结构(链表、树、堆、哈希表等),帮助开发者提升 在复杂应用中的算法设计与性能优化能力。

6

2025.12.22

windows查看端口占用情况
windows查看端口占用情况

Windows端口可以认为是计算机与外界通讯交流的出入口。逻辑意义上的端口一般是指TCP/IP协议中的端口,端口号的范围从0到65535,比如用于浏览网页服务的80端口,用于FTP服务的21端口等等。怎么查看windows端口占用情况呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

514

2023.07.26

查看端口占用情况windows
查看端口占用情况windows

端口占用是指与端口关联的软件占用端口而使得其他应用程序无法使用这些端口,端口占用问题是计算机系统编程领域的一个常见问题,端口占用的根本原因可能是操作系统的一些错误,服务器也可能会出现端口占用问题。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

1050

2023.07.27

windows照片无法显示
windows照片无法显示

当我们尝试打开一张图片时,可能会出现一个错误提示,提示说"Windows照片查看器无法显示此图片,因为计算机上的可用内存不足",本专题为大家提供windows照片无法显示相关的文章,帮助大家解决该问题。

744

2023.08.01

windows查看端口被占用的情况
windows查看端口被占用的情况

windows查看端口被占用的情况的方法:1、使用Windows自带的资源监视器;2、使用命令提示符查看端口信息;3、使用任务管理器查看占用端口的进程。本专题为大家提供windows查看端口被占用的情况的相关的文章、下载、课程内容,供大家免费下载体验。

417

2023.08.02

php源码安装教程大全
php源码安装教程大全

本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

7

2025.12.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 6.3万人学习

Git 教程
Git 教程

共21课时 | 2.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号