Как найти файл по сектору

При обнаружении bad-секторов программами типа Victoria будет весьма полезно узнать, какие именно файлы записаны в поврежденных секторах. Сопоставление принадлежности проблемного сектора конкретному объекту файловой системы также может пригодится при поиске содержащего строку файла, обнаруженную в секторе в процессе анализа дампа диска. Задача кажется сложной, на самом деле всё очень даже просто, если под рукой у вас имеется утилита NFI, входящая в состав пакета Sysinternals Suite.

Предположим, что при сканировании диска той же Victoria вы обнаружили bad-блок. Чтобы получить его номер, наведите на него мышку.

Victoria

В нашем примере это 14822144. Теперь это значение нужно скормить утилите NFI, правда, здесь есть одна маленькая проблема. Помимо номера блока в качестве обязательного аргумента нужно указать еще и букву логического раздела, а Victoria прямо не сообщает, в каком томе был обнаружен проблемный сектор. Зато она показывает начальные и конечные номера секторов, и это будет нашей подсказкой.

Переключитесь в Victoria в раздел «Редактор» и нажмите кнопку «Таблица разделов». Слева тут же появится таблица, в которой будут перечислены все логические разделы на сканируемом диске. Букву тома определяем по его размеру или имени, если Victoria его покажет.

Таблица разделов

Смотрим и видим следующую картину. Первый загрузочный том у нас начинается с сектора 2048 и заканчивается сектором 1126399. Следующий том, определенный как системный, начинается с сектора 1126400 и заканчивается сектором 63895551. Битый сектор же у нас имеет номер 14822144.

Выполнив простейший арифметический подсчет, определяем, что блок находится на системном томе C.

Запустив командную строку от имени администратора переходим в папку с утилитой NFI.EXE и выполняем команду nfi.exe C 14822144.

NFI

В результате получаем лежащий в проблемном секторе файл — pagefile.sys.

Как видите, ничего запредельно сложного, сомнения насчет расположения файла в данном секторе могут возникнуть, если только размер обнаруженного файла сопоставим с размером сектора. А всё потому, что Victoria работает с секторами всего диска, а утилита NFI.EXE — с секторами томов. Поэтому знать границы разделов не помешает.

Что касается сопоставления известного файла сектору, то тут еще всё проще, номер блока в два счета определит бесплатный шестнадцатеричный редактор WinHex.

Запустив приложение, выберите в меню «Tools» опцию «Open Disk».

WinHex

И укажите в открывшемся окне том, в котором лежит файл.

Open Disk

Вот и всё, осталось только найти во встроенном файловом менеджере нужный файл, выделить его и посмотреть в левый нижний угол рабочего окна редактора.

Нужный файл

Там, в строке состояния будет указан порядковый номер сектора, содержащего интересующий вас объект.

Утилита NFI отдельно: yadi.sk/d/iy7DlmD_Gqmwqg

Загрузка…

Скажите, мне очень интересно, а можно установить какой именно файл в операционной системе лежит на бэд-блоке или другими словами, как сопоставить принадлежность сбойного участка (бэд-блока) конкретному файлу в Windows?

В интернете посоветовали скачать консольную утилитку nfi.exe и задать в ней адрес сбойного сектора, утилиту скачал, но как запустить консольную программу не знаю, при открытии на секунду появляется окно командной строки и тут же исчезает. 

Как сопоставить принадлежность сбойного сектора (бэд-блока) конкретному файлу в Windows?

Привет друзья, узнать, какой именно файл операционной системы лежит на сбойном секторе очень просто. 

Один знакомый блоггер Александр подсказал мне ответ.

Вообще на эту тему у меня был интересный случай, и я Вам его расскажу.

Есть у меня ноутбук, в нём установлено два жёстких диска, один твердотельный накопитель SSD, а другой «бэдастый» жёсткий диск с несколькими сбойными секторами. Держу я на этом втором жёстком диске только неважные файлы, среди этих файлов присутствует виртуальный жёсткий диск NewVirtualDisk1.vdi, который работает с виртуальной машиной VirtualBox. Всё пространство жёсткого диска отведено под один раздел D:. 

