web-dev-qa-db-ja.com

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を使用してファイルを削除する方法はありますか?

26

修正が必要で、単に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   
33
meuh

Fsckの動作についておめでとうございます。何らかの理由でうまくいかなかった場合の答えはls -i1の後にumountが続き、次にclriが続きます。

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

私は実際にこの方法をテストしました。

3
Joshua