Hallo, On Thu, 08 May 2003, Christian Boltz wrote:
Am Dienstag, 6. Mai 2003 23:36 schrieb David Haller:
On Sun, 20 Apr 2003, Christian Boltz wrote:
cb@tux:/tmp> /sbin/fsck.ext2 testfs_buggy -f
*patsch*
*autsch*
*Eisbeutel-reich*
Christian, bitte, Optionen _vor_ Argumenten! Was du daheim im stillen Kaemmerlein machst sei dir ueberlassen, aber wenn du hier (oder anderswo) schreibst, dann unterlasse bitte diese, aehm, hoeflich gesagt, Unsitte.
Mach ich ja üblicherweise[TM] ;-) In diesem Fall war es IIRC so, dass ich einfach <Cursor up> <space> -f <return> getippt habe, da kommt man eben zu solchen Befehlszeilen ;-)
Ja. Mach ich (aber nur selten!) so -- aber irgendwo in ne Mail oder nen script schreib ich sowas nicht! Es gibt eben haufenweise Anwendungen, die _nicht_ getopt verwenden, und dann schiesst du dir mit so einer Verwendung boes ins Knie. Ich hab mir stattdessen einfach "<up><C-a><A-f><space>" angewoehnt... (wobei aber die C- A- Kombinationen von mir eher als je 1 Tastendruck wahrgenommen werden).
e2fsck 1.28 (31-Aug-2002) Entry 'very_bad/file_name' in / (2) has illegal characters in its name. Fix<y>? yes
Danach findet sich die Datei wieder mit einem gültigen Namen (der "/" wurde durch einen Punkt ersetzt) im Verzeichnis.
*hehe* e2fsck gefaellt mir :)
Es wäre mal interessant, den gleichen Test mit z. B. reiserfs zu machen ;-)
(einige Zeit später)
Den Mitschnitt der Konsole spare ich mir jetzt mal, nur soviel: ich habe - ähnlich wie bei meinen Versuchen mit ext3 - in einer Datei (40 MB, wesentlich kleiner mag Reiserfs nicht...)
Ja, das ist FS-spezifisch, reiserfs belegt immer IIRC ca. 35 MB fuer's Journal und/oder die Hashtabelle. ext2/3 hat da den Vorteil, dass die Inode Anzahl (und der davon verbrauchte Platz) mit dem FS waechst, aber bei einem kleinen FS auch nur wenig Platz braucht. Das hatten wir neulich auch in Bezug auf ne initrd...
ein reiserfs-Dateisystem angelegt, loopback gemounted, darin eine Datei angelegt (mit touch), umount ausgeführt und danach mit dem Hexeditor den Dateinamen (der übrigens zweimal zu finden war) geändert, und zwar an beiden Fundstellen einen "/" in den Namen eingebaut.
Ergebnis von fsck.reiserfs war, dass es nur mit --rebuild-tree die Möglichkeit gäbe, die Datei wiederherzustellen. Im Detail:
cb@tux:/tmp/tmp-cb/test> /sbin/reiserfsck testfs_buggy reiserfsck 3.6.4 (2002 www.namesys.com) [...] Checking internal tree..bad_directory_item: block 8211: The directory item [1 2 0x1 DIR (3)] has a not properly hashed entry (2) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^! bad_leaf: block 8211, item 1: The corrupted item found (1 2 0x1 DIR (3), len 88, location 3964 entry count 3, fsck need 0, format old) [..]
Nach dem --rebuild-tree lag die Datei dann mit einem völlig falschem Namen ("2_3" statt "das_ist_eine_testdatei") im lost+found des reiserfs :-|
Ist aber logisch, wenn man weiss, wie reiserfs "funzt" ;) ext2/3 speichert die Dateinamen ja in einer simplen Tabelle[1] in einer Datei (eben dem Verzeichnis). Reiserfs hingegen verwendet eine Hashtabelle, genauer eine BTree-Struktur die durch Hash-Werte der Dateinamen indiziert ist, oder so aehnlich[2]. Aenderst du nun also den Dateinamen, so aendert sich der Hash-Wert und der bisherige Eintrag ist Makulatur und es gibt keine Zuordnung mehr... Bei ext2/3 hingegen kannst du die Namen in den Verzeichnissen beliebig manipulieren, solange der Name seine Laenge nicht aendert muss man nichtmal die Eintraege fuer die Laenge anpassen ;) ext2/3 ist also wesentlich robuster in der Beziehung. Nochwas: Die Eintraege in den Verzeichnissen werden beim Loeschen nicht direkt angefasst, wenn man z.B. ausversehen eine Datei geloescht hat, dann kann man im Verzeichnis nach dem Inode (den man ja zum dump eh braucht) suchen und so auch wieder den Namen ;)
- da gefällt mir ext2 doch wesentlich besser ;-)
Mir auch, wobei, bis auf / und /home sind alle meine 11 Partitionen des Systems ext3. Und so langsam vertraue ich ext3 soweit, dass ich auch /home wohl noch umstelle :-)
Auch heute wieder der Disclaimer: Bitte NICHT NACHMACHEN, insbesondere nicht auf "echten" Partitionen. Für einen evtl. Datenverlust durch obige Experimente und/oder Reperaturversuchen übernehme ich keine Haftung!
ACK! -dnh, gib deinem sigmonster nen Keks mit Empfehlung von mir, ja? [1] genauer gesagt gibt es 2 Varianten, die aber beide einfach "kontinuierlich" in die Verzeichnisdatei geschrieben werden, siehe 'struct ext2_dir_entry' und 'struct ext2_dir_entry_2' in /usr/src/linux/include/linux/ext2_fs.h bzw. 'struct ext3_dir_entry' und 'struct ext3_dir_entry_2' in /usr/src/linux/include/linux/ext2_fs.h. [2] Vereinfacht gesagt, genaueres findet sich auf www.namesys.com und natuerlich in den reiserfs-Quellen. -- "Ach was! Wir reden doch eh genug, das du schon so langsam wissen müsstest wie und mit was Ich antworte. Vieleicht habe Ich in letzter Zeit einfach zu viele Froschpillen gegessen, das Ich so viel quacke?" [Woko° in dag°]