我的 qnap 文件系统损坏了。当我尝试 fsck 时,它会在一个 inode 上进入无限循环。不幸的是,qnap 没有 debugfs 命令。是否可以通过 dd 删除(清除)inode?
答案1
它是可能的但这非常危险。如果你搞砸了,最终可能会造成更大的损失。诀窍是根据 dumpe2fs 的输出计算特定 inode 的偏移量。计算出偏移量后,只需:
dd if=/dev/zero of=/dev/BLOCKDEVICE seek=OFFSET bs=1 count=INODESIZE
看debugfs 的源代码对于函数do_imap:
可以通过 dumpe2fs 的输出找到 inode 表的起始位置(即 ext2fs_inode_table_loc() 返回的内容),以及 inode 大小。找到块编号和偏移量后,您可以通过以下方式计算上述 dd 命令中使用的 OFFSET:
OFFSET = (block * BLOCKSIZE) + offset
其中 block 和 offset 是通过 do_imap 计算的值。
您可能需要练习使用 dumpe2fs 手动正确复制 do_imap 的计算,然后在您的 Linux 系统上与 debugfs 的 imap 命令进行交叉检查(假设您可以运行 Linux)。
综上所述,尝试为 qnap 从头开始编译 e2fsprogs,然后使用为 qnap 构建的 debugfs 可能会很有用。