Ext4magic-Inode





Ext4magic: Inode - Directory - Journal - Installation - Zeit-Optionen - Tricks&Tipps - Manpage - Expert-Mode



Die Ausgaben der Inode Daten von ext4magic

Um erst einmal prinzipiell die Ausgabe vorzustellen, die Ausgabe der Inode einer normalen Datei in der Gegenüberstellung der Ausgabe der selben Daten mittels des Linux-Befehls stat

ROBI@LINUX:~ # stat /boot/message
  File: `/boot/message'
  Size: 421376          Blocks: 830        IO Block: 1024   regular file
Device: 811h/2065d      Inode: 22          Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2009-12-04 01:13:51.000000000 +0100
Modify: 2009-12-04 01:13:51.000000000 +0100
Change: 2009-12-04 01:13:51.000000000 +0100
ROBI@LINUX:~ # ext4magic /dev/sdb1 -f "message" -x
Filesystem in use: /dev/sdb1


Dump internal Inode 22
Status : Inode is Allocated

Inode: 22   Type: regular    Mode:  0644   Flags: 0x0
Generation: 1797523886    Version: 0x00000000
User:     0   Group:     0   Size: 421376
File ACL: 0    Directory ACL: 0
Links: 1   Blockcount: 830
Fragment:  Address: 0    Number: 0    Size: 0
ctime: 1259885631 -- Fri Dec  4 01:13:51 2009
atime: 1259885631 -- Fri Dec  4 01:13:51 2009
mtime: 1259885631 -- Fri Dec  4 01:13:51 2009
BLOCKS:
(0-11):531-542, (IND):543, (12-267):544-799, (DIND):800, (IND):801, (268-411):802-945
TOTAL: 415

Es werden also durchaus ein paar mehr Informationen angezeigt, es wird auch ein anderes Format benutzt, es sollte aber keinerlei Probleme darstellen die Daten die mit "stat" angezeigt werden auch in der Ausgabe von ext4magic wiederzufinden. Was uns hier schon auffallen sollte, sind die unterschiedlichen Dateinamen beim Aufruf der Kommandos. Es handelt sich hier um ein Filesystem das normalerweise im Verzeichnis "/boot/" gemounted wird. Bei der Angabe des Dateinamens oder Path muss mit ext4magic jedoch immer vom Rootverzeichnis (ist immer Inode 2) dieses Filesystems ausgegangen werden, und nicht von Root des gesamten Linuxsystems.


Hier der Vergleich der Daten einer Inode für ein Verzeichnis.

ROBI@LINUX:~ # stat /boot
  File: `/boot'
  Size: 1024            Blocks: 2          IO Block: 1024   directory
