orm@doc-tcpip.org | Erstellt: März 2000 - Letzte Modifikation: Juni 2001 |
Die Inodes sind eine Gruppe besonderer Blocks in jedem Filesystem. Diese Blocks stehen am Anfang des physikalischen Bereichs, der auf der Platte dem Filesystem entspricht. Das Verhältnis von Inodes zu Blocks für Daten ist fest und wird beim anlegen des Filesystems (der Formatierung) definiert. Sind keine Inodes mehr verfügbar, so ist das Filesystem voll, auch wenn nicht jeder Daten-Block belegt ist.
In den Inodes werden die Permissions des Files gespeichert, eine Reihe Zeitstempel und die Liste der physikalischen Blocks, die die eigentlichen Daten der Datei beinhalten. Der Name des Files steht nicht in der Inode. Dafür dient ein eigenes File, der Directory Eintrag, wo Pfade und Namen mit einer inode-number verknüpft werden.
Es zeigt den Inhalt der inode. Hier direkt ein Beispiel. Für den Aufruf des Kommandos muß man die Inoed des gesuchten Files wissen, sowie den Namen des Devices. Ich suche das File /usr/lib. Die Inode-Nummer finde ich mit dem Kommando ls -i /usr/lib, und das Devices, das das Filesystem /usr beherbergt, finde ich mit dem mount-Kommando.
root@nimmaster#istat 47 /dev/hd4 Inode 47 on device 10/4 File Protection: rw-r--r-- Owner: 0(root) Group: 0(system) Link count: 1 Length 12288 bytes Last updated: Fri Nov 03 14:12:38 2000 Last modified: Mon Nov 13 04:01:06 2000 Last accessed: Mon Nov 13 04:01:05 2000 Block pointers (hexadecimal): 105 106 107 0 0 0 0 0
Die erste Zeile wiederholt die Inode-Nummer, gibt das Device an (10/4 ist die Major/Minor Number des Devices) und informiert über die Art des Files - hier ein einfache File. Die Major/Minor Number übersetze ich, indem ich nach /dev schaue:
crw-rw-rw- 1 root system 1, 0 Feb 07 14:53 tty crw-rw-rw- 1 root system 30, 0 Feb 25 1999 ttyp0 crw-rw-rw- 1 root system 30, 1 Feb 25 1999 ttyp1 . ======
Dann werden die Einträge zu den Permissions gelistet - das ist Standard Unix...
Schließlich in einem Block der Besitzer und seine Gruppe. In der Zeile darunter der link-count und die wirkliche Größe in Byte. Der Link-Count gibt die Anzahl der Einträge im Directory auf diese Inode an. Bei einem Hardlink würde hier also eine 2 stehen.
Die nächsten drei Zeilen geben die verschiedenen Zeitstempel
(atime, ctime, mtime) an. Diese
werden aktualisiert, wenn eine der folgenden Aktionen an dem File (also
an der Inode) ausgeführt wurden:
atime: update, wenn der Link zu den File-Data Blocks benutzt wird.
Also ein Fileread durchgeführt wurde.
mtime: update, wenn das File modifiziert wurde, also die Blocks sich
geändert haben. Diesen Zeitstempel kann man mit ls -e sehen.
ctime: update, wenn sich die Inode als solche ändert.
Das passiert z.B. wenn man ein File kürzt: Es ändert sich die ctime
und die mtime:
mtime ==> Änderung der Anzahl Blocks (sieht man mit ls -u)
ctime ==> Änderung des Eintrages für die Größe (sieht man mit ls -c)
Wichtig ist, daß es unter UNIX keine "creation time" gibt.
Mit Perl kann man das stat-Kommando zum Auslesen von utime benutzten.
In der letzten Zeile (meist etwas länger, aber das File ist klein) die Liste der physikalischen Blocks, in denen das File liegt. Unter AIX wird die Verwaltung von Platten und Filesystemen vom LVM übernommen, der eine logische Schicht einschiebt - dort wäre ich daher nicht ganz so sicher.
Mit den Filenamen geht es auch:
root@nimmaster#istat lib Inode 2054 on device 10/5 Directory Protection: rwxr-xr-x Owner: 2(bin) Group: 2(bin) Link count: 32 Length 5120 bytes Last updated: Wed Oct 04 11:18:50 2000 Last modified: Wed Oct 04 11:18:50 2000 Last accessed: Tue Oct 31 15:35:13 2000
Ich kann auch das pstat-Kommando benutzen. pstat -i gibt mir eine Liste aller Files mit dem entsprechenden Device:
ADDRESS MAJ MIN INUMB REF LINK UID GID SIZE MODE SMAJ SMIN FLAGS 0x132d0db0 010 0010 10559 0 1 0 0 0 f---600 - - 0x13113710 010 0010 2397 1 1 0 0 65536 f---600 - -
Das stat unter FreeBSD (und den anderen *BSD) hat denselben Effekt wie das istat-Kommando unter AIX. Daher wird es hier nicht noch einmal diskutiert - siehe oben. Ein Beispiel gibt es trotzdem:
elnuevo# stat .login File: ".login" Size: 297 Allocated Blocks: 2 Filetype: Regular File Mode: (0644/-rw-r--r--) Uid: (0/root) Gid: (0/wheel) Device: 160768 Inode: 367 Links: 1 Access: Thu Jul 5 09:54:21 2001 Modify: Wed Dec 6 21:40:39 2000 Change: Tue Mar 6 18:52:16 2001
Unter Linux sieht das alles ganz anders aus - hier hängt es nämlich noch von der Distribution ab, und vom Umfang der Installation. Auf den meisten Redhat Distributionen ist das stat-Kommando vorhanden, bei SuSE muß man es wahrscheinlich nachinstallieren. Es gilt wieder das oben ausgeführte, und diesmal gibt es kein Beispiel.
Das eigentlich interessantere Kommando ist das debugfs-Kommando, was als Teil des ext2fs , also des Standard Filesystemes unter Linux, mitkommt. Es handelt sich hierbei um ein sehr mächtiges Werkzeug, mit dem man natürlich auch einiges kaputtmachen kann. Will man etwas über Inodes wissen, so muß man zuerst das gewünschte Filesystem öffnen. Das finde ich mit dem mount-Kommando (es muß das Device geöffnet werden, auf dem das Filesystem liegt). Dann kann ich eine Reihe Befehle absetzen (? zeigt eine Liste). Mit stat filename habe ich mein geliebtes stat-Kommando wieder. Die Ausgabe ist oben erläutert. Man kann mit debufs viel mehr machen, Parameter in der Inodes veränden, Inodes leeren etc. Hier ein Beispiel (RedHat):
[root@elpequeno /tmp]# mount /dev/hda7 on /tmp type ext2 (rw) ** Ein bisschen gekürzt ** [root@elpequeno /tmp]# debugfs debugfs 1.19, 13-Jul-2000 for EXT2 FS 0.5b, 95/08/09 debugfs: open /dev/hda7 debugfs: ls 2 (12) . 2 (12) .. 4081 (20) .font-unix 13 (28) exrc 11 (20) lost+found 15 (40) syscontrol.li 20401 (20) .X11-unix 16 (20) typescript 24481 (36) .ICE-unix 26521 (44) orbit-root 30601 (772) orbit-orm debugfs: stat exrc Inode: 13 Type: regular Mode: 0777 Flags: 0x0 Generation: 302894 User: 0 Group: 0 Size: 1902 File ACL: 0 Directory ACL: 0 Links: 1 Blockcount: 4 Fragment: Address: 0 Number: 0 Size: 0 ctime: 0x3b396caa -- Wed Jun 27 07:18:34 2001 atime: 0x3b3c57d3 -- Fri Jun 29 12:26:27 2001 mtime: 0x3b396c82 -- Wed Jun 27 07:17:54 2001 BLOCKS: 262 263 TOTAL: 2 debugfs: close debugfs: quit
Das Device/Filesystem sollte man sorgfältig öffnen und schließen, um unangenehmen Überraschungen vorzubeugen. Im Beispiel sind die Kommandos natürlich auseinander gezogen, damit es besser lesbar wird.
[ Allgemein | UNIX | AIX | TCP-IP | TCP | ROUTING | DNS | NTP | NFS | FreeBSD | Linux | RPi | SMTP | Tracing | GPS | LW ]
Copyright 2001-2021 by Orm Hager - Es gilt die GPL