Linux 文件系统中操作文件导致 NTFS 文件系统中文件丢失

背景

在上周的时候,打算在 Ubuntu 下查看在 Windows 下 QQ 接受到的项目代码,然后顺便就整理了一下目录,新建了一个文件夹,将实验室相关的文件剪切复制到该文件夹。后切换回 Windows,发现文件夹没有建成功,而刚才剪切的文件不见了。

无独有偶,本周一上课纪录模式识别笔记时,顺手归档了一下这门课文件夹下的作业,课件,笔记(在 Windows 下的 Ntfs 分区中),然后周二上课打开 Windows 系统后,发现文件丢失,新建的归档文件夹也不见了,然后昨天修改的 markdown 笔记也损坏无法打开。

思考过程

测试

由于两次的文件丢失均在两系统中操作(剪切)文件时发生,遂打算在 Linux 系统中对 Windows 系统的文件进行不同操作,以观察有无发生文件丢失现象,找出触发原因,后续避免。

  • 在 NTFS 分区中创建文件,在另一系统中无丢失。
  • 修改 NTFS 分区中的文件内容,在另一系统中能正常显示
  • 复制 NTFS 分区中文件,文件正常
  • 剪切 NTFS 分区中文件,文件正常

也不知道幸运与否,测试了数次均没有出现文件丢失问题,无法找到直接的触发原因。

解决

在第一次出现问题后,马上去百度查询剪切文件丢失,被告知是剪切过程极不稳定,容易发生错误导致文件丢失,但感到很不靠谱,剪切错误后应该会马上有告知信息,而我剪切后在已经能够在 Ubuntu 的文件系统中看到粘贴后结果。但心急于恢复文件,还是采用了所提供的一些方法,将其当作误删文件来恢复。

第二次出现问题后,因为有第一次的经验,很熟练地就恢复文件了。结合上一次的经历来看,个人猜想应该是两个文件系统不一致所导致(然而上面的测试已经告诉我们是可以的)。到 Google 上搜了一下,相关的信息还是很少,然后换成用英语搜,终于见到几个出现相同的状况了(所以是中国人都没有遇到这个问题吗 2333 )。然而也没有给出一个确定的解释,不过其中有一个解释感觉挺靠谱的(链接在此),其解释是在使用 Linux 系统时,Windows 系统未完全关闭(处于睡眠状态),Linux 的文件系统修改文件后,Windows 系统启动后又再次修改该文件以修复,导致文件崩溃。然而,我的 Windows 似乎是关机的,甚至我还不知道怎么睡眠一个系统切换到另一系统,但说得很有道理,姑且先接受。

所以,到最后也没有找到确定的原因导致文件的丢失,只能说在 Linux 下使用 ntfs 文件系统有可能会出错,换而言之,还是不知道怎么避免(除非不用)。但文件丢失后的解决方法还是有的,虽然不一定能全复原:

  • 采用文件恢复软件。将其当初误删文件处理,成功率还不错。本人使用的是 DiskGenius 专业版(非专业版限制恢复文件的大小,略坑),成功找回了两次丢失的文件,但该软件复原时需全盘扫描,速度较慢。
  • 在 Windows 系统中使用chkdsk命令,进行文件系统的检查修复。该方法在 Google 过程中看到,多人推荐,感觉应该也可以。

警示

虽然文件最后都找回来了,但文件丢失还是一件很恐怖的事,应该留点教训的。

  • 备份。自己一直都没有备份的习惯,所有的重要的文件(如学习资源)等都只存在了电脑的硬盘上,万一出事,如电脑坏了,丢了,直接 GG。某些大作业或项目直接爆炸,就好像这学期的编译器。
  • 时常留意文件状况。好像这两次的文件丢失,幸好发现得早,能够及早恢复,如果再晚一点,对硬盘进行了新的写入,就难以恢复,甚至可能自己的忘了有什么文件,有没有丢失,需要恢复什么。
  • 少做跨文件系统的文件写入操作。虽然好像跟操作本身是没有关系,但很多事都是可以做,但没有必要。如剪切移动等,通过复制等较低风险进行代替,最好是以读为主。
  • 还有一个也是很有趣的,当遇到问题去搜索时,总是习惯先百度再 Google,都搜不到了,便听天由命。但这次,换了个语言,便发现未到尽头。感觉自己还是被语言束缚限制住了。