Device: 811h/2065d      Inode: 2           Links: 4
Access: (0755/drwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2010-04-01 21:39:03.000000000 +0200
Modify: 2010-03-13 12:05:22.000000000 +0100
Change: 2010-03-13 12:05:22.000000000 +0100
ROBI@LINUX:~ # ext4magic /dev/sdb1 -f / -x
Filesystem in use: /dev/sdb1


Dump internal Inode 2
Status : Inode is Allocated

Inode: 2   Type: directory    Mode:  0755   Flags: 0x0
Generation: 0    Version: 0x00000000
User:     0   Group:     0   Size: 1024
File ACL: 0    Directory ACL: 0
Links: 4   Blockcount: 2
Fragment:  Address: 0    Number: 0    Size: 0
ctime: 1268478322 -- Sat Mar 13 12:05:22 2010
atime: 1270150743 -- Thu Apr  1 21:39:03 2010
mtime: 1268478322 -- Sat Mar 13 12:05:22 2010
BLOCKS:
(0):517
TOTAL: 1

        2  d  755 (2)      0      0      1024 13-Mar-2010 12:05 .
        2  d  755 (2)      0      0      1024 13-Mar-2010 12:05 ..
       11  d  700 (2)      0      0     12288  3-Dec-2009 21:20 lost+found
    28673  d  755 (2)      0      0      1024 13-Mar-2010 12:05 grub
       22  _  644 (1)      0      0    421376  4-Dec-2009 01:13 message
       14  l  777 (7)      0      0         1  3-Dec-2009 23:39 boot
       23  _  644 (1)      0      0      1236  3-Dec-2009 02:52 boot.readme
       19  l  777 (7)      0      0        29 13-Mar-2010 12:04 vmlinuz
       20  l  777 (7)      0      0        28 13-Mar-2010 12:05 initrd
       21  _  644 (1)      0      0   6757618 13-Mar-2010 12:05 initrd-2.6.31.12-0.1-desktop
       15  _  644 (1)      0      0   1512469 28-Jan-2010 16:35 System.map-2.6.31.12-0.1-desktop
       16  _  644 (1)      0      0    168515 28-Jan-2010 16:50 symvers-2.6.31.12-0.1-desktop.gz
       17  _  644 (1)      0      0   4098688 28-Jan-2010 16:35 vmlinuz-2.6.31.12-0.1-desktop
       13  _  600 (1)      0      0       512  4-Dec-2009 01:13 backup_mbr
<       0>      0 (1)      0      0         0                   initrd-2.6.31.8-0.1-desktop
<       0>      0 (1)      0      0         0                   System.map-2.6.31.8-0.1-desktop
<       0>      0 (1)      0      0         0                   symvers-2.6.31.8-0.1-desktop.gz
<       0>      0 (1)      0      0         0                   vmlinuz-2.6.31.8-0.1-desktop
<       0>      0 (1)      0      0         0                   config-2.6.31.8-0.1-desktop
       18  _  644 (1)      0      0    105422 28-Jan-2010 16:50 config-2.6.31.12-0.1-desktop

bei ext4magic wird also sofort bei einem Verzeichnis der Inhalt des Verzeichnisses mit ausgegeben. Als Vergleich hier auch mal die Ausgabe des "ls -il" Befehls von Linux, der in etwa die selben Informationen enthält.

ROBI@LINUX:~ # ls -il /boot
total 12833
   15 -rw-r--r-- 1 root root 1512469 Jan 28 16:35 System.map-2.6.31.12-0.1-desktop
   13 -rw------- 1 root root     512 Dec  4 01:13 backup_mbr
   14 lrwxrwxrwx 1 root root       1 Dec  3 23:39 boot -> .
   23 -rw-r--r-- 1 root root    1236 Dec  3 02:52 boot.readme
   18 -rw-r--r-- 1 root root  105422 Jan 28 16:50 config-2.6.31.12-0.1-desktop
28673 drwxr-xr-x 2 root root    1024 Mar 13 12:05 grub
   20 lrwxrwxrwx 1 root root      28 Mar 13 12:05 initrd -> initrd-2.6.31.12-0.1-desktop
   21 -rw-r--r-- 1 root root 6757618 Mar 13 12:05 initrd-2.6.31.12-0.1-desktop
   11 drwx------ 2 root root   12288 Dec  3 21:20 lost+found
   22 -rw-r--r-- 1 root root  421376 Dec  4 01:13 message
   16 -rw-r--r-- 1 root root  168515 Jan 28 16:50 symvers-2.6.31.12-0.1-desktop.gz
   19 lrwxrwxrwx 1 root root      29 Mar 13 12:04 vmlinuz -> vmlinuz-2.6.31.12-0.1-desktop
   17 -rw-r--r-- 1 root root 4098688 Jan 28 16:35 vmlinuz-2.6.31.12-0.1-desktop

Das Format und die Besonderheiten der Verzeichnisdaten wird auf der Directory Seite vorgestellt.


Bei den Inodedaten in diesen Beispielen gibt es noch eine Besonderheit.

....
BLOCKS:
(0-11):531-542, (IND):543, (12-267):544-799, (DIND):800, (IND):801, (268-411):802-945
TOTAL: 415

Es handelt sich hier um die Aufschlüsselung der Datenblöcke die diese Inode adressiert.

Die Bedeutung dieser Ausgabe ist hier folgende:

Es handelt sich hier um die klassische Blockadressierung wie sie ext2 und ext3 verwenden.


Die Adressierung über die Extents des
ext4 Filesystems wird in einer ähnlicher Form angezeigt.

Level Entries                   Logical                  Physical Length Flags
 0/ 1   1/  1           0 -       16703     2791415                16704
 1/ 1   1/  9           0 -        2047     1826816 -     1828863   2048
 1/ 1   2/  9        2048 -        4095     1837056 -     1839103   2048
 1/ 1   3/  9        4096 -        6143     2463744 -     2465791   2048
 1/ 1   4/  9        6144 -        8191     2791424 -     2793471   2048
 1/ 1   5/  9        8192 -       10239     2795520 -     2797567   2048
 1/ 1   6/  9       10240 -       12287     2805760 -     2807807   2048
 1/ 1   7/  9       12288 -       14335     2859008 -     2861055   2048
 1/ 1   8/  9       14336 -       16383     2852864 -     2854911   2048
 1/ 1   9/  9       16384 -       16703     2876537 -     2876856    320

Es handelt sich hier um die genaue Aufschlüsselung der einzelnen Extents dieser Inode.
In diesem Beispiel wird von der Inode aus auf den Block 2791415 adressiert, in dem sich dann 9 Extents befinden welche bis auf den letzten jeweils 2048 Blöcke große Bereiche auf dem Datenträger adressieren.


Diese Informationen werden selten benötigt und können bei größeren Dateien durchaus auch den gesamten Bildschirminhalt füllen. Aus diesem Grund werden sie nur angezeigt wenn ext4magic mit der Option "-x" gestartet wird. Diese Option wird noch von anderen Funktionen benutzt und steuert die Ausgabe einiger Funktionen.

Wenn es notwendig ist einmal den Inhalt eines solchen Datenblockes einsehen zu wollen, hier ein kleines Beispiel. Es soll der erste Block der ext3 Datei von oben angezeigt werden. (also Filesystemblock 531.)

ROBI@LINUX:~ # ext4magic /dev/sdb1 -B 531 
Filesystem in use: /dev/sdb1              

Dump Filesystemblock        531   Status : Block is Allocated
    0000:  c7 71 13 08 62 ae a4 81 8f 01 8f 01 01 00 00 00    .q..b...........
    0010:  18 4b 3f 54 0a 00 01 00 f3 fb 31 36 78 31 36 2e    .K?T......16x16.
    0020:  66 6e 74 00 06 8e 82 d2 e0 07 00 00 13 04 12 20    fnt............ 
    0030:  00 60 ed 04 21 00 e0 ed 04 22 00 e0 ee 04 23 00    .`..!...."....#.
    0040:  a0 ef 04 24 00 a0 f4 04 25 00 80 f9 04 26 00 80    ...$....%....&..
    0050:  01 05 27 00 c0 07 05 28 00 60 08 05 29 00 e0 0b    ..'....(.`..)...
    0060:  05 2a 00 60 0f 05 2b 00 a0 12 05 2c 00 20 14 05    .*.`..+....,. ..
    0070:  2d 00 80 15 05 2e 00 20 16 05 2f 00 a0 16 05 30    -...... ../....0
    0080:  00 60 1a 05 31 00 60 1f 05 32 00 60 22 05 33 00    .`..1.`..2.`".3.
    0090:  40 26 05 34 00 a0 2a 05 35 00 a0 2e 05 36 00 80    @&.4..*.5....6..
    00a0:  32 05 37 00 a0 37 05 38 00 40 3b 05 39 00 20 40    2.7..7.8.@;.9. @
    00b0:  05 3a 00 40 45 05 3b 00 00 46 05 3c 00 00 48 05    .:.@E.;..F.<..H.
    00c0:  3d 00 e0 4b 05 3e 00 40 4d 05 3f 00 20 51 05 40    =..K.>.@M.?. Q.@
    00d0:   ..................
