Wie lösche ich eine Datei mit dem Namen "filen / ame" (mit Schrägstrich) auf einem ext4-Dateisystem in debugfs?

26

Beim Spielen mit e2fsprogs debugfswurde aus Versehen eine Datei mit dem Namen filen/ameerstellt. Offensichtlich dient der Schrägstrich /als spezielles Trennzeichen in Pfadnamen.

Immer noch debugfswollte ich die genannte Datei entfernen filen/ame, hatte aber wenig Erfolg, da das /Zeichen nicht als Teil des Dateinamens interpretiert wird?

Bietet Debugfs eine Möglichkeit, diese Datei mit dem Schrägstrich zu entfernen? Wenn das so ist, wie?

Ich benutzte:

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

welche Ausgänge:

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

Ich habe Folgendes versucht, um die filen/ameDatei zu entfernen :

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

aber das hat nicht funktioniert und nur produziert:

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

Gibt es neben der manuellen Änderung des Inhalts des Verzeichnisknotens eine Möglichkeit, die Datei mit zu entfernen debugfs?

Mensch und Frieden
quelle
Funktioniert es nicht, den Schrägstrich ( filen\/ame) zu umgehen?
JAB
17
+1 und Glückwünsche. Sie haben es geschafft, einen der beiden Fälle von "seltsamen Zeichen im Dateinamen" zu finden, in denen das Problem nicht behoben werden kann, wenn Sie das Zeichen in einem Shell-Befehl nur korrekt in Anführungszeichen setzen und / oder es maskieren. (Das andere wäre ein Null-Byte in einem Dateinamen, obwohl ich vermute, dass dies auf den meisten Dateisystemen den Namen nur abschneidet.)
Ilmari Karonen,

Antworten:

33

Wenn Sie eine Lösung wünschen und nicht nur ausprobieren, debugfskönnen Sie sich von fsck die Arbeit abnehmen lassen. Markieren Sie das Dateisystem als fehlerhaft und führen Sie es aus fsck -y, um den Dateinamen zu ändern:

$ 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   
meuh
quelle
3
e2fsckhat eine -force-Option, die zu einer vollständigen Überprüfung führt, „auch wenn das Dateisystem sauber zu sein scheint“.
David Foerster
3

Weiterbildungen zum Thema fsck working; wenn es aus irgendeinem Grund nicht geklappt hat, ls -i1folgt umountund dann die Antwort clri.

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

Ich habe diese Methode tatsächlich getestet.

Joshua
quelle
Wenn es sich um Linux handelt (wie es scheint), ist anzumerken, dass clries sich nicht um einen separaten Befehl handelt (wie bei einigen anderen Unix-Systemen), sondern um einen Unterbefehl debugfs.
Hobbs
@hobbs: muss meins dann ungewöhnlich machen. Oh warte, nvm clri war nur echo "clri $ 2" | debugfs "$ 1"
Joshua
Ihre Anweisungen erfordern ohnehin die Ausführung von fsck - was das Problem mit der Meldung Entry 'filen/ame' in / (2) has deleted/unused inode 12. Clear<y>?anstelle der in der anderen Antwort angegebenen behebt -, aber das Ausführen des Befehls clri ist ein zusätzlicher Schritt. Es scheint keinen Weg zu geben, dies rein aus debugfs heraus zu lösen.
Random832
@ Random832: ich hatte fsck nicht in alter vergangenheit selbst reparieren lassen. :(
Joshua
-1

Wenn Sie die Datei in ein Verzeichnis verschieben, können Sie das Verzeichnis mit der Datei darin löschen.

mkdir foo 
mv filen* foo
rm -rf foo
carl
quelle
1
Dies würde für jeden anderen unangenehmen Dateinamen funktionieren , aber für einen Dateinamen, der darin enthalten ist, wird es nicht funktionieren /.
zwol