详细描述NTFS文件系统的可恢复性
NTFS是随着windows NT操作系统应运而生的,全称“NT文件系统”,中文意思是NT文件系统。现在它是Windows操作系统中的主要分区格式。其优点是出色的安全性和稳定性,在使用中不易产生文件碎片。NTFS分区对用户权限有非常严格的限制,每个用户只能根据系统授予的权限进行操作。任何超越他权限的企图都将被系统禁止。同时还提供了容错结构日志,可以记录所有的用户操作,从而保护系统的安全性。本文主要讨论NTFS如何在系统崩溃或磁盘故障后安全地恢复文件系统。
NTFS是一个带有错误警告的文件系统。因为NTFS对关键文件系统的系统信息使用冗余存储,所以当磁盘上的扇区损坏时,NTFS仍然可以访问卷上的关键数据。NTFS分区的前16个扇区是分区引导扇区,用来存储分区引导代码,后面是主文件表(MFT)。如果MFT所在的磁盘扇区损坏,NTFS文件系统会将MFT转移到硬盘的其他扇区,从而保证NTFS文件系统和Windows操作系统的正常运行。相比之前FAT16和FAT32文件系统的FAT(文件分配表),FAT只能固定在分区的引导扇区后面。一旦这个扇区,整个文件系统都会瘫痪,而NTFS文件系统显然要先进得多。然而,这种移动MFT的方法并不完美。如果分区引导代码中指向MFT的部分有错误,NTFS文件系统就不知道去哪里找MFT,就会报错“磁盘未格式化”。为了避免这个问题,分区引导代码会包含一个验证程序,负责调试。
通过事务日志和恢复技术,NTFS文件系统成功地保证了NTFS卷的一致性,实现了文件系统的可恢复性。在FAT或HPFS上执行CHKDSK时,系统会检查目录、分配和文件表中指针的一致性;但是,在NTFS下,系统将维护这些组件的事务日志,因此CHKDSK只能通过将事务回滚到最后一个提交点来恢复文件系统中的一致性。事务方法需要很少的开销。NTFS不直接访问日志文件中的记录,而是通过LFS进行读写。LFS提供打开、写入、前进、后退、更新等操作,帮助NTFS处理日志文件。
我们将NTFS卷文件上的每个特定I/O操作都视为一个事务,每个事务都是一个原子操作。这样,任何复杂的操作都可以分解成许多事务。该系统面临许多不同的事务。当事务开始时,它要么成功完成,要么在发生意外错误时回滚到上一个提交点。此时,NTFS卷处于事务开始之前的状态。很多原因都会导致事务失败,比如坏的磁盘磁道、内存不足、设备连接错误等等。
为了确保每个事务可以成功完成或回滚到以前的错误状态,NTFS文件系统将对每个事务执行以下步骤:
(1)将该事务中的子操作记录到内存缓存的日志文件中;
(2)将实际子操作数据记录到存储器中;
(3)在缓存在存储器中的日志文件中将该事务标记为提交;
(4)将日志写入磁盘;
(5)将数据写入磁盘。
事实上,对于步骤(4)和(5),NTFS并不是立即写入磁盘,而是采用了lazy-write技术,选择在之后适当的时间批量向磁盘写入大量数据。延迟写入技术的使用大大降低了磁盘操作的频率,从而大大提高了系统的性能。但当系统崩溃时,可能会导致磁盘不一致,存在一定风险。在我们自己的应用中,我们可以设置FILE_FLAG_WRITE_THROUGH,让系统直接将数据写入磁盘,而不进行缓存——此时系统仍然会缓存写操作,但是写入磁盘没有延迟。
NTFS文件系统确保在事务中的数据发生更改之前,缓存的日志存储在磁盘中。当文件系统更新缓存时,NTFS通过在缓存日志中记录标记为已完成的事务来提交这些事务。当将缓存的日志刷新到磁盘时,应保证所有标记为已提交的事务都已完成,即使在这些事务对数据的所有实际更改存储到磁盘之前系统可能会崩溃。
当发生系统错误时,NTFS文件系统的日志中有足够的信息来完成或中断任何有问题的事务。执行恢复操作时,NTFS文件系统会重做日志中标记为已提交的每个事务;然后,文件系统在日志中搜索上次系统崩溃时那些未提交的事务,并在日志中取消这些未提交事务的所有子操作。由于NTFS文件系统在将任何数据更改的日志写入硬盘之前,已经将这些日志写入硬盘,因此NTFS拥有恢复过程中需要回滚的所有子操作的有效信息。
但实际上,NTFS使用这种事务日志技术来恢复数据并不那么安全。而且,由于系统是通过日志恢复的,恢复过程可能会影响文件系统的所有数据——除非用户在访问数据时使用FILE_FLAG_WRITE_THROUGH标志。如果用户程序不使用FILE_FLAG_WRITE_THROUGH访问数据,那么系统崩溃后用户数据很可能会丢失。有可能系统只能恢复非常旧的数据,或者意外的错误数据,或者不能恢复任何数据。
硬盘故障的修复
NTFS文件系统使用群集重新映射技术来减少磁盘坏扇区对NTFS卷的影响。NTFS可以自动检测并修复硬盘上的逻辑错误和物理错误,但是在FAT16和FAT32时代,我们需要Scandisk来标记磁盘上的坏扇区,但是当发现错误时,数据往往已经被写入坏扇区,损失已经造成。
NTFS文件系统不同。每次读写时,它都会检查扇区是否正确。当在读取过程中发现错误时,NTFS将报告此错误;向磁盘写入文件时发现错误,NTFS会智能地换到一个好的位置存储数据,操作不受影响。在这两种情况下,NTFS将标记坏扇区以防止将来使用。这种工作模式可以使磁盘错误更早被发现,避免灾难性事故的发生。
在FAT或HPFS下,只要一个特殊文件系统中的一个扇区发生故障,就会发生单扇区故障。NTFS通过两种方式防止这种情况发生:首先,它不使用磁盘上的特殊数据体,而是跟踪和保护磁盘上的所有对象。其次,在NTFS下,有很多主文件表(数量由卷的大小决定)。
总结:
在系统的可靠性和可恢复性方面,NTFS文件系统比以前的FAT32文件系统显示出很大的优势。从Windows2000开始,微软就开始推荐NTFS磁盘格式,然后XP也不得不配合这种磁盘格式,才能充分发挥其性能优势。其实随着海量硬盘的发展,使用NTFS分区格式会越来越有必要。在新一代windows系统中,FAT系统必然会逐渐被NTFS所取代。NTFS的安全性、可靠性和效率丝毫不逊于ext3、reiserfs等优秀的文件系统。我相信,如果未来微软能够开放更多NTFS技术的细节,NTFS将会得到更广泛的应用,在文件系统的世界里大放异彩。
位律师回复
0条评论