Перейти к содержимому

Удалите неработающий индекс EXT4 без debugfs

1

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

888 просмотров
zulus спросил 9 лет назад
Z 108

1 ответ

2
Принятый ответ

Это возможно, но это очень опасно. Если вы облажаетесь, вы можете нанести больше урона. Хитрость заключается в вычислении смещения для конкретного 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.

Я только что обратился к разработчику qnap, который недавно переписывался со мной в списке рассылки linux-ext4. Я указал ему на этот вопрос и спросил, может ли он отправить указатель на копию debugfs, скомпилированной для qnap. Так что, возможно, вам захочется немного подождать и посмотреть, не станет ли Кевин чем-то более безопасным и легким.

Theodore Ts'o · 9 лет назад · 1
Theodore Ts'o ответил 9 лет назад
T 266