UBIFS文件系统(五)
本文主要解释如下几个问题:
-
为什么data node在空间索引时,并不从freeable_list中查找,而为index node索引剩余空间的时候则会?
写data node时,当该node对应的key在TNC中存在时,会发生node的替换,原node所在LEB的dirty值增加,该LEB可能会成为freeable LEB,但是写数据时该LEB并不在索引的范围之内,这是由于将该存在于该LEB中的node编成脏的新的node可能此时正存在于jhead的wbuf中,还没有同步到flash当中。如果此时将该LEB索引,必会先对其进行unmap,如果此时发生异常掉电则数据将会丢失。而当为index node索引空间时,根据do_commit的流程,此时的jhead对应的wbuf均已被同步到flash,所以此时可以从freeable_list中查找空闲LEB。 -
如何判断文件系统是否需要replay?
文件系统挂载时,会将need_recovery标志写入master node中,当正常卸载调用unmount时会将该标识清除,而如果发生异常掉电时,该标志将仍然存在,再次挂载时则根据该标志是否为1来判断上次是否是正常卸载,从而决定是否replay。 -
mkfs.ubifs 的 -F参数的作用?
-F参数将标志为UBIFS_FLG_SPACE_FIXUP保存到sb_node中,当该分区被首次mount为rw模式时(包括从ro模式remount为rw模式),ubifs会将分区内所有包含free空间的LEB进行读取、擦除、回写的操作,以保证所有的n