删除据称大于其应有大小的文件是否安全

删除据称大于其应有大小的文件是否安全

unrar在我的 1 TB 驱动器上调用 RAR 存档后NTFS,我剩下了一个文件,据说其大小为86T

删除此类文件安全吗?安全删除此文件的最佳方法是什么?

当然,删除时,文件应该被取消链接,并且属于其他文件的任何实际数据都不应受到影响,但我真的想确定这一点……

编辑1:

du -h包含档案+提取文件的目录中的输出:

26M .
编辑 2:进展和发现
  • chkdsk F: /scan在提取的文件中确实发现损坏。
  • chkdsk F: /f确实Deleting corrupt attribute record (0x80, "")(很可能属于此文件,因为记录段号匹配)(属性 0x80
  • 之后文件大小为 0
  • 0 大小的文件可以被删除
  • chkdsk F: /scan未发现任何问题
编辑 3:对于好奇的人

Berore 使用以下命令修复文件chkdsk F: /f

  • 无法使用 Double Commander 删除该文件(该文件已被 Double Commander 使用 - 可能正在尝试读取整个文件)
  • rm由于权限被拒绝(我cmd以管理员身份运行),无法删除该文件(在 Windows 上)

答案1

这不一定错误地比整个驱动器还大。许多文件系统(包括 NTFS 和 ext4)都支持稀疏文件其中完全由“零”字节()组成的区域00 00 00 00 ...没有分配任何磁盘范围 - 此类文件的“明显”大小很容易大于文件系统,而实际数据分配(又名 Windows“磁盘大小”)较小。

du您可以通过比较和来检查文件是否稀疏du --apparent,或者通过使用选项列出文件ls -s/--size,或者使用 xfs_io 列出各个范围:

$ echo Test > large.bin
$ truncate -s 10G large.bin
$ ls -l -s
4.0K -rw-r--r-- 1 root users 10G Jan 10 12:44 large.bin

$ du -h large.bin; du -h --apparent large.bin
4.0K    large.bin
10G     large.bin

$ xfs_io -r -c "fiemap -v" large.bin 
large.bin:
 EXT: FILE-OFFSET      BLOCK-RANGE      TOTAL FLAGS
   0: [0..7]:          4118216..4118223     8   0x1
   1: [8..20971519]:   hole             20971512

如果有疑问,请将文件系统连接到 Windows 系统(VM 也可以)并运行chkdsk X: /scanchkdsk X: /f让其验证没有文件重叠 - 或者,在删除文件后,使用它来验证“可用空间位图”与现有文件一致。

一般来说,程序无法创建实际上比文件系统能容纳的文件更大的文件:即使是文件归档器也没有这种直接访问权限。如果你最终得到了一个错误地大且不稀疏的文件,这只能是操作系统文件系统驱动程序的错误,在这种情况下没有什么从此以后,您对该文件系统所做的操作都可以保证是安全的(因为删除操作毕竟是由同一个“坏”驱动程序完成的)。使用 Windows 的 CHKDSK 来验证文件系统。

对于 Linux 上的 NTFS,请考虑在内置驱动程序ntfs3和早期ntfs-3g驱动程序之间切换,以验证它们的行为是否相同。还请尝试在 Linux 本机文件系统(例如 ext4)上提取存档,看看它是否也会创建一个大文件。

答案2

如果磁盘出现问题,我建议首先确保已备份磁盘上的数据。

由于磁盘是 NTFS,因此最好在 Windows 上按如下方式处理。

第二步,运行命令提示符并输入以下命令:

chkdsk C:

如果发现任何错误,下一步将使用以下命令修复问题:

chkdsk /f C:

作为最后一步,如果一切正确完成,您可以删除此文件。

相关内容