在ECS实例内删除文件后再创建快照,发现快照容量并没有变小。甚至快照比磁盘(EBS)占用空间大。本文提供了原因解释供您参考。

原因分析

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

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

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

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

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

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

对分布式存储系统而言,写入数据既包括写入业务数据,也包括格式化磁盘等I/O操作。业务数据和文件系统均会占用磁盘空间。

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

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