在您就使用gparted保存我的文件和格式化驱动器的选项向我提出建议之前,请理解我本可以在数小时前完成这些操作,而且只需要几分钟。实际上,我想了解这里到底发生了什么。这种情况正在破坏我多年来获得的所有经验。
我的印象是,如果我将感染病毒的闪存驱动器插入我的 Ubuntu 机器,我需要做的就是简单地删除病毒文件,我就可以开始了。
今天,我从一台 Windows 机器上收集了一些文件在 NTFS 格式的闪存驱动器中,完全知道该机器感染了病毒。当我把闪存盘插入我的机器时,我发现它确实收集了很多文件和文件夹。我已经删除了其中的大部分。唯一表现出强烈抵抗力的是 RECYCLER 目录(及其子目录)。
这个目录的属性。
drwx------ 1 masroor masroor 4.0K May 7 16:01 RECYCLER/
如果我执行rm
命令,
sudo rm -rvf RECYCLER/
我得到了很长的输出,
rm: cannot remove `RECYCLER/S-2-4-27-3777257131-1806073332-421880436-8537/OagFrAIX.exe': Input/output error
rm: cannot remove `RECYCLER/S-2-4-27-3777257131-1806073332-421880436-8537/viJbcvrJ.cpl': Input/output error
<rest snipped>
有趣的是,上面报告的文件是由ls
带有无数属性集的命令显示的。
ls -l RECYCLER/S-2-4-27-3777257131-1806073332-421880436-8537/
ls: cannot access RECYCLER/S-2-4-27-3777257131-1806073332-421880436-8537/OagFrAIX.exe: Input/output error
ls: cannot access RECYCLER/S-2-4-27-3777257131-1806073332-421880436-8537/viJbcvrJ.cpl: Input/output error
total 0
-????????? ? ? ? ? ? OagFrAIX.exe
-????????? ? ? ? ? ? viJbcvrJ.cpl
如果试图找到那些有问题的文件夹的属性,
ls -dl RECYCLER/S-2-4-27-3777257131-1806073332-421880436-8537/
我明白了
drwx------ 1 masroor masroor 4096 May 7 15:58 RECYCLER/S-2-4-27-3777257131-1806073332-421880436-8537/
chmod
使 RECYCLER 文件夹全局可写的命令失败。
sudo chmod -vR ugo+w RECYCLER/
输出在行中。
mode of `RECYCLER/' changed from 0700 (rwx------) to 0722 (rwx-w--w-)
mode of `RECYCLER/S-2-4-27-3777257131-1806073332-421880436-8537' changed from 0700 (rwx------) to 0722 (rwx-w--w-)
chmod: cannot access `RECYCLER/S-2-4-27-3777257131-1806073332-421880436-8537/OagFrAIX.exe': Input/output error
<snipped>
这些文件夹包含许多.exe
文件和其他文件,其中大部分我已经成功删除(除了上面报告的文件)。
如果我检查其中一个文件夹的属性,
lsattr -ad RECYCLER/S-2-4-27-3777257131-1806073332-421880436-8537/
我得到
lsattr: Inappropriate ioctl for device While reading flags on RECYCLER/S-2-4-27-3777257131-1806073332-421880436-8537/
我已按照此处clamtk
的建议在此设备上运行。但是,它无法发现威胁。
我知道我可以简单地将我的闪存驱动器内容保存在某个地方,然后对其进行格式化。但是,我更感兴趣的是找出这些文件夹中设置了哪些属性,这些属性阻止了进一步的更改。(当然,我也想对我的闪存驱动器进行消毒。)
更新 1
根据Patro的评论。
- 当访问文件夹时,那些具有无数属性的文件没有显示,即使我试图将它们视为隐藏文件。
- 删除这些文件失败。
rm -rvf *
目录内的命令S-2-4-27-3777257131-1806073332-421880436-8537
因输入/输出错误而失败。
更新 2
在soulsource和girardengo发表评论后,我尝试运行
ntfsck
和ntfsfix
. 另外,这个问题有帮助。
这是输出。
ntfsck
sudo ntfsck /dev/sdc1
Unsupported: replay_log()
Unsupported: check_volume()
Checking 7796 MFT records.
Unsupported cases found.
ntfsfix
sudo ntfsfix -d /dev/sdc1
Mounting volume... OK
Processing of $MFT and $MFTMirr completed successfully.
NTFS volume version is 3.1.
NTFS partition /dev/sdc1 was processed successfully.
但最初的情况仍然存在。没有任何改善。
更新 3(已解决)
正如这篇文章中所建议的,我将我的驱动器插入 Windows 机器并执行(从终端),
chkdsk <drive letter> /R
检查和修理的活动很忙。还有一些关于坏扇区的信息。任务不到一分钟就完成了。然后我发现已经为恢复区域创建了一些新文件夹。
我将闪存驱动器重新插入到 Linux 机器上,并且可以毫无问题地删除 RECYCLER 文件夹。
作为一个额外的步骤,现在我已经格式化了驱动器(使用 gparted,到 NTFS),因为我认为我已经获得了洞察力。
看起来该病毒确实能够引起(临时/软)硬件问题。有关详细的技术说明,请参阅上述帖子。
好的,我必须在这里清除几件事:
关于 NTFS 的逆向工程部分在这里不适用,特别是对于格式化的 NTFS 闪存驱动器。即使它这样做了,也确实是不正常的事情。我使用过许多 NTFS 格式的闪存驱动器,这些驱动器在 Windows XP、Vista、7 和 8 中进行了格式化。
所以 Linux 没有正确检测 NTFS 的问题不是。NTFS-3G proyect 既不慢也不不兼容那个级别,你甚至可以看到最后一次更新是在同年的几个月前。它肯定会不时出现一些问题,例如缓存支持和巨大的 CPU 使用率,但正如我所说,对于闪存驱动器来说,这种情况不太可能发生,或者发生的可能性很小。
我遇到过类似的问题,闪存驱动器显示 ?????? 符号或完全错误的符号(例如:!@#%$@%#@ 而不是文件名)。一些用户建议使用
ntfsfix
orntfck
但如果您无法修复它们,请在驱动器上的 Windows 上运行 chkdsk。它的引导记录/文件系统可能有一些问题。文件/文件夹的所有者并不重要,只要他使用
sudo
. 它可以是任何用户,但当他使用该sudo
命令rm
时,无论拥有它的人是谁,都会将其删除。同样,这适用于此 NTFS 格式的闪存驱动器。当我第一次看到这个问题时,我正打算要求运行命令,
sudo
但我读到你已经这样做了。然后打算建议 ntfs 修复工具,但你已经做了。然后我在最后看到了输入/输出错误。那并看到文件的名称是如何出现的,只是告诉我有一个实际的文件系统问题,只能通过以下方式纠正:在 Windows 上使用 chkdsk。chkdsk 只能解决的几个问题既不能解决也不能解决
ntfsfix
。ntfsck
此时它看起来不像是硬件问题,更有可能是文件系统问题。如果 chkdsk 不起作用,那么唯一的解决办法是重新格式化闪存驱动器(不需要低级别)。如果简单的格式没有帮助(并在 Windows 和 gparted 中测试),那么我们正在寻找硬件级别的问题。
如果病毒实际上必须对这个问题采取任何措施,那将是因为它影响/附加到文件系统表 (MFT)。这会产生问题,例如看到文件系统的某些部分正常而其他部分糟糕。在一个系统上看不到文件而在另一个系统上看到它们。查看所有文件或一些损坏的文件(例如:!@#!#!大声笑!@#!)以及文件系统表损坏时可能发生的其他奇怪的事情。它可能像病毒更改文件系统表中的一个字段一样简单,也可能像病毒更改 MFT 或多个文件的大小一样可怕。
除了病毒你应该知道,如果问题严重到你无法格式化驱动器(新文件系统)这种情况很少见病毒这样做,那么你的闪存驱动器硬件问题更有可能是由以下原因引起的热、冲击等。
对于闪存驱动器或任何存储单元(尤其是闪存驱动器)中的数据损坏,在许多情况下,原因是在正确保存所有信息之前移除该单元。如果用户在没有确保所有内容都已完成写入且设备会话已关闭的情况下移除闪存驱动器,则这在 Windows 和 Linux 中都可能发生。
在 Linux 的情况下,您将开始收到有关整个闪存驱动器中不允许的读/写操作或文件(如电影)丢失整个大小的 50%(如 1.2GB 电影,重量仅为 500MB 以及其中的所有内容)的警告损坏)。在大多数情况下,fsck 可以解决这个问题。在 Windows 的情况下,它将显示输入/输出错误,并且可能会破坏整个单元,因为 MFT 没有正确保存信息。因此,建议等待会话关闭或在可用时使用“安全删除”选项。
我认为问题在于Linux 中的 NTFS 实现是反向工程的并且不完整 --- 向 Microsoft 索取源代码 ;-)。
您有“发现不支持的案例”警告的提示。可能 Windows 计算机防病毒软件使用了 Linux 驱动程序无法掌握的一些高级/晦涩的 NTFS 文件系统特征。
您应该只在本机系统上对文件系统进行低级管理(在此处搜索 gparted 调整 NTFS 分区大小的频率仅使系统无法启动...)。
另请参阅NTFS-3g 主页,尤其是此常见问题解答。