........

Es handelt sich also um ein Ausgabeformat vergleichbar des Linuxbefehls "hexdump -C".





Die Zeitstempel der Inode

Von Linux ist man 3 Zeitstempel gewohnt die atime ; mtime ; ctime.

Mit ext4magic werden weitere Zeitstempel in den Inode angezeigt, die dtime, sie bezeichnet den Zeitpunkt an dem diese Inodedaten gelöscht wurden und bei den ext4 Filesystemen noch eine crtime, das ist der Zeitpunkt zu dem diese Inode für eine neue Datei benutzt worden ist, also diese ist die echte "Create Time" einer Datei.



3 Zeitstempel werden in jeder Inodeausgabe immer angezeigt, die "dtime" und die "crtime" dagegen nur, soweit sie vorhanden und gesetzt ist.

das verwendete Ausgabeformat:

 ctime: 1274512877:2933655396 -- Sat May 22 09:21:17 2010
 atime: 1274512899:3413691564 -- Sat May 22 09:21:39 2010
 mtime: 1274512877:2933655396 -- Sat May 22 09:21:17 2010
crtime: 1259871665:0000000000 -- Thu Dec  3 21:21:05 2009

Die erste Zahl zB. "1274512877" hinter dem Namen des Zeitstempels ist die Zeit in Sekunden (UTC), diese Zeitangabe wird in ext4magic für die Eingabe Optionen verwendet. Es ist also möglich sich Zeiten direkt aus den Inodeausgaben herauszukopieren, andere Funktionen enthalten ebenfalls immer dieses Sekunden Format mit in ihren Ausgaben, so ist auf der Konsole weitestgehend ein manuelles Umrechnen von Zeiten für die Eingabe zB. mittels des Befehls date nicht notwendig.