С недавнего времени я заметил, что при запуске виртуальной машины жёсткий диск стал пощёлкивать, а виртуальная машина виснуть. При сканировании пространства жёсткого диска программой Victoriaбыло обнаружено несколько сбойных секторов, один из них имел адрес 156371386 и я решил сопоставить данный сбойный сектор файлам в операционной системе.

В этом может помочь консольная утилита NFI.EXE (NTFS File Sector Information Utility) из пакета Support Tools от Microsoft. Скачайте её по прямой ссылке https://yadi.sk/d/7d7eo6KycTSEE

После скачивания нужно открыть командную строку и указать в ней путь к утилите. К примеру Вы скачали её на диск D: 

и теперь хочу запустить, как это сделать.

Открываю командную строку от имени администратора,

затем ввожу команду 

D:nfi.exe D: 156371386, где D:nfi.exe — точное расположение утилиты, а буква D: 156371386 точное расположение сбойного сектора и жму Enter. Почему я решил, что сбойный сектор у меня на диске D:, потому что всё пространство жёсткого диска имеет одну букву D:.

Результат, сбойный сектор 156371386 принадлежит файлу NewVirtualDisk1.vdi и данный файл активно используется виртуальной машиной, поэтому при запуске виртуальной машины операционная система и зависала, она просто не могла прочитать информацию в файле NewVirtualDisk1.vdi. 

Друзья, если Вы точно знаете адрес сбойного сектора на вашем жёстком диске, но на винчестере у Вас не один раздел, а несколько, то значение номеров начальных секторов разделов можно узнать нажав кнопку View part data вкладки «Advanced» программы Victoria For Windows. Например, этот жёсткий диск имеет четыре раздела. Думаю Вы разберётесь.

Да, чуть не забыл, в следующей статье — мы с Вам «вылечим» этот сбойный сектор.

В линуксе можно использовать следующее решение:

filename=d.img
logname=d.log
clsz=$(sudo ntfsinfo -m -f $filename 2>/dev/null | grep 'Cluster Size' | 
sed -r "s/.*:/obase=16;/" | bc)
for r in $(cat $logname | grep '-' | grep -v 'ddrescue' | 
sed -r "s/0x(w+)s+0x(w+)s+.*/1/$clsz; (1+2)/$clsz/;1s/^/ibase=16n" | 
bc | tr 'n' '-' | sed -r 's/(w+-w+)-/1n/g' | uniq | tr 'n' ' ' | 
sed -r 's/-(w+) 1b//g' | sed -r 's/ /n/g' | 
sed -r 's/(w+)-(w+)/1;2;2+1;/' | bc | tr 'n' '-' | 
sed -r 's/(w+-w+-w+)-/1 /g' | sed -r 's/-w+-(w+) 1//g' | 
sed -r 's/(-w+)-w+/1/g'); 
do sudo ntfscluster -f -c $r $filename 2>/dev/null; done

Замечу, что надо предварительно выполнить любую команду sudo, чтобы последняя команда не съелась в качестве пароля. Тогда на остальные команды пароль запрашиваться не будет и всё будет работать.

Существенный минус этого решения — то, что для каждого диапазона кластеров снова сканируется файловая система, т. е. работает очень медленно.


Теперь поясню, что же здесь происходит.

Сначала определим размер кластера

Информацию о диске можно получить при помощи ntfsinfo.
Опция -f нужна чтобы образ не ставился на проверку с просьбой перезагрузиться дважды.
Перенаправление ошибок в /dev/null чтобы избавиться от WARNING: Dirty volume mount was forced by the 'force' mount option.

sudo ntfsinfo -m -f d.img 2>/dev/null

Выберем отсюда строку с информацией о размере кластера:

... | grep 'Cluster Size'

Достанем из неё число и переведём в 16ричную систему счисления:

... | sed -r "s/.*:/obase=16;/" | bc

Сохраним в переменную:

clsz=$(...)

Команда целиком:

