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: /scan
或chkdsk X: /f
让其验证没有文件重叠 - 或者,在删除文件后,使用它来验证“可用空间位图”与现有文件一致。
一般来说,程序无法创建实际上比文件系统能容纳的文件更大的文件:即使是文件归档器也没有这种直接访问权限。如果你最终得到了一个错误地大且不稀疏的文件,这只能是操作系统文件系统驱动程序的错误,在这种情况下没有什么从此以后,您对该文件系统所做的操作都可以保证是安全的(因为删除操作毕竟是由同一个“坏”驱动程序完成的)。使用 Windows 的 CHKDSK 来验证文件系统。
对于 Linux 上的 NTFS,请考虑在内置驱动程序ntfs3
和早期ntfs-3g
驱动程序之间切换,以验证它们的行为是否相同。还请尝试在 Linux 本机文件系统(例如 ext4)上提取存档,看看它是否也会创建一个大文件。
答案2
如果磁盘出现问题,我建议首先确保已备份磁盘上的数据。
由于磁盘是 NTFS,因此最好在 Windows 上按如下方式处理。
第二步,运行命令提示符并输入以下命令:
chkdsk C:
如果发现任何错误,下一步将使用以下命令修复问题:
chkdsk /f C:
作为最后一步,如果一切正确完成,您可以删除此文件。