为什么EBS卷使用前需要预热(Pre-Warm)?
当你创建一块EBS磁盘卷的时候,无论你是创建一块全新的空磁盘还是基于某个snapshot恢复创建的一块包含数据的磁盘,存储块是立即分配的,而当你第一次读写某个块(block)的时候,他要么擦除之后再写入数据(对于新EBS卷)要么从snapshot(存储在S3中的)中恢复数据到块再供你读(对于基于快照恢复的EBS卷),这些预备操作会导致在首次读写时造成5%~50%的IOPS损失。对于大多数应用,首次的这点损失可以接受,毕竟很快整个EBS卷就会恢复IOPS性能。但如果想避免这种首次读写块时的IOPS性能损失,我们可以预热磁盘,是空磁盘,首次使用前就预先将其全部快擦除(wiped clean),如果是基于快照恢复的EBS卷,就预先全部读取一遍,使数据全部从快照中恢复到EBS卷中的块,或者将这种卷的所有块内容全部读取,并原地写入,这样基于快照恢复的卷中未被利用的部分也被预热了,但是一旦这样操作后,下次在快照这个卷的时候,就得创建完全快照(full snapshot),官网文档中的这句话的言外之意就是说: 如果没有预热的卷做快照,实际上只有被写入数据的部分被复制到S3中(快照是存在S3中)。另外,为什么基于快照创建的卷数据并没有一次性全部恢复到卷,官网文档解释说这样做可以加快快照恢复时间(restore time),然后数据根据读写频繁大小做为先后顺序逐步恢复到存储块。
下面介绍预热的方法:
Linux系统下,使用dd命令预热。
预热前,首先得确保被预热的E