orm@doc-tcpip.org

Erstellt: März 2000 - Letzte Modifikation: Juni 2001

[ Main | Local ]


Alles über Inodes

istat, stat, debugfs, fstat - AIX, FreeBSD, Linux

Die Inodes - Sinn und Zweck

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.

Das istat Kommando (AIX)

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

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 Kommando (FreeBSD)

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
 

Das debugfs Kommando (Linux)

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.


[ Main | Local ]

[ Allgemein | UNIX | AIX | TCP-IP | TCP | ROUTING | DNS | NTP | NFS | FreeBSD | Linux | SMTP | Tracing | GPS ]

Copyright 2001-2014 by Orm Hager - Es gilt die GPL
Feedback bitte an: Orm Hager (orm@doc-tcpip.org )