Wie sieht ein Eintrag "Gelöschte Datei" im Journal aus?

7

Ich hoffe, ich habe das richtig verstanden: Eine Datei inodeenthält Daten wie Inode-Nummer, Zeitpunkt der letzten Änderung, Besitz usw. - und auch den Eintrag: » Löschzeit «. Was mich neugierig gemacht hat:
Wenn Sie eine Datei löschen, müssen Sie ihre Inode- Nummer entfernen und den damit verknüpften Speicherplatz als verfügbar markieren. Es gibt Tools zum Wiederherstellen (versehentlich) gelöschter Dateien (z. B. aus einem Journal, falls verfügbar). Und ich kenne den statBefehl.

Frage

Wie sieht ein Eintrag "Gelöschte Datei" im Journal aus?

Meine Vermutung ist eine ziemlich unspektakulär aussehende Ausgabe, als ob der statBefehl ausgegeben würde .

Ich weiß, dass das Löschen einer Datei und der Versuch, sie wiederherzustellen, eine Erfahrung aus erster Hand wäre, aber dann bin ich nicht an einem Punkt angelangt, an dem ich dies ohne fremde Hilfe tun könnte, und ich möchte genau verstehen, was ich tue. Der Einstieg in die Datenauferstehung würde mich im Moment ablenken, da ich versuche, die grundlegenden Dinge fest in den Griff zu bekommen ... Ich bin nicht faul, das sind keine Hausaufgaben, das ist für das Privatstudium.

erch
quelle

Antworten:

6

Wenn eine Datei oder ein Verzeichnis "gelöscht" wird, wird ihre Inode-Nummer aus dem Verzeichnis entfernt, das die Datei enthält. Mit dem treeBefehl können Sie die Liste der Inodes anzeigen, die ein bestimmtes Verzeichnis enthält .

Beispiel

