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


26

玩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吗?


转义正斜杠(filen\/ame)无效吗?
JAB

17
+1,恭喜。您已经找到了“文件名中的奇怪字符”的仅有两种情况之一,在这种情况下,仅在shell命令中正确地引用和/或转义该字符不能解决问题。(另一个是文件名中的空字节,尽管我怀疑在大多数文件系统上,这只会截断该名称。)
Ilmari Karonen

Answers:


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   

3
e2fsck具有-force选项,它将导致“即使文件系统看起来很干净”也要进行全面检查。
David Foerster'3

3

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

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

我实际上已经测试了这种方法。


如果这是Linux(看起来很像),则值得注意的是clri它不是一个单独的命令(就像在其他Unix系统上一样),它是内部的一个子命令debugfs
hobbs

@hobbs:那必须让我的与众不同。哦,等等,nvm clri只是回显“ clri $ 2” | debugfs“ $ 1”
约书亚

您的说明仍然需要运行fsck-这将解决问题,并显示消息Entry 'filen/ame' in / (2) has deleted/unused inode 12. Clear<y>?而不是其他答案中指出的消息-但是执行clri是一个额外的步骤。似乎没有办法完全从debugfs中解决此问题。
Random832 '17

@ Random832:在过去的几年里,我都无法自行修复fsck。:(
约书亚记

-1

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

mkdir foo 
mv filen* foo
rm -rf foo

1
这将适用于其他任何尴尬的文件名,但不适用于其中包含的文件名/
zwol
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.