如何确定给定扇区占用哪个文件?


34

我有3个坏扇区的硬盘。我知道扇区号,并且计算机仍然可以启动到Windows。我想使用制造商的HDD诊断工具运行扇区修复,但是在此之前,我想知道哪些文件受到了影响。有没有办法找出哪些文件正在占用这些扇区?


1
roadkil的部门编辑器可能会参与其中,只是没有列出程序。
barlop

另请参阅如何找出特定扇区上的文件 -相同的问题,只是对于从Linux访问的NTFS文件系统。
sleske '16

Answers:


22

这是使用WinHex的过程,WinHex是一个方便的十六进制编辑器,可以直接检查和编辑驱动器。 要特别小心; 如果使用不当,此工具可能会损坏您的系统。尽可能以只读方式打开磁盘。

  1. 由于已经存在错误的扇区位置,因此可以直接在WinHex中打开驱动器(“打开磁盘”工具栏按钮),然后导航到该扇区以查看数据(“转到扇区”工具栏按钮)。假设您的扇区位置是物理扇区地址,则需要在此步骤中打开物理驱动器。

    不会直接识别文件,但是左侧窗格应该识别包含该扇区的分区及其对应的相对扇区地址。

  2. 如果您确定的分区是NTFS或FAT分区,我们可以直接打开该分区(再次“打开磁盘”)。这将在新选项卡中打开分区,因此您可以根据需要来回切换。在分区选项卡中,再次使用“转到扇区”功能,但是这次输入转换后的扇区(在驱动器视图中标识的“相对扇区”)。

    现在,在左侧窗格中,您应该看到有关“可见驱动器空间的分配”的部分。在此之下是群集号,物理扇区号,逻辑(相对)扇区号以及文件名(如果该扇区实际上属于文件)。

如果这些步骤不能为您提供立即的答案,则可能是您的坏扇区没有被使用。如果结果不清楚,您可能需要做更多的挖掘才能找到答案。


1
该可下载版本声称是评估版,但功能非常强大。我不确定试用期是多少。有关许可选项,请参见此处:x-ways.net/winhex/order.html
quack quixote 2010年

WinHex是炸弹。...在几分钟之内发现了哪些文件受坏扇区(表面扫描的绝对扇区)影响。很棒的教程。谢谢,我会投票给你“ quack quixote”,但是我没有15的声誉……

是否可以在不读取扇区的情况下强制用户界面显示此信息?我正在读取特定扇区时关闭(分离并关闭电源)的磁盘上执行恢复。
sheldonh 2014年

winhex网站出现故障/不可用(i.imgur.com/1FAX5cN.png)请尝试下面的nfi解决方案。直截了当。自由。“立即回答”;)
Costin Gușă 2015年

21

尝试nfi.exe-Windows NT文件系统(NTFS)文件扇区信息实用程序。从Microsoft OEM支持工具第3阶段SR2下载

> nfi.exe
Dumps information about an NTFS volume, and optionally determines
which volume and file contains a particular sector.

Usage: nfi drive-letter [logical-sector-number]

        Drive-letter can be a single character or a character followed
        by a colon (i.e., C or C: are acceptable).

        Logical-sector-number is a decimal or 0x-prefixed hex
        number, specifying a sector number relative to the volume
        whose drive letter is given by drive-letter. If not
        specified, then information about every file on the volume
        is dumped.

   nfi NT-device-path physical-sector-number

        Determines which volume a given physical sector on a drive is
        within, and then which file on the volume it is in.

        NT-device-path is the NT-style path to a physical device.
        It must not include a partition specification.

        Physical-sector-number is a decimal or 0x-prefixed hex
        number, specifying a sector number relative to the physical
        drive whose device path is given by NT-device-path.

    nfi full-win32-path

        Dumps information about a particular file. full-win32-path
        must start with a drive letter and a colon.

请注意,您必须省略“ \\?” 块设备路径的前缀。例:

C:\Users\admin\Downloads>nfi \Device\Harddisk0\DR0 28521816
NTFS File Sector Information Utility.
Copyright (C) Microsoft Corporation 1999. All rights reserved.


***Physical sector 28521816 (0x1b33558) is in file number 5766 on drive C.
\IMAGES\win7HDD.vhd
    $DATA (nonresident)
        physical sectors 32863720-34098663 (0x1f575e8-0x2084de7)
        physical sectors 28519912-32863719 (0x1b32de8-0x1f575e7)
        physical sectors 25727944-26291143 (0x18893c8-0x1912bc7)
        physical sectors 95163976-115106143 (0x5ac1648-0x6dc615f)

我登录只是为了赞成。这应该标记为答案!
Costin Gușă 2015年

如果您不知道NT-device-path,可以尝试使用找到它dd --list。(使用Unix工具的用户请注意PATHdd此处是C:\WINDOWS\system32\dd.exe,您可能需要使用完整路径)
用户

Windows 10在system32中没有此实用程序。c:\Windows\System32>dd.exe 'dd.exe' is not recognized as an internal or external command, operable program or batch file.
阿恩·西德

1
微软网站上的下载链接死了
盆地

1
也可以在
后退

8

