Удалите поврежденный индекс EXT4 без debugfs

Я сломал файловую систему внутри qnap. Когда я пытаюсь выполнить команду fsck, на одном иноде происходит бесконечный цикл. К сожалению, у qnap нет команды debugfs. Можно ли удалить (очистить) inode через dd?

1 ответ

Решение

Это возможно, но это очень опасно. Если вы облажаетесь, вы можете нанести больше урона. Хитрость заключается в вычислении смещения для конкретного inode, учитывая вывод dumpe2fs. Как только вы рассчитаете смещение, это просто:

dd if=/dev/zero of=/dev/BLOCKDEVICE seek=OFFSET bs=1 count=INODESIZE

Посмотрите исходный код debugfs для функции do_imap:

Исходное местоположение таблицы inode (которое возвращает ext2fs_inode_table_loc()) можно найти с помощью вывода dumpe2fs, как и размер inode. Как только вы найдете номер блока и смещение, вы можете использовать метод вычисления OFFSET, использованный в приведенной выше команде dd, с помощью:

OFFSET = (block * BLOCKSIZE) + offset

где блок и смещение - это значения, рассчитанные с помощью do_imap.

Возможно, вы захотите проверить, можете ли вы правильно реплицировать вычисление do_imap вручную, потренировавшись с использованием dumpe2fs, а затем перепроверив команду debugfs imap в вашей системе Linux (при условии, что вы можете запустить Linux).

С учетом всего сказанного, может быть полезно попробовать скомпилировать e2fsprogs с нуля для qnap, а затем использовать debugfs, созданную для qnap.

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