假设我正在编写我的代码,然后我的PC死了,如果我不希望我的后来的源代码被污染,那么完成一次扫描是多么必要?

时间:2009-05-14 13:05:43

标签: bsod

假设我正在编写一个Ruby on Rails程序,在编辑文件时,蓝色机器已经过筛选。在这种情况下,如果我不希望我的未来文件被损坏,有必要重新扫描整个硬盘吗?

假设操作系统在我的计算机崩溃时正在删除tmp文件,并且仍然有一些指向硬盘驱动器上某个扇区的指针。如果我新创建的文件碰巧在那些扇区中,并且下次操作系统再次清理文件,它可能会认为上次没有清理“剩余”扇区并再次清理它并损坏我们的源代码。 (特别是使用Ruby on Rails,源代码可以由rails而不是我们生成,我们可能不知道为什么我们的rails服务器不起作用,如果文件受到影响)。我们可以依赖SVN,但如果文件在我们检查之前受到影响怎么办?

我认为官方的答案是:“在崩溃或停电后始终扫描磁盘,数据甚至空间并指示尝试修复任何坏扇区”,但问题是,现在用硬盘驱动器如此之大,扫描一切可能需要2个小时。特别是在工作中,如果是中午的话,我们不能等待2个小时。

有人知道现代操作系统,如XP,Vista,Mac OS和Linux(有时候电源线松动而且没有正常关闭而只是关闭0%电池),这些是现代的操作系统,我们的源代码安全吗?他们是否知道如何构建写入扇区,以便最多浪费扇区而不是重叠扇区?

3 个答案:

答案 0 :(得分:3)

使用现代日记文件系统(ext3 / 4,NTFS),唯一的问题是文件可能处于“半写”状态。显然扫描不会对此有所帮助(这就是备份的用途)。文件系统本身不会被破坏。如果您使用FAT之类的东西,那么是的,您应该担心这一点。

答案 1 :(得分:2)

这里真的只有一个问题。

当前是否有任何文件以某种“半写”状态写入。

主要原因是应用程序/编辑器正在编写文件并且机器中途死亡。在这种情况下,写入的文件是完成的一半。如果它是在写原始文件,则原始文件“消失”,而新文件是“完成一半”。如果你没有备份文件,那么,你有问题。

对于有悬空指针的文件,或对未写入的扇区的引用,或某些事情。该问题取决于您的文件系统。

主要的,现代的文件系统是记录的,“不会允许”这种情况发生。您可能有“半写”,但这是因为应用程序只能写入一半,而不是文件系统丢失扇区指针。

如果您正在播放文件系统游戏以获得性能,或者其他任何东西(例如使用未登录的UFS),那么您可能需要运行fschk来清理文件系统元数据。

但如果您使用的是现代操作系统和文件系统(即过去5年的任何内容),您将不会遇到此问题。

最后,如果您确实运行了版本控制,那么只需执行“svn status”,它会显示任何“已损坏”的文件,因为它们已经更改,并且它也会检测到它。

答案 2 :(得分:0)

我在

上看到了一些信息

http://en.wikipedia.org/wiki/Journaling_file_system

日记文件系统

文件系统可能提供日记功能,可在系统崩溃时提供安全恢复。日志文件系统会将一些信息写入两次:首先是日志,这是文件系统操作的日志,然后是普通文件系统中的适当位置。日志记录由文件系统驱动程序处理,并跟踪发生的每个更改磁盘内容的操作。在发生崩溃的情况下,系统可以通过重放日志的一部分来恢复到一致状态。许多UNIX文件系统提供日记功能,包括ReiserFS,JFS和Ext3。

相比之下,非日志文件系统通常需要通过fsck或chkdsk等实用程序进行全面检查,以防止在不正常关闭后出现任何不一致。软更新是日记的替代方法,通过仔细排序更新操作来避免冗余写入。日志结构文件系统和ZFS也不同于传统的日志文件系统,因为它们总是编写新的数据副本,避免了不一致,避免了就地更新。