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

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

  • Крайне долгое время для ext4 fsck
  • Как я могу изменить дату, измененную для папки, на последний измененный файл внутри?
  • Как смонтировать файловые системы с размерами блоков> 4 КБ?
  • Восстановить потерянный раздел ntfs?
  • Не удается смонтировать SD-карту после жесткого отключения
  • Ext2 файловая система для / загрузочного раздела
  • плохая геометрия: количество блоков 967424 превышает размер устройства (415232 блока)
  • Что происходит с записью каталога при переименовании файла
  • Использует ли какая-либо файловая система Copy for Write Mechanism для CP
  • Почему dd меняет файловую систему на внешний диск?
  • Расположение inodes (ext)?
  • Какие функции ext4 не поддерживают btrfs?
  • 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 - лучшая ОС в мире.