如何在 debugfs 中删除 ext4 文件系统上名为“filen/ame”(带斜杠)的文件?

如何在 debugfs 中删除 ext4 文件系统上名为“filen/ame”(带斜杠)的文件?

使用 e2fsprogs 时debugfs,由于更改/意外,filen/ame创建了一个名为的文件。显然,正斜杠字符/充当路径名中的特殊分隔符。

仍在使用debugfs我想删除名为 的文件filen/ame,但几乎没有成功,因为该/字符不被解释为文件名的一部分?

debugfs 是否提供了删除包含斜杠的文件的方法?如果是这样怎么办?

我用了:

cd /tmp
echo "content" > contentfile
dd if=/dev/zero of=/tmp/ext4fs bs=1M count=50
mkfs.ext4 /tmp/ext4fs
debugfs -w -R "write /tmp/contentfile filen/ame" /tmp/ext4fs
debugfs -w -R "ls" /tmp/ext4fs

其输出:

debugfs 1.43.4 (31-Jan-2017)
 2  (12) .    2  (12) ..    11  (20) lost+found    12  (980) filen/ame

我尝试了以下方法来删除该filen/ame文件:

debugfs -w -R "rm filen/ame" /tmp/ext4fs

但这不起作用,只产生了:

debugfs 1.43.4 (31-Jan-2017)
rm: File not found by ext2_lookup while trying to resolve filename

除了手动更改目录节点的内容之外,还有没有办法使用 删除文件debugfs

答案1

如果您想要修复并且不只是尝试debugfs,您可以FSCK为你做工作。将文件系统标记为脏并运行fsck -y以更改文件名:

$ debugfs -w -R "dirty" /tmp/ext4fs
$ fsck -y /tmp/ext4fs
 ...
/tmp/ext4fs was not cleanly unmounted, check forced.
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Entry 'filen/ame' in / (2) has illegal characters in its name.
Fix? yes
 ...
$ debugfs -w -R "ls" /tmp/ext4fs
2  (12) .    2  (12) ..    11  (20) lost+found    12  (980) filen.ame   

答案2

恭喜 fsck 工作;如果由于某种原因它不起作用,答案ls -i1后面是umount然后clri

参考:http://docstore.mik.ua/orelly/unix/upt/ch23_13.htm

这个方法我实际测试过。

答案3

如果将文件移动到某个目录,则可以删除包含该文件的目录。

mkdir foo 
mv filen* foo
rm -rf foo

相关内容