上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
3.2.5 日志技术
文件的一个写操作会涉及很多地方的修改。以Ext4文件系统为例,当创建一个文件时涉及向目录中添加一项,分配inode,更新inode位图等。如果在创建文件的中间环节出现系统宕机或掉电,则会导致数据的不一致,甚至导致文件系统的不可用。
在文件系统中,通过日志(Journal)技术可以解决上述问题,该技术最早应用在数据库中,后来被IBM引入JFS文件系统中。目前,许多文件系统都具备日志技术,如Ext4、JFS和XFS等。凡事没有绝对,并非所有的文件系统都采用日志技术,如Btrfs。
日志技术的原理并不复杂,复杂的地方是工程实现。下面介绍一下文件系统的日志是如何工作的。文件系统中的日志需要一块独立的空间,整个空间类似一个环形缓冲区。当进行文件修改操作时,相关数据块会被打包成一组操作写入日志空间,再更新实际数据。这里的一组操作被称为一个事务。一个完整的事务包括一个日志起始标记、若干个inode的块、若干个位图的块、若干个数据块和一个日志完成标记,如图3-38所示。
图3-38 文件系统中的日志原理示意图
由于实际数据的更新在日志之后,如果在数据更新过程中出现了系统崩溃,那么通过日志可以重新进行更新。这样就能保证数据是我们所期望的数据。还有一种异常场景是日志数据刷写过程中。由于此时日志完成标记还没有置位,而且实际数据还没有更新,那么只需要放弃该条日志即可。