
硬盘盒原理简单,但实现起来还有一些问题需要考虑,硬盘盒比如如何解决数据新旧问题、重构速度问题等。
硬盘盒同一逻辑地址,用户可能写过若干次,在闪存空间,该逻辑地址对应的数据有很多是旧数据,硬盘盒只有一笔是新数据,那么如何甄别哪些数据是旧的,哪些数据是新的呢?如何让逻辑地址映射到最新数据所在的物理地址呢?SSD起初把逻辑地址La 2的数据写在物理地址Pa 2上;之后,用户又改写了那笔数据,硬盘盒SSD把它写到了物理地址Pa 8上。我们知道,用户最后写入的数据总是最新的。在这里,硬盘盒时间戳帮上大忙了,哪个值大,就表示哪个是最后写入的。硬盘盒SSD可以依赖Meta data中的时间戳来区分新旧数据的。在全盘扫描时,假设扫描顺序是从物理地址Pa 1到物理地址Pa x,对逻辑地址La 2来说,开始会产生映射La 2→Pa 2,但扫描到Pa 8时,发现时间戳比之前的更新,于是新的映射取代旧的映射,最后得到映射关系:La 2→Pa 8。
硬盘盒全盘扫描有一个问题,就是映射表恢复很慢,所耗的时间与硬盘盒SSD容量成正比。现在SSD容量已达到TB级别,全盘扫描映射方式,重构映射表需要花费几分钟甚至几十分钟,这在实际使用中,用户是不能接受的。那硬盘盒SSD内部是如何快速恢复映射表的呢?
硬盘盒一种办法就是硬盘盒SSD定期把SSD中RAM的数据(包括映射表和缓存的用户数据)和硬盘盒SSD相关的状态信息(诸如闪存块擦写次数、闪存块读次数、闪存块其他信息等)写入到闪存中去,与正常掉电前SSD要做的事情类似,这个操作我们称之为做Checkpoint(检查点,此处译成“快照”更合适)