今天早上,我正在对我的开发驱动器(硬盘驱动器上的 4 个主分区之一)进行例行备份。我运行的脚本是:
filename="/home/Backups/Devi_"`eval date +%Y%m%d`".tgz"
touch $filename
tar cvzf $filename /media/Devi/
一段时间后,我开始看到 tar 输出显示无法找到某些文件,并且相同的消息开始越来越多地出现,直到命令退出。当我检查时,驱动器中的所有内容都消失了,隐藏文件等等。一个可能相关的事实是,我运行了两个 qt 程序,它们的可执行文件和库位于驱动器上,尽管我无法弄清楚 tar 命令如何仅仅因为正在使用的文件而导致这样的删除。我尝试运行 testdisk 来恢复目录,但它似乎只找到顶级文件/目录,并且在它们下面没有找到任何内容。现在我正在运行 Photorec 及其查找文件,因此没有任何文件被覆盖,但文件系统肯定已损坏(我尝试了 fsk.ext4,并且得到了干净的状态,其中文件比驱动器上的文件少得多)。
我的时间窗口系统日志(我相信删除发生在 11:02)是:
Jul 26 10:17:01 GlaDux CRON[7004]: (root) CMD ( cd / && run-parts --report/etc/cron.hourly)
Jul 26 10:17:05 GlaDux kernel: [ 5835.406184] GLViewer[7032]: segfault at 0 ip 00007eff18138ee6 sp 00007fff24187158 error 4 in libc2.17.so[7eff17fe8000+1be000]
Jul 26 10:17:16 GlaDux kernel: [ 5846.856210] GLViewer[7059]: segfault at 0 ip 00007f470b838ee6 sp 00007fff999ec928 error 4 in libc-2.17.so[7f470b6e8000+1be000]
Jul 26 10:43:41 GlaDux NetworkManager[1141]: <warn> nl_recvmsgs() error: (-33) Dump inconsistency detected, interrupted
Jul 26 10:57:04 GlaDux dbus[1060]: [system] Activating service name='org.freedesktop.UDisks' (using servicehelper)
Jul 26 10:57:04 GlaDux dbus[1060]: [system] Successfully activated service 'org.freedesktop.UDisks'
Jul 26 11:12:25 GlaDux dbus[1060]: [system] Activating service name='org.freedesktop.hostname1' (using servicehelper)
Jul 26 11:12:25 GlaDux dbus[1060]: [system] Successfully activated service 'org.freedesktop.hostname1'
Jul 26 11:13:41 GlaDux NetworkManager[1141]: <warn> nl_recvmsgs() error: (-33) Dump inconsistency detected, interrupted
Jul 26 11:15:41 GlaDux NetworkManager[1141]: <warn> nl_recvmsgs() error: (-33) Dump inconsistency detected, interrupted
Jul 26 11:17:01 GlaDux CRON[8999]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
我检查了一下,没有为 cron.hourly 安排作业。不过,我认为 udisk 可能与此有关。我也尝试过从现场软呢帽启动中执行所有操作,但没有任何区别。我还尝试使用不同的超级块进行安装,但没有成功。
所以我有两个问题:
有没有办法使用我尚未提到的方法来恢复我的目录结构?我有备份,因此单个文件恢复似乎有点矫枉过正,我也希望能够获得树的其余部分。
更重要的是,一个简单的 tar 命令到底是如何删除驱动器中的所有内容的。这绝对让我感到困惑,是迄今为止操作系统给我带来的最严重的错误,它违背了我以前使用 Linux 发行版的经验。任何可能的解释将不胜感激。
我在 x64 机器上运行 3.8.0-23-generic 和 cinnamint。有问题的分区是 52 Gb 主 ext4(磁盘上 4 个分区中的 1 个,如果重要的话,最后一个),块大小为 4k。
编辑:tar 的输出类似于:
/media/me/Devi/dir1/file1
/media/me/Devi/dir1/file2/
......
/media/me/Devi/dir100/file1
cannot find file or folder /media/me/Devi/dir101
cannot find file or folder /media/me/Devi/dir102
cannot find file or folder /media/me/Devi/dir102
此外,在删除前一个小时左右,磁盘已安装,并且 kern.log 中记录了以下内容:
Jul 26 09:14:16 GlaDux kernel: [ 2068.519913] EXT4-fs (sda3): ext4_orphan_cleanup: deleting unreferenced inode 663018
Jul 26 09:14:16 GlaDux kernel: [ 2068.519952] EXT4-fs (sda3): ext4_orphan_cleanup: deleting unreferenced inode 663017
Jul 26 09:14:16 GlaDux kernel: [ 2068.519961] EXT4-fs (sda3): ext4_orphan_cleanup: deleting unreferenced inode 663016
Jul 26 09:14:16 GlaDux kernel: [ 2068.519969] EXT4-fs (sda3): 3 orphan inodes deleted
Jul 26 09:14:16 GlaDux kernel: [ 2068.519970] EXT4-fs (sda3): recovery complete
Jul 26 09:14:17 GlaDux kernel: [ 2068.606194] EXT4-fs (sda3): mounted filesystem with ordered data mode. Opts: (null)