Справки по отладчику DEBUGFS

DebugFS является самой известной утилитой, предназначенной для работы с файловыми системами EXT2FS и EXT3FS. Для ReiserFS эта утилита не годится, и для нее в современных дистрибутивах Linux предусмотрен свой отладчик.

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

Отладчик может ограниченно работать с одиночными командами или заранее подготовленным пакетным файлом. Но с большинством «внутренних» команд приходится использовать номер inode в угловых скобках < >, которые оболочка Bash воспринимает как команды перенаправления ввода/вывода.

В режиме ввода одиночных команд отладчик можно использовать только для одного практического случая:

debugf s -R stats /dev/hdc3 - выводит достаточно полную информацию о суперблоке и всех группах блоков (файл устройства указан для конкретного случая). Фрагмент, выведенный такой командой, приведен в листинге 8.

а) В интерактивном режиме вход в среду отладчика производится командой debugfs

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

open -w /dev/hdc3 (указывается конкретный логический раздел блочного устройства). Можно сразу воспользоваться командой debugfs -w /dev/hdc3.

Атрибут -w указывается, если нужен доступ к файловой системе в режиме чтения и записи. Все команды, модифицирующие, устанавливающие или удаляющие что-либо, нуждаются в таком режиме. Нелишне предупредить, что ошибка в режиме записи может привести к печальным последствиям. После открытия логического раздела или физического устройства система может известить пользователя об успехе или просто предложить ввести следующую команду. Всего в арсенале отладчика несколько десятков команд, но администратору могут понадобиться только некоторые из них. Если есть необходимость в использовании других команд, следует познакомиться с электронным справочником man (manual - руководство). Рассмотрим эти команды (они сгруппированы по выполняемым функциям или последовательности применения): clri f ilt_name - очистить индексный дескриптор указанного файла,

f reeb block_number - команда устанавливает в «О» бит, соответствующий данному логическому блоку в битовой карте блоков, тем самым объявляя его свободным,

setb block_number - противоположная по смыслу команда устанавливает соответствующий бит в «1», объявляя блок занятым. Если эти установки произведены необдуманно, утилита fsck, будучи автоматически запущена при очередной загрузке системы, найдет эти блоки и поместит их в каталог /lost+found, f reei <inode_number> - команда устанавливает в «О» бит указанного индексного дескриптора в битовой карте inode, объявляя его свободным, setb <inode_number> - команда устанавливает соответствующий бит в «1», объявляя блок inode занятым,

icheck block_number - полезная команда, позволяющая по номеру логического блока данных найти его индексный дескриптор. Требует от нескольких десятков секунд до нескольких минут поиска на диске. Не всегда может найти inode логически удаленного файла,

ncheck inode_number - команда, позволяющая узнать имя файла по заданному номеру индексного дескриптора. Также нуждается в непродолжительном времени поиска,

stats - эта команда уже приводилась выше. В интерактивном режиме она также выводит информацию о суперблоке и всех группах блоков на анализируемом дисковом пространстве,

stat <inode_number> - команда позволяет вывести краткую справку о содержимом заданного индексного дескриптора. Гораздо лучше воспользоваться аналогичной командой редактора Lde,

Is del - команда не нуждается в дополнительных атрибутах и выводит перечень удаленных inode, которые исследователю придется запомнить или записать. Для вывода информации в файл рекомендуется использовать конструкцию с неименованным каналом: lsdel I debugfs /dev/hdc3 > /home/file_lsdel, mi <inode_number> - очень нужная команда, позволяющая модифицировать каждую запись в указанном индексном дескрипторе. Строки выводятся поочередно: Mode, UID, GID, Size, 4 временные отметки и так далее. Слева от курсора выводится действующее значение, в позицию курсора пользователь может ввести, что ему требуется.

debugfs: mi <148003> Mode [0100644] User ID [503] Group ID [100] Size [6065]

Creation time [833201524] Modification time [832708049] Access time [826012887] Deletion time [833201524] 0 Link count [0] 1 Block count [12]

File flags [0x0] Reserved 1 [0] File acl [0] Directory acl [0] Fragment address [0] Fragment number [0] Fragment size [0] Direct Block #0 [594810] Direct Block #1 [594811] Direct Block #2 [594814] Direct Block #3 [594815] Direct Block #4 [594816] Direct Block #5 [594817 Direct Block #6 [0] Direct Block #7 [0] Direct Block #8 [0] Direct Block #9 [0] Direct Block #10 [0] Direct Block #11 [0] Indirect Block [0] Double Indirect Block [0] Triple Indirect Block [0]

help - вывод справки о командах отладчика,

close - закрыть файловую систему, открытую командой open,

quit - выйти из отладчика в режим командной строки стандартной оболочки.

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

lde -i inode_number device - вывести информацию, содержащуюся в 128-байтном фрагменте inode.

lde -b block_number device | more - вывести поэкранный дамп логического блока с указанным номером. Обычно логические блоки нумеруются шестнадцатеричными числами, в этом случае номер блока указывать в виде 0x12345678.