Die Kopien der Inode im Journal

Die bisherigen Beispiele auf dieser Seite haben immer die aktuelle Inode des Filesystems gezeigt. Auch ist es so nur möglich ungelöschte Inode einzusehen. Es ist aber auch möglich alle oder bestimmte Inodekopien aus dem Journal auszugeben. Ausgelöst wird das dadurch, wenn beim Kommandoaufruf eine Option mitgegeben wird welche das Öffnen des Jorunals bewirkt. Hier im Beispiel ist es die Option "-T" ; möglich ebenfalls auch die Optionen -J ; -a <Zeit> oder -b <Zeit>

ROBI@LINUX:~ # ext4magic /home/rob/test/test.iso -I2 -Tx | sed -ne '/^Dump/,/^BLOCKS/p'
Dump Inode 2 from journal transaction 24                                               
Inode: 2   Type: directory    Mode:  0755   Flags: 0x0                                 
Generation: 0    Version: 0x00000000:00000000                                          
User:     0   Group:     0   Size: 4096                                                
File ACL: 0    Directory ACL: 0                                                        
Links: 11   Blockcount: 8                                                              
Fragment:  Address: 0    Number: 0    Size: 0                                          
 ctime: 1260473457:0000000000 -- Thu Dec 10 20:30:57 2009                              
 atime: 1260473464:0000000000 -- Thu Dec 10 20:31:04 2009                              
 mtime: 1260473457:0000000000 -- Thu Dec 10 20:30:57 2009                              
crtime: 1260470173:0000000000 -- Thu Dec 10 19:36:13 2009                              
Size of extra inode fields: 28                                                         
BLOCKS:                                                                                
Dump Inode 2 from journal transaction 25                                               
Inode: 2   Type: directory    Mode:  0755   Flags: 0x0                                 
Generation: 0    Version: 0x00000000:00000000                                          
User:     0   Group:     0   Size: 4096
File ACL: 0    Directory ACL: 0
Links: 11   Blockcount: 8
Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 1260473478:0000000000 -- Thu Dec 10 20:31:18 2009
 atime: 1260473478:0000000000 -- Thu Dec 10 20:31:18 2009
 mtime: 1260473478:0000000000 -- Thu Dec 10 20:31:18 2009
