存储 频道

NAS技术详解(二):SnapShot技术详解

数据块图文件(Block-Map File)

    大多数文件系统使用位图的方式,即对每一块磁盘块使用1个数位,来标注空间数据块。如果该数位被使用了,那么意味着这个数据块是在被使用。这种机制在WAFL中并不适用,因为多个SnapShot可以同时指向一个数据块。WAFL的数据块图文件可以对每一个数据块采用32个数为来描述其路径。第0个数位记录了活动文件系统对数据块的映射,第1个数为记录了第1个SnapShot对数据块的映射,以此类推。如果一个数据块的块图文件中的任意一个数位被标注,则代表它已经被使用。

关于创建SnapShot的更多解释

    向磁盘中写入一份SnapShot数据快照的难点在于如何才能避免阻碍将发生的NFS请求,具体来说,新产生的NFS请求可能会需要更新缓存中的数据(这些数据是SnapShot的一部分)而这些数据在存入磁盘之前又恰恰是不能更改的。一种比较简单的解决方法就是延缓响应NFS请求,写入SnapShot,然后继续响应NFS请求。但是,写入SnapShot需要1秒左右的时间,对NFS请求来说,这种延迟已经是太长了,由此会带来性能的问题。

    WAFL中保持SnapShot快照数据一致的技术是在高速缓存中将所有更改过的数据标明为IN_SNAPSHOT。再创建SnapShot数据快照期间的规则则是标注了IN_SNAPSHOT的数据不可被修改,而未标记的数据则不能被写入到磁盘。NFS请求可以读出所有的文件系统数据,并且可以修改未标注IN_SNAPSHOT记号的数据。而那些需要修改IN_SNAPSHOT数据的请求则必须被延缓。

    为了避免阻碍NFS要求,WAFL必须尽可能迅速的处理IN_SNAPSHOT数据,为此,WAFL执行下列的步骤:

    (1) 为所有包含IN_SNAPSHOT数据块的文件分配盘空间。

    WAFL在两个位置高速缓存Inode数据:核心Inode数据保存在专有Inode缓存中,在磁盘缓冲中保存Inode文件。当WAFL结束对某文件分配空间后,它将新近更新的Inode信息从Inode缓存复制到相应的Inode文件磁盘缓冲中去。并且清除核心Inode数据上的IN_SNAPSHOT标记。当此步完成后,所有常规文件的数据块上均不带有IN_SNAPSHOT标记,并且大多数的NFS操作不会受到任何阻碍。因为该项操作不需要磁盘I/O,它可以很快完成。

    (2)更新块图文件对每一格块图路径而言,WAFL将会把代表活动文件系统的数位标注复制成代表新SnapShot的数位标注。

    (3)将所有标注了IN_SNAPSHOT的磁盘缓存信息写入到它们新近被分配的磁盘空间中去。当某一特定的磁盘缓存被清空后,WAFL就可以启动响应等着修改该缓存的NFS请求。

    (4)复制Root Inode,创建代表新的SnapShot的inode,并且取消Root Inode上面的IN_SNAPSHOT标注。新SnapShot数据快照的Inode尚不可写入磁盘,直到SnapShot中所有其他数据已经被写入这条规则必须遵循,以免带来不可预料的SnapShot不一致情况。

    一旦写入了新的SnapShot数据快照Inode,高速缓存中将不再包含任何IN_SNAPSHOT标注,那些被暂缓的NFS请求也可以继续处理。在正常的负载状况下,WAFL在少于1秒的时间中执行这四个步骤。另外,第一步一般能在几百分之一秒中完成,当WAFL完成这项操作后,只有很少的NFS操作将会延迟。

    删除一份SnapShot数据快照也极为容易。WAFL可以简便地清除代表SnapShot快照的Root Inode,并且清除在块图路径中代表SnapShot的每一个数位标志。

0
相关文章