clsz=$(sudo ntfsinfo -m -f d.img 2>/dev/null | grep 'Cluster Size' | 
sed -r "s/.*:/obase=16;/" | bc)

Вероятно, получится значение 1000.

Теперь определим диапазоны кластеров

Выберем из карты все плохие куски (содержат - и не являются строкой с самой командой):

cat d.log | grep '-' | grep -v 'ddrescue'

Получится нечто такое:

0x52C15CAC00  0x00000400  -
0x52C15DC600  0x00000200  -
0xA74593D600  0x00000200  -
0xA74593DA00  0x00000600  -
0xA74593E600  0x00000200  -
0xA745945000  0x00000400  -
0xA745945600  0x00000200  -
0xA745945C00  0x00000400  -
0xA745947600  0x00000200  -
0xA7459C3200  0x00000C00  -
0xA7459CB000  0x00000200  -
0xA7459CB400  0x00000200  -
0xA7459CB800  0x00000400  -

Преобразуем в формулы для вычисления номеров кластеров в 16ричной системе счисления:

... | sed -r "s/0x(w+)s+0x(w+)s+.*/1/$clsz; (1+2)/$clsz/;1s/^/ibase=16n/"
ibase=16; 52C15CAC00/1000; (52C15CAC00+00000400)/1000; ibase=A;
ibase=16; 52C15DC600/1000; (52C15DC600+00000200)/1000; ibase=A;
ibase=16; A74593D600/1000; (A74593D600+00000200)/1000; ibase=A;
ibase=16; A74593DA00/1000; (A74593DA00+00000600)/1000; ibase=A;
ibase=16; A74593E600/1000; (A74593E600+00000200)/1000; ibase=A;
ibase=16; A745945000/1000; (A745945000+00000400)/1000; ibase=A;
ibase=16; A745945600/1000; (A745945600+00000200)/1000; ibase=A;
ibase=16; A745945C00/1000; (A745945C00+00000400)/1000; ibase=A;
ibase=16; A745947600/1000; (A745947600+00000200)/1000; ibase=A;
ibase=16; A7459C3200/1000; (A7459C3200+00000C00)/1000; ibase=A;
ibase=16; A7459CB000/1000; (A7459CB000+00000200)/1000; ibase=A;
ibase=16; A7459CB400/1000; (A7459CB400+00000200)/1000; ibase=A;
ibase=16; A7459CB800/1000; (A7459CB800+00000400)/1000; ibase=A;

И вычислим

... | bc
86775242
86775243
86775260
86775260
175397181
175397181
175397181
175397182
175397182
175397182
175397189
175397189
175397189
175397189
175397189
175397190
175397191
175397191
175397315
175397315
175397323
175397323
175397323
175397323
175397323
175397323

К сожалению, числа получились на разных строках — объединяем их через дефис, затем каждый второй дефис заменяем переводом строки, затем уберём дубликаты строк:

... | tr 'n' '-' | sed -r 's/(w+-w+)-/1n/g' | uniq
86775242-86775243
86775260-86775260
175397181-175397181
175397181-175397182
175397182-175397182
175397189-175397189
175397189-175397190
175397191-175397191
175397315-175397315
175397323-175397323

Объединим последовательные цепочки, если конечный кластер первой совпадает с начальным следующей. Для этого объединим строки через пробел и поудаляем -число такое-же-числоb. У меня sed не съел d, поэтому я использовал w. После замены вернём на место переводы строк.

... | tr 'n' ' ' | sed -r 's/-(w+) 1b//g' | sed -r 's/ /n/g'
86775242-86775243
86775260-86775260
175397181-175397182
175397189-175397190
175397191-175397191
175397315-175397315
175397323-175397323

Приготовимся посчитать номер следующего за концом кластера:

... | sed -r 's/(w+)-(w+)/1;2;2+1;/'
86775242;86775243;86775243+1;
86775260;86775260;86775260+1;
175397181;175397182;175397182+1;
175397189;175397190;175397190+1;
175397191;175397191;175397191+1;
175397315;175397315;175397315+1;
175397323;175397323;175397323+1;

И вычислим это:

... | bc
86775242
86775243
86775244
86775260
86775260
86775261
175397181
175397182
175397183
175397189
175397190
175397191
175397191
175397191
175397192
175397315
175397315
175397316
175397323
175397323
175397324

По аналогии с прошлым разом, объединяем строки через дефис, а каждый третий дефоис заменяем пробелом:

... | tr 'n' '-' | sed -r 's/(w+-w+-w+)-/1 /g'

Объединяем цепочки, где начальный кластер следующий совпадает со следующим за конечным кластером предыдущей:

... | sed -r 's/-w+-(w+) 1//g'
86775242-86775243-86775244 86775260-86775260-86775261 175397181-175397182-175397183 175397189-175397191-175397192 175397315-175397315-175397316 175397323-175397323-175397324 

Убираем лишнюю информацию о следующем кластере:

... | sed -r 's/(-w+)-w+/1/g'
86775242-86775243 86775260-86775260 175397181-175397182 175397189-175397191 175397315-175397315 175397323-175397323

Команда целиком:

cat d.log | grep '-' | grep -v 'ddrescue' | 
sed -r "s/0x(w+)s+0x(w+)s+.*/1/$clsz; (1+2)/$clsz/;1s/^ibase=16n/" | 
bc | tr 'n' '-' | sed -r 's/(w+-w+)-/1n/g' | uniq | tr 'n' ' ' | 
sed -r 's/-(w+) 1b//g' | sed -r 's/ /n/g' | 
sed -r 's/(w+)-(w+)/1;2;2+1;/' | bc | tr 'n' '-' | 
sed -r 's/(w+-w+-w+)-/1 /g' | sed -r 's/-w+-(w+) 1//g' | 
sed -r 's/(-w+)-w+/1/g'

Используем список для поиска файлов:

Оборачиваем получившуюся выше конструкцию в качестве набора для цикла for:

for r in $(...); do echo $r; done

Ну и наконец меняем echo $r на нечто полезное:

sudo ntfscluster -f -c $r d.img 2>/dev/null

В итоге получается интересующий нас список файлов вместе с указанием кластеров.

yurik11,
Вы не путайте сектор с кластером. Сектор (логический) — это то, что минимально можно прочесть с диска «снаружи» (через интерфейс). Например, если диск имеет физический сектор 4096, а логический — 512, то свой размер (число LBA) диск указывает в 512-байтных секторах. И тогда все _секторные_ смещения (например, смещение начала раздела и длина раздела в таблице) будут указаны именно в 512-байтовых секторах. Отсюда и проблемы с производительностью при невыравнивании разделов по границе физического сектора, — диск-то всё равно отдаст или запишет то, что надо вам, с 512-байтовой дискретностью, но вот для этого ему при невыровненности придётся прочесть или записать два физических сектора. но это лирика. А файловая система оперирует значением кластера, размер которого прописывается в загрузочной записи файловой системы (т.е. у линуксовых систем — суперблок), и все операции и все значения, касающиеся файлов, указываются в кластерах. То есть кластер есть некое количество _логических_ секторов, ну обычно 8, хотя всякое бывает. А с тем, чему равен физический сектор диска, размер кластера никак не связан.

У меня жесткий диск с 3 поврежденными секторами. Я знаю номера секторов, и компьютер все еще может загрузиться в Windows. Я хочу запустить sector repair от инструмента диагностики HDD от производителя, но прежде чем я это сделаю, я хотел бы знать, какие файлы затронуты. Есть ли способ выяснить, какой файл или файлы занимают эти сектора?

источник