crtime: 1260470173:0000000000 -- Thu Dec 10 19:36:13 2009
Size of extra inode fields: 28
BLOCKS:
Dump Inode 2 from journal transaction 26
Inode: 2   Type: directory    Mode:  0755   Flags: 0x0
Generation: 0    Version: 0x00000000:00000000
User:     0   Group:     0   Size: 4096
File ACL: 0    Directory ACL: 0
Links: 11   Blockcount: 8
Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 1260473508:0000000000 -- Thu Dec 10 20:31:48 2009
 atime: 1260473513:0000000000 -- Thu Dec 10 20:31:53 2009
 mtime: 1260473508:0000000000 -- Thu Dec 10 20:31:48 2009
crtime: 1260470173:0000000000 -- Thu Dec 10 19:36:13 2009
Size of extra inode fields: 28
BLOCKS:
Dump Inode 2 from journal transaction 29
Inode: 2   Type: directory    Mode:  0755   Flags: 0x0
Generation: 0    Version: 0x00000000:00000000
User:     0   Group:     0   Size: 4096
File ACL: 0    Directory ACL: 0
Links: 3   Blockcount: 8
Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 1260473770:0000000000 -- Thu Dec 10 20:36:10 2009
 atime: 1260473772:0000000000 -- Thu Dec 10 20:36:12 2009
 mtime: 1260473770:0000000000 -- Thu Dec 10 20:36:10 2009
crtime: 1260470173:0000000000 -- Thu Dec 10 19:36:13 2009
Size of extra inode fields: 28
BLOCKS:
Dump Inode 2 from journal transaction 47
Inode: 2   Type: directory    Mode:  0755   Flags: 0x0
Generation: 0    Version: 0x00000000:00000000
User:     0   Group:     0   Size: 4096
File ACL: 0    Directory ACL: 0
Links: 3   Blockcount: 8
Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 1272100594:0000000000 -- Sat Apr 24 11:16:34 2010
 atime: 1272048604:0000000000 -- Fri Apr 23 20:50:04 2010
 mtime: 1272100594:0000000000 -- Sat Apr 24 11:16:34 2010
crtime: 1260470173:0000000000 -- Thu Dec 10 19:36:13 2009
Size of extra inode fields: 28
BLOCKS:

Es handelt sich hierbei um ein Root-Verzeichnis aus einem Filesystemimage und es wurden die Verzeichnisausgaben mittels des Befehls sed entfernt.

Hier sind jetzt die einzelnen Inode Kopien die sich im Journal befinden aufgelistet. Je nachdem wie viele Kopien einer Inode sich im Journal befinden kann die Geschichte einer Datei verfolgt werden, oder es kann ermittlet werden, ob eine Inode für mehrere Dateien Verwendung gefunden hat. ext4magic geht intern immer davon aus, dass es sich bei Inodekopien mit der selben ctime, der selben Dateigröße und der selben Anzahl von Links, um eine identische Kopie handelt und zeigt sie nicht mehrfach an, nur weil sich die atime geändert hat, oder weil der Inodeblock wegen Aktivitäten anderer Inode mehrfach ins Journal geschrieben wurde.



Jede dieser Inodekopien (mit Ausnahme von Verzeichnissen, dort funktioniert es etwas anders) die so im Journal gefundnen werden, kann und in der die dtime nicht gesetzt ist, könnte von ext4magic dazu genutzt werden, eine Kopie dieser Datei zu genau diesem Zeitpunkt herzustellen. Unter der Voraussetzung, das sich in der Zwischenzeit die Daten in den von dieser Inode adressierten Datenblöcken nicht geändert hat, kann so eine genaue Kopie dieser Datei zu diesem Zeitpunkt hergestellt werden. Die Steuerung welche Inode jetzt für einen Recoverversuch genutzt werden soll, ist unter anderem von den Recoveroptionen und von den verwendeten Zeitoptionen von extmagic abhängig. In besonders schwierigen Fällen können auch einzelne Dateien durch das direkte auswählen einer bestimmten Inodekopie recovert werden. ,





Ext4magic: Inode - Directory - Journal - Installation - Zeit-Optionen - Tricks&Tipps - Manpage - Expert-Mode