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

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

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

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

1
задан 24 August 2017 в 15:51

1 ответ

Можно использовать debugfs просмотреть и изменить ext2/ext3/ext4 файловые системы на очень низком уровне.

Это имеет интерактивную оболочку внутри, которую можно выполнить, ее команды вручную (запустите его использование sudo debugfs /dev/sdXY, где /dev/sdXY устройство, на Вашем разделе экономят), но можно также позволить ему выполнить единственные команды только путем определения их с -R параметр.

Например, для списка блоков, которые выделяются для файла /bin/ls на разделе /dev/sda2, попробуйте это:

$ sudo debugfs -R 'blocks /bin/ls' /dev/sda2
debugfs 1.43.4 (31-Jan-2017)
2922912 2922913 2922914 2922915 2922916 2922917 2922918 2922919 2922920 2922921 2922922 2922923 2922924 2922925 2922926 2922927 2922928 2922929 2922930 2922931 2922932 2922933 2922934 2922935 2922936 2922937 2922938 2922939 2922940 2922941 2922942 2922943 

Больше информации об этом мощном инструменте может быть найдено в его странице справочника путем ввода man debugfs. Можно также ввести help в его интерактивной оболочке для получения списка доступных команд.

Примечание: Я не уверен в том, работает ли этот инструмент достаточно хорошо, чтобы использоваться для исследования целого раздела сразу. При попытке этого Вы не должны, вероятно, запускать новый экземпляр debugfs на файл, чтобы исследовать, но вместо этого создать командный сценарий для него, чтобы работать и использовать его с -f параметр.


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

$ sudo debugfs /dev/sda2
debugfs 1.43.4 (31-Jan-2017)
debugfs:  blocks /bin/ls
2922912 2922913 2922914 2922915 2922916 2922917 2922918 2922919 2922920 2922921 2922922 2922923 2922924 2922925 2922926 2922927 2922928 2922929 2922930 2922931 2922932 2922933 2922934 2922935 2922936 2922937 2922938 2922939 2922940 2922941 2922942 2922943 
debugfs:  icheck 2922912
Block   Inode number
2922912 914862
debugfs:  ncheck 914862
Inode   Pathname
914862  /bin/ls
1
ответ дан 7 December 2019 в 15:31

Другие вопросы по тегам:

Похожие вопросы: