Backup and Snapshot

Keywords: Database recovery

含义:

  • Backup 备份 则是数据存储的某一个时刻的副本

  • Snapshot 快照 是数据存储的某一时刻的状态记录

各种企业都有数据备份需求, 比如对电脑硬盘进行备份, 网络数据存储进行备份, 或是对数据库进行备份.

Backup 原理

顾名思义备份就是对数据做一个全量的拷贝, 把数据复制一份出来. 原数据丢失后可以直接从备份把数据拷贝回来. 这非常好理解. 可问题是如果数据量很大, 拷贝这个过程是很耗时的. 拷贝的过程中为了避免出错会对数据进行锁定, 此时数据处于只读不写的状态, 会影响使用. 所以这才引出了 Snapshot 快照技术.

Snapshot 原理

现代的存储系统的原理都包含一个概念 block, 也就是最小的数据单位. 在不同的系统上这个 block 有不同的术语, 但是工作原理都是类似的. 例如在机械硬盘上最小的存储单位是 4096 字节一个的 Disk sector (扇区), 在 Linux 文件系统中最小的单位是 4096 字节一个的 Page (页), 在数据库领域可能是一个 Block, 例如 Hadoop 上一个 Block = 64MB. 每个 block 都会有对应的磁盘地址.

快照的原理是对数据存储在某一时刻的状态记录, 也就是这个快照中包含了哪些 block, 实际快照中储存的是这些 block 的地址. 并且快照一旦创建后这些 block 就会处于锁定状态. 如果要对这些 block 中的数据进行修改, 就要复制一份出来再在新的 block 上修改.

对全量数据创建快照的本质就是把一堆地址的数据记录下来作为备份, 并不会保存真实的数据, 只会保存地址, 所以这个速度是很快的, 基本上是秒级. 并且每次全量快照时很可能只需要对增量数据进行快照, 这里有专门的算法来快速鉴别哪些 block 是增量, 就不展开说了.

但是快照本身不包含数据, 如果磁盘坏了, 数据还是会丢. 所以现代的备份技术通常是先短暂锁定系统, 创建快照, 恢复系统的使用. 然后再在后台根据快照的映射慢慢复制出来作为备份. 由于快照记录的 block 都是只读状态, 所以不用担心系统的使用过程中会对其进行修改. 等备份完成, snapshot 的作用就仅限于用于增量 snapshot 备份了.