Как узнать какой файл содержится в указанном секторе

Как узнать какой файл содержится в указанном секторе thumbnail

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

Где это может быть нужно?

Навскидку придумаем различные сценарии, где такая тема может быть полезна:

  1. Программы низкоуровневого тестирования жёсткого диска обнаружили Bad Sector (не читаемый блок) и нужно узнать, на какой файл приходится этот сектор, чтобы понять, потеряна критически важная информация или нет.
  2. При помощи “глубокого поиска” прямо в дампе диска в каком-то секторе обнаружили текстовую строку и хотелось бы узнать, находится эта строка в каком-либо файле или в “свободном месте”.
  3. Некая программа работы с дисками выдала результат, выражаемый в номерах сектора (LBA) и нужно более-менее адекватно привязать номер сектора к файлу.

Сценарии могут быть различными, задачи – творческими. Важно, чтобы мы понимали, что такая операция возможно и могли применить её там, где нужно.

План действий

Определились с целями, переходим к действиям. Покажу я реализацию пары сценариев, дальше, по аналогии, можете уже сами:

Поиск файла по номеру логического сектораПоиск файла по номеру логического сектора

Вот у нас на скриншоте приведён вариант, в котором файл ChromeSetup.exe начинается с логического сектора № 2542432.

Поможет нам найти файл (допустим, что мы знаем только номер сектора) миниатюрная программа NFI.EXE.

nfi exenfi exe

Работать с программой очень просто – на вход подаётся буква диска и номер логического сектора. На выходе имеем порядковый номер файла, путь и значения атрибутов. А также номера всех секторов, занятых данным файлом. Кстати, здесь же (в данном конкретном случае) мы видим два атрибута $DATA (второй с именем потока “Zone.Identifier”), что означает, что файл был скачан из Интернета. Ну какая-никакая, а информация. :)

Здесь я не зря упомянул слово “логического”, если имеется ввиду логический сектор, то отсчёт ведётся от начала раздела. Если же речь идёт о физическом секторе, то считать будем от начала диска. Это ключевой момент, потому как если мы будем выяснять, какой файл повреждён бэд-блоком, то Victoria выдаст нам физический номер сектора (от начала диска) и придётся применить некоторую арифметику, отняв от физического номера сектор начала раздела.

Сразу приведу пример. Вот на том же скрине (WinHEX) в правой части окна видим физический номер сектора – 2749280. А теперь глянем на границы раздела:

Границы разделовГраницы разделов

2749280 – 206848 = 2542432 в аккурат.

Т.е. если Victoria нам покажет нечитаемый сектор № 2749280 – то это как раз первый сектор нашего файла. А если она покажет сектор между 2048 и 206848, то это вообще не на этом разделе, а на Partition 1 исходя из скриншота. Надеюсь, понятно. Если не очень, то вот схема:

Физический сектор или логический секторФизический сектор или логический сектор

Весь диск делится на разделы (и может быть незанятое место), Victoria оперирует секторами всего диска, а программы вроде NFI – секторами в пределах раздела. Перевести одни в другие не составит труда, если знать границы раздела. Узнать их можно при помощи множества программ. В частности – WinHEX.

Теперь, что касается кластеров. Кластер – более крупная единица выделения, чем сектор. Размер кластера = N * размер сектора. Довольно часто в качестве N выбирается число 8, таким образом, что размер кластера становится равен 4096 байт (4 Кбайт). В самом деле, возьмите небольшой файлик и посмотрите его свойства:

Различия в размере и на дискеРазличия в размере и на диске

Наверняка замечали, что размер файла фактический и размер на диске отличаются? (На диске – будет как раз кратный размеру кластера), а фактический – равен размеру атрибута $DATA. Всё дело в том, под файл выделяется минимум 1 кластер. И второй файл в этот кластер уже не может быть записан (при обычных условиях), даже если размер позволяет.

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

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

fsutil volume querycluster E: 55901

Покажет файл, которым занят кластер № 55901 на разделе E:

Источник

QA Stack

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

Ответы:

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

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

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

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

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

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

Попробуйте nfi.exe — служебную программу для файлового сектора файловой системы Windows NT (NTFS). Загрузите с Microsoft OEM Tools Tools Phase 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)

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

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

Defraggler:

Defrag-A-File:

Vopt:

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

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

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

Fsutil принимает номер кластера в логическом диске в качестве входного аргумента вместо номера сектора. Но должно быть легко вычислить это число:
cluster # = (absolute_sector — start_of_partition_sector) / sector_per_cluster.

Пример вывода:

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

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

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

от человека hdparm (8)

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

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

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

Я знаю, что поток старый, но для записи, для всех, кто имеет такую ​​проблему, есть способ проверить это из Linux. Всегда можно использовать live linux на флешке cd / usb, например 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.

Источник

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

7 ответов

20

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

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

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

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

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

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

18

Попробуйте nfi.exe — Утилита файловой области файловой системы Windows NT (NTFS). Загрузите с Этап 3 SR2 для поддержки OEM-производителей Microsoft .

> 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)

8

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

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

Defraggler:

Defrag-A-File:

Vopt:

ответил Synetech 26 января 2012, 01:02:55

6

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

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

ответил Synetech 9 февраля 2012, 05:51:23

3

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

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

из man hdparm (8)

  

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

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

ответил Baarn 26 января 2012, 00:38:22

3

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

Fsutil принимает номер кластера в логическом диске в качестве входного аргумента вместо номера сектора. Но это должно быть легко вычислить:
кластер # = (absolute_sector — start_of_partition_sector) /sect_per_cluster.

Пример вывода:

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

ответил NorbertM 2 марта 2017, 17:13:53

2

RunTime DiskExplorer позволяет вам изучить диск по секторам. Это payware (70 долларов США для версии NTFS), но можно попробовать. У них есть версии для NTFS, FAT и Linux (ext2 /3).

Источник

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

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

Источник