存储系统如何应对异常掉电问题?
2024-07-18 13:42:25
admin
2864
对于任何存储系统来说,异常掉电都是一个不得不面对的问题,因为不同用户的机房环境千差万别,理想的双路市电加ups这样的土豪配置成本太高了。很多年龄稍大的系统管理员估计依然还记得采用fat或者ext2文件系统时,断电重启后被fsck全盘扫描所支配的恐惧。
其实机械磁盘每个时间点只能响应一个读写请求,ssd虽然可以并发的执行多个请求但也是有上限的,这就会造成一个问题:如果某个用户操作需更新磁盘上的多个不同位置,由于磁盘IO能力的限制是无法保证在同一时刻全部完成的。如下图所示,一个文件在文件系统中的主要信息包括以下3部分:文件的inode信息、数据块分配信息bitmap以及实际数据data blocks。当用户向文件追加写入时需要对这三部分都进行修改,但就像刚才说的,磁盘是无法保证在同一时间完成全部3部分的修改操作的,如果在这个过程中发生系统掉电的话,那么就会导致磁盘上的信息不一致了。不过很多朋友可能会问了,我现在用的服务器有时也会掉电,怎么没遇见过需要全盘扫描的情况啊。这里我们就不得不感谢现代的日志型文件系统了,我们目前常用的ntfs,ext4,xfs等都是日志型文件系统,日志型文件系统借鉴了数据库领域的transaction概念,通过日志功能来保证操作的原子性,它的大概原理如下:文件系统将上面文件系统涉及的3处磁盘修改操作封装成一个事务写入日志中,该事务包含用于校验完整性的头尾信息,只有该事务信息被commit到日志中后相关操作才会被真正的apply应用到具体磁盘位置,如下图所示:当然以上只是一个非常简化的原理性描述,实际过程其实很复杂的,而且为了最大化系统的性能,工程上会进行大量的优化操作,而这些优化操作往往会导致保证一致性变的非常困难。另外,为了应对异常掉电,除了文件系统软件上的保证,硬件的可靠性一样重要:磁盘本身的可靠性,raid对掉电的异常处理等等。总之,一个稳定可靠的存储是一个系统工程,需要对各个软硬件组件有深入的理解,核心重要数据的存储还是交给专业的存储厂商来做吧。