大多数碎片整理程序会显示一个磁盘映射,其中显示了磁盘上的所有群集,然后可以单击(查找标记为bad的群集)以查看位于该群集中的文件。

正如Walter所说,过去十年左右的任何磁盘和操作系统组合都将确保自动从坏扇区中重定位文件(驱动器固件通常可以解决此问题,但是磁盘工具(如chkdsk碎片整理程序)也通常可以做到)。


碎片整理程序:

在此处输入图片说明

碎片整理文件:

在此处输入图片说明

Vopt:

在此处输入图片说明


看起来很有希望,我会努力的。
ChrisWue 2012年

6

Sysinternals的DiskView完全执行此功能:显示驱动器的磁盘映射,并让您查看哪些文件占据了哪些群集。

不幸的是,似乎没有一种显示系统文件名的方法。

DiskView主窗口 DiskView系统文件



这就是为什么我将其发布为单独的答案的原因,因为它是专门为此目的而开发的工具,因此它可以回答问题,但是它是有限的(我仍然广泛使用FAT32),所以它并不是万能的所有解决方案。(还?)
Synetech

5

您可以fsutil在管理员命令提示符下使用。子命令volume具有子子命令querycluster。请参阅Windows命令行参考Fsutil

Fsutil将逻辑驱动器中的群集号作为输入参数,而不是扇区号。但是,计算此数字应该很容易:
cluster#=(absolute_sector-start_of_partition_sector)/ ectors_per_cluster。

输出示例:

c:\tmp> fsutil volume querycluster C: 5235
Cluster 0x0000000000001473, verwendet von
 ----D \Program Filesx86)\LibreOffice 4\program\fwilo.dll::$DATA

3

据我所知,当驱动器在某个扇区上遇到一定数量的读取错误时,它会被标记为不良,并将其内容复制到驱动器上的另一个位置。这通常发生在该扇区上的数据变得完全不可读之前。

我试图为此寻找一个资源,只是昨天才读,却不记得在哪里。

来自人类hdparm(8)

还请注意,--repair-sector标志可用于在不再需要时恢复(任何)坏扇区,包括真正坏的扇区(驱动器可能会将它们重新映射到介质上的新区域)。

底线:您不必担心坏扇区,硬盘驱动器固件会为您完成。唯一需要做的就是在驱动器数量过多之前就换一个新驱动器,然后驱动器就会死掉。


我很确定重新分配发生在写入而不是读取时。驱动器的SMART数据似乎证实了这一点。挂起的扇区数很高(大于0),而扇区重新分配计数为0。对我来说,这意味着:有坏扇区标记为要重新分配,但尚未进行重新分配。
ChrisWue 2012年

您尝试过CHKDSK吗?en.wikipedia.org/wiki/CHKDSK
巴恩2012年

看一下/ r选项
Baarn 2012年

不过,似乎无法获取有关该扇区中存储的文件的信息。
巴恩2012年

2

运行时的DiskExplorer允许您按扇区检查驱动器。它是付费软件(NTFS版本为70美元),但可以免费试用。它们具有适用于NTFS,FAT和Linux(ext2 / 3)的版本。

替代文字


这看起来很有希望,但可惜它不起作用。DiskExplorer为驱动器的每个扇区显示“无效的MFT条目”。

我希望如果有一个配置步骤可以显示所有扇区的信息,那么您将丢失该配置步骤,但是我已经很长时间没有使用此工具了,因此我无法为您提供直接说明。我将使用单独的工具添加另一个答案;也许有人会适当地使用这一功能。
quack quixote 2010年

这不是配置问题,而是磁盘资源管理器非常复杂且难以使用。它不够自动化。(旧的DOS程序Norton Disk Doctor与此类似,但是更容易使用,因为它会自动读取并调整为文件系统结构。
可惜

0

我知道线程很旧,但是对于记录有这种问题的每个人,有一种方法可以从linux检查它。人们总是可以在cd / usb棒上使用一些实时Linux,例如超级容易运行的slax。无论如何,回到正题。

今天,我发现了一些带有错误扇区警告的精明的守护进程日志,并决定对此进行调查。经过研究后,我最终运行(#提示指示root特权,如果以普通用户身份运行,则可以使用sudo代替):

# smartctl -H /dev/sda2

SMART overall-health self-assessment test result: PASSED

这表明该驱动器运行状况良好,这很好。但是我跟随并进一步调查并运行badblocks

# badblocks -v /dev/sda2 > ~/log/sda2.badsectors
# cat ~/log/sda2.badsectors

271521948

因此就出现了一些badblock,我想知道它属于哪个文件,发现它可以做debugfs,问题是,我的分区却NTFS,所以我用ntfstools这是关键:

# ntfscluster -s 271521948 /dev/sda2 > 271521948.secinfo 2>&1
# cat 271521948.secinfo | grep -v "extent"

Searching for sector 271521948
Inode 142427 /tmp/dl/setup_torch_2.exe/$DATA
* one inode found

/ grep -v "extent"摆脱ntfscluster/ 显示的许多无用信息

因此,在ntfs的情况下,所有需求都是ntfscluster -s $SECTOR

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.