0

假设我正在编写一个 Ruby on Rails 程序,并且在编辑文件时,机器蓝屏。在这种情况下,如果我不希望以后的文件损坏,有必要重新扫描整个硬盘驱动器吗?

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

我认为官方的回答将是:“在崩溃或断电后始终扫描磁盘,以获取数据甚至空间并指示尝试修复任何坏扇区”,但问题是,如今硬盘驱动器如此之大,扫描所有内容可能需要 2 小时。尤其是在工作中,如果是中午,我们不能等待 2 个小时。

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

4

3 回答 3

3

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

于 2009-05-19T23:40:46.053 回答
2

这里真的只有1个问题。

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

造成这种情况的主要原因是应用程序/编辑器正在写入文件并且机器在中途死机。在这种情况下,要写入的文件已经完成了一半。如果写完了原文件,原文件就“没了”,而新的文件就“完成了一半”。如果您没有备份文件,那么,您就有问题了。

至于具有悬空指针的文件,或对未写入扇区的引用,或类似的东西。该问题取决于您的文件系统。

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

如果您正在玩文件系统游戏以提高性能或其他任何东西(例如使用不带日志记录的 UFS),那么您可能需要运行 fschk 来清理文件系统元数据。

但是,如果您使用的是现代操作系统和文件系统(即过去 5 年的任何东西),您就不会有这个问题。

最后,如果您确实运行了版本控制,那么只需执行“svn status”,它会向您显示任何“损坏”的文件,因为它们会发生变化,并且它也会检测到这一点。

于 2009-05-19T23:36:47.700 回答
0

我看到了一些关于

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

日志文件系统

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

相比之下,非日志文件系统通常需要通过诸如 fsck 或 chkdsk 之类的实用程序在不正常关闭后检查是否存在任何不一致。软更新是日志的替代方法,它通过仔细排序更新操作来避免冗余写入。日志结构文件系统和 ZFS 也与传统的日志文件系统不同,它们通过始终写入数据的新副本、避免就地更新来避免不一致。

于 2009-05-26T09:32:25.573 回答