Как извлечь необработанные данные extode inode с диска?

В файловой системе ext3 (или ext2 / 4, pick your flavor), как извлечь необработанные байтовые данные, соответствующие конкретному inode непосредственно с жесткого диска? Возможно ли, например, указать номер inode, чтобы определить его местоположение на диске (возможно, как смещение от начала раздела или другое смещение LBA), а затем использовать некоторую полезность, такую ​​как «dd» или системный вызов (что-то например lseek, кроме работы с файловой системой?), чтобы читать эти данные без необходимости ссылаться на них как на файл? Я предполагаю, что это можно сделать, возможно, с помощью какой-либо утилиты на уровне драйвера ….

  • Резервные файлы на ext4 для внешнего диска NTFS
  • Ext4-Error: бит уже очищен для inode
  • Почему собственная группа не получает исполняемый бит?
  • Файлы, скопированные из Win7 в Linux ext4, пустые / поврежденные
  • Linux IO Flow - VFS для блокировки устройства
  • Крошечный каталог файловой системы ext4 занимает 2024 блока?
  • Любой способ помочь «визуализировать» суперблок, файловую систему, дескрипторы групп и т. Д.
  • Почему этот переключатель будет эффективно форматировать диск на ext2 вместо ext4?
  • One Solution collect form web for “Как извлечь необработанные данные extode inode с диска?”

    Команда imap в debugfs может рассказать вам, где находится индексный дескриптор. Пример:

     $ debugfs -R 'imap <128901>' /dev/whatever debugfs 1.42.5 (29-Jul-2012) Inode 128901 is part of block group 16 located at block 524344, offset 0x0400 

    Чтобы получить исходный дамп inode 128901, вы должны искать байты 524344*block_size + 0x0400 и читать байты inode_size . Вы можете получить размеры с помощью команды stats в debugfs или отдельной утилите dumpe2fs .

    stats или dumpe2fs также предоставит вам полный список всех областей хранения inode, чтобы вы могли создать свою собственную функцию, которая выполняет эквивалент imap не называя при этом каждый раз называть debugfs (или запуская его в интерактивном режиме). Просто помните, когда вы делаете свой расчет, нет нуля inode. inode 1 начинается с байта 0 первого блока inodes.

    Если вы хотите сделать это в программе на языке C без внешних программ, вам следует посмотреть библиотеку libext2 , которая используется всеми стандартными утилитами ext2. Я не использовал его сам, но я подозреваю, что с документацией libext2 и исходным кодом debugfs для использования в качестве вдохновения вы можете легко написать свою функцию imap like.

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

     debugfs -R `cat <128901>` /dev/whatever 

    печатает содержимое файла с номером inode 128901.

    Linux и Unix - лучшая ОС в мире.