如果您在ECS实例内删除文件后再创建快照,发现快照容量并没有变小,或者快照比从文件系统查询到的磁盘占用空间大,本文针对该问题提供了原因及解释供您参考。

原因分析

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

  • 文件系统的元数据会占用磁盘空间。
  • 文件系统在初始化阶段被写入大量数据块(Block,指磁盘的逻辑块地址LBA被块存储划分为相同大小的块),写入数据操作会占用磁盘空间。
  • 文件系统为了降低性能消耗,删除文件时只在文件属性中创建弃用标记。磁盘无法感知删除指令,数据块仍然是已分配状态,同时数据块会被拷贝到快照中,导致快照容量大于文件系统。
  • 虚拟化驱动KVM的Virtio-block和Xen的Block-front等模块不支持TRIM指令(磁盘I/O指令,提示逻辑块地址LBA上的某段数据不再使用,可以被删除),磁盘无法感知数据可以被删除。

文件系统与磁盘和快照的关系

您在磁盘分区上创建的是文件系统。文件系统负责管理磁盘空间,管理操作最终均转化为磁盘的I/O请求。磁盘会记录数据块状态,按需将数据一并拷贝到对象存储OSS,这就是创建快照的过程。文件系统与快照之间的关系如下图所示:

说明 上图中,只要被写过数据的数据块,即使在磁盘中的相关文件已经被删除,数据块仍会被记录到快照中。文件系统中所谓删除只是在需要删除的文件头部做个标记,让您知道这块空间可以利用了,不会减少磁盘本身的空间占用。

写入数据与磁盘格式化的关系

一块新磁盘或新磁盘分区在正常使用前,必须经过初始化,并将数据结构记录到磁盘上。格式化的目的是建立文件系统。因此,在磁盘上建立文件系统意味着对磁盘有写入数据操作。不同的文件系统在格式化时写入的文件大小不同:

  • Windows系统格式化(分为快速和正常格式化):
    • 快速格式化:只是为分区分配文件系统,并重写目录表。快速格式化占用的实际空间相对较少。
    • 正常格式化:不但完成快速格式化工作,还逐扇区扫描分区以确定和标记坏扇区,填充磁盘空块,相当于写了磁盘全盘的数据量。此时,第一份全量快照会近似于磁盘容量。
  • Linux系统格式化:格式化磁盘后,在实例没有写入业务数据前,第一份快照的容量大小与磁盘文件系统格式有关。