$ tree -a -L 1 --inodes .
.
|-- [9571121]  dir1
|-- [9571204]  dir2
|-- [9571205]  dir3
|-- [9571206]  dir4
|-- [9571208]  dir5
|-- [9571090]  file1
|-- [9571091]  file2
|-- [9571092]  file3
|-- [9571093]  file4
`-- [9571120]  file5

5 directories, 5 files

Links

Es ist wichtig zu verstehen, wie Hardlinks funktionieren. Dieses Tutorial mit dem Titel: Einführung in Inodes enthält hervorragende Details, wenn Sie gerade erst versuchen, ein grundlegendes Verständnis der Funktionsweise von Inodes zu erlangen.

Auszug

Inode-Nummern sind eindeutig, aber Sie haben möglicherweise bemerkt, dass einige Dateinamen- und Inode-Nummernlisten einige Dateien mit derselben Nummer anzeigen. Die Vervielfältigung wird durch harte Links verursacht. Hardlinks werden hergestellt, wenn eine Datei in mehrere Verzeichnisse kopiert wird. Dieselbe Datei befindet sich in verschiedenen Verzeichnissen auf derselben Speichereinheit. Die Verzeichnisliste zeigt zwei Dateien mit derselben Nummer, die sie mit derselben physischen Speichereinheit verknüpfen. Durch feste Links kann dieselbe Datei in mehreren Verzeichnissen "vorhanden" sein, es ist jedoch nur eine physische Datei vorhanden. Auf der Speichereinheit wird dann Platz gespart. Wenn beispielsweise eine 1-Megabyte-Datei in zwei verschiedenen Verzeichnissen abgelegt wird, beträgt der im Speicher verwendete Speicherplatz ein Megabyte und nicht zwei Megabyte.

Löschen

In demselben Tutorial wurde auch gesagt, was passiert, wenn ein Inode gelöscht wird.

Durch das Löschen von Dateien werden die Größe und die direkten / indirekten Blockeinträge auf Null gesetzt und der physische Speicherplatz auf der Speichereinheit wird als nicht verwendet festgelegt. Um die Datei wiederherzustellen, werden die Metadaten aus dem Journal wiederhergestellt, wenn sie verwendet werden (siehe Artikel im Journal ). Sobald die Metadaten wiederhergestellt sind, kann erneut auf die Datei zugegriffen werden, es sei denn, die physischen Daten wurden auf der Speichereinheit überschrieben.

Ausmaße

Vielleicht möchten Sie auch die Ausmaße und deren Funktionsweise auffrischen. Wieder von der linux.org-Website, ein weiteres gutes Tutorial mit dem Titel: Extents hilft Ihnen dabei, die Grundlagen zu erlernen .

Mit dem Befehl können Sie filefragermitteln, wie viele Speicherbereiche eine bestimmte Datei / ein bestimmtes Verzeichnis verwendet.

Beispiele

$ filefrag dir1
dir1: 1 extent found

$ filefrag ~/VirtualBox\ VMs/CentOS6.3/CentOS6.3.vdi 
/home/saml/VirtualBox VMs/CentOS6.3/CentOS6.3.vdi: 5 extents found

Sie können eine detailliertere Ausgabe erhalten, indem Sie den -vSchalter verwenden:

$ filefrag -v dir1
Filesystem type is: ef53
File size of dir1 is 4096 (1 block of 4096 bytes)
 ext:     logical_offset:        physical_offset: length:   expected: flags:
   0:        0..       0:   38282243..  38282243:      1:             eof
dir1: 1 extent found

HINWEIS: Beachten Sie, dass ein Verzeichnis immer mindestens 4 KByte belegt.

Geben Sie einer Datei eine gewisse Größe

Wir können eine unserer Beispieldateien nehmen und 1 MB Daten wie folgt darauf schreiben:

$ dd if=/dev/zero of=file1 bs=1k count=1k
1024+0 records in
1024+0 records out
1048576 bytes (1.0 MB) copied, 0.00628147 s, 167 MB/s

$ ll | grep file1
-rw-rw-r--. 1 saml saml 1048576 Dec  9 20:03 file1

Wenn wir diese Datei analysieren mit filefrag:

$ filefrag -v file1
Filesystem type is: ef53
File size of file1 is 1048576 (256 blocks of 4096 bytes)
 ext:     logical_offset:        physical_offset: length:   expected: flags:
   0:        0..     255:   35033088..  35033343:    256:             eof
file1: 1 extent found

Schnelles Löschen und Neuerstellen einer Datei

Ein interessantes Experiment, das Sie durchführen können, besteht darin, eine Datei wie file1oben zu erstellen , sie dann zu löschen und anschließend neu zu erstellen. Beobachten Sie, was passiert. Unmittelbar nach dem Löschen der Datei führe ich den dd ...Befehl erneut aus und file1zeige den filefragBefehl folgendermaßen an:

$ filefrag -v file1
Filesystem type is: ef53
File size of file1 is 1048576 (256 blocks of 4096 bytes)
 ext:     logical_offset:        physical_offset: length:   expected: flags:
   0:        0..     255:          0..       255:    256:             unknown,delalloc,eof
file1: 1 extent found

Nach einiger Zeit (Sekunden bis Minuten vergehen):

$ filefrag -v file1
Filesystem type is: ef53
File size of file1 is 1048576 (256 blocks of 4096 bytes)
 ext:     logical_offset:        physical_offset: length:   expected: flags:
   0:        0..     255:   38340864..  38341119:    256:             eof
file1: 1 extent found

Die Datei wird schließlich angezeigt. Ich bin mir nicht ganz sicher, was hier vor sich geht, aber es sieht so aus, als würde es einige Zeit dauern, bis sich der Dateistatus zwischen dem Journal und der Festplatte eingestellt hat. Wenn Sie statBefehle ausführen, wird die Datei mit einem Inode angezeigt, sodass sie vorhanden ist. Die verwendeten Daten wurden filefragjedoch nicht aufgelöst, sodass wir uns in einem Zustand der Schwebe befinden.

slm
quelle
Nichts, was Sie hier erwähnen, hat etwas mit dem Tagebuch zu tun. Was Sie mit filefrag sehen, ist die Funktion für die verzögerte Zuordnung. Der Kernel ordnet die Blöcke erst zu, wenn er die Daten auf die Festplatte schreibt. Zum Zeitpunkt der Ausführung von filefrag befinden sich die Daten noch im Cache, sodass der Kernel noch nicht entschieden hat, wo sie abgelegt werden sollen.
Psusi
@psusi - Ich wusste, dass ich um die tatsächlichen Details herum tanzte. Gibt es eine Möglichkeit, einen Blick in den Kernel zu werfen, um mehr über den Stand der Dinge zu erfahren? Ich fand nicht viel an Werkzeugen, die mit dem Tagebuch zu tun hatten.
slm
0

Das Löschen einer Datei umfasst einige Schritte:

  1. Markieren Sie den Namen im Verzeichnis als gelöscht
  2. Verringern Sie die Anzahl der Verbindungen im Inode
  3. Wenn die Verbindungsanzahl jetzt Null ist, stellen Sie die gelöschte Zeit und ein
  4. Markieren Sie die Datenblöcke in der Bitmap als frei

Das Tagebuch "sieht also aus" wie diese Sequenz.

psusi
quelle