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

hum*_*ace 26 slash ext4 debugfs

玩 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
Run Code Online (Sandbox Code Playgroud)

输出:

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

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

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

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

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

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

meu*_*euh 33

如果您想要修复并且不仅仅是尝试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   
Run Code Online (Sandbox Code Playgroud)

  • `e2fsck` 有一个 `-f`orce 选项,它会导致“即使文件系统看起来干净”也能进行全面检查。 (3认同)