web-dev-qa-db-ja.com

debugfsなしで壊れたEXT4iノードを削除します

Qnap内のファイルシステムが壊れています。 fsckを実行しようとすると、1つのiノードで無限ループに入ります。残念ながら、qnapはdebugfsコマンドを持っていません。これは、ddを介してiノードを削除(クリア)することは可能ですか?

1
zulus

それは可能ですが、非常に危険です。あなたがそれを台無しにすると、あなたはより多くのダメージを与えることになる可能性があります。トリックは、dumpe2fsの出力を前提として、特定のiノードへのオフセットを計算することです。オフセットを計算すると、次のようになります。

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

関数do_imapについては、 debugfsのソースコード を参照してください。

Iノードテーブルの開始位置(ext2fs_inode_table_loc()が返すもの)は、iノードサイズと同様に、dumpe2fsの出力によって見つけることができます。ブロック番号とオフセットを見つけたら、上記のddコマンドで使用したOFFSETの計算を使用できます。

OFFSET = (block * BLOCKSIZE) + offset

ここで、blockとoffsetは、do_imapによって計算された値です。

Dumpe2fsを使用して練習し、Linuxシステムでdebugfsのimapコマンドを使用してクロスチェックすることにより、do_imapの計算を手動で適切に複製できるかどうかを確認する練習をすることをお勧めします(Linuxを実行できると仮定)。

とはいえ、qnap用にe2fsprogsを最初からコンパイルしてから、qnap用にビルドされたdebugfsを使用してみると便利な場合があります。

2
Theodore Ts'o