вот процесс с помощью WinHex, удобный шестнадцатеричный редактор, который может просматривать и редактировать диски напрямую. будьте очень осторожны; при неправильном использовании этот инструмент может повредить систему. Открыть диски только для чтения всякий раз, когда это возможно.

  1. Так как у вас уже есть плохие местоположения сектора, Вы можете открыть диск в WinHex напрямую («Открыть Диск» кнопка на панели инструментов), а затем перейдите к сектору, чтобы просмотреть данные ( » Go к сектору» кнопка на панели инструментов). Предполагая, что ваши местоположения секторов являются адресами физических секторов, вам нужно открыть физическая привод в этом шаге.

    этой не определить файл непосредственно, но левая панель должна определить раздел, содержащий этот сектор и соответствующий относительный сектор адрес.

  2. Если раздел вы определили это разделов NTFS и fat, мы можем открыть раздел напрямую («Открыть Диск» снова). Это позволит открыть раздел в новой вкладке, так что вы можете переключаться по мере необходимости. На вкладке раздел используйте «перейти в сектор» функция снова, но на этот раз введите переведенный сектор («относительного сектора» определены в виде диска).

    Итак, в левой панели, вы должны увидеть раздел » Alloc. видимых диске». Под этим находится кластер #, физический сектор #, логический (относительный) сектор # и имя файла, если этот сектор действительно принадлежит файлу.

Если эти шаги не дают вам немедленный ответ, то ваши плохие участки не могут находиться в пользе. Если результаты неясны, вам, возможно, придется еще немного покопаться, чтобы найти ответ.

источник

попробуйте nfi.exe — Windows NT File System (NTFS) файловый сектор информация утилита. Скачать с средства поддержки 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:UsersadminDownloads>nfi DeviceHarddisk0DR0 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.
IMAGESwin7HDD.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)

источник

большинство программ дефрагментации показывают карту диска, отображающую все кластеры на диске, которые вы можете щелкнуть (найдите те, которые отмечены как bad) для просмотра файлов, расположенных в кластере.

Как сказал Уолтер, любая комбинация дисков и ОС за последнее десятилетие или около того будет автоматически перемещать файлы из плохих секторов (прошивка диска обычно обрабатывает это, но дисковые инструменты, такие как chkdsk или дефрагментаторы обычно делают это так ну.)

Defraggler:

enter image description here

Дефрагментация-файл:

enter image description here

Vopt:

enter image description here

отвечен Synetech 2012-02-09 02:12:11

источник

DiskView from Sysinternals выполняет именно эту функцию: отображает дисковую карту диска и позволяет видеть, какие файлы занимают какие кластеры.

к сожалению, не существует способа отображения имен системных файлов.

DiskView main windowDiskView system file

отвечен Synetech 2012-03-04 12:33:46

источник

насколько я знаю, если привод делает определенное количество ошибок чтения на сектор помечается как плохой, так и его содержимое копируется в другое место на диске. обычно это происходит до того, как данные по этому сектору становятся полностью нечитаемыми.

Я пытаюсь найти источник для этого, просто прочитал его вчера, но не могу вспомнить, где.

с man hdparm (8)

обратите внимание, что флаг — repair-sector может использоваться для восстановление (любых) поврежденных секторов, когда они больше не нужны, включая сектора, которые были действительно плохими (диск, скорее всего, переназначит их в новую область на носителе).

итог: вам не нужно заботиться о плохих секторах, прошивка жестких дисков делает это за вас. единственное, что вам нужно сделать, это получить новый диск, прежде чем слишком многие из них и ваш диск умирает.

отвечен Baarn 2012-01-25 20:47:40

источник

вы можете использовать fsutil из командной строки администратора. Подкоманда volume и querycluster subsubcommand.
См.Windows командной строки ссылка Fsutil.

Fsutil принимает номер кластера в логическом диске в качестве входного аргумента, а не номер сектора. Но это число легко вычислить:

кластер# = (absolute_sector — start_of_partition_sector) / sectors_per_cluster.

пример:

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

отвечен NorbertM 2018-04-04 07:55:53

источник

выполнения DiskExplorer позволяет исследовать диск по секторам. Это payware ($70 за версию NTFS), но бесплатно попробовать. У них есть версии для NTFS, FAT и Linux (ext2 / 3).

alt text

источник

Понравилась статья? Поделить с друзьями:
  • Как найти синус фазы
  • Как найти все каналы на телевизоре самсунг
  • Как найти похожего на тебя человека программа
  • Как найти слово или фрагмент текста
  • Как узнать составили на тебя протокол или нет