orm@doc-tcpip.org

Erstellt: November 1999 - Letzte Modifikation: September 2003

[ Main | Local ]


Wie finde ich das zum Filehandle gehörende File?

Nützlich zum Troubleshooten

Der Filehandle ist eine Nummer, die dem Client den Zugriff auf Verzeichnisse und Files des Servers ermöglicht. In der Nummer ist die Stelle im Filesystem des Servers vercoded, was der Server auswertet und so das gewünschte File findet.

Der Filehandle ist opaque, also für das NFS-Protokoll nicht transparent. Das bedeutet, daß der Filehandle vom Betriebssystem erzeugt wird und auch nur von diesem Betriebssystem verstanden werden muß. Das NFS-Protokoll reicht ihn nur als Token durch.

In NFSv2 ist der Filehandle auf 32 Bit festgelegt. In der Version 3 wurde der Filehandle variabel gestaltet und kann bis zu 64 Bit lang sein.

Der Server muß dafür sorgen, daß der Filehandle persistent ist - also auch einen Crash oder Reboot des Servers überlebt. Zusätzlich muß der Filehandle vom Pfadnamen unabhängig sein.

Der Filehandle sieht im IP-Trace so aus:

 
NFS: Fhandle:  
NFS:           000a0004 00000003 000a0000 04663665
NFS:           563b0000 000a0000 00023665 563b0000

Dabei ist die Platte (bzw. das logische Device) des Server-Systemes mit seiner Major- and Minor-Number sowie die Inode im entsprechenden Filesystem erkennbar:

 
NFS:           000a0004 00000003 000a0000 04663665
.              ^^^^^^^^

Die Major-Number ist hier Hex 000a, also Dezimal 10. Die Minor-Number ist Hex 0004, also Dezimal 4. Damit ist das Device bekannt.

 
NFS:           000a0004 00000003 000a0000 04663665
.                                    ^^^^ ^^^^ 

Die zweite Hälfte des 3 Wortes und die erste Hälfte des 4 Wortes ergeben zusammen eine Zahl in Hex: 00000466, das ist Dezimal 1126. Das ist die Inode.

Es ist jetzt recht einfach, die Datei auf dem Server auszumachen. Mit dem Kommando
ls -e /dev/hd*
findet sich die entsprechende Platte bzw. logisches Volumen, wenn virtuelle Laufwerke eingerichtet sind. In der Ausgabe muß dazu die abgelesene Major- und Minor-Number gefunden werden. In diesem Fall handelt es sich um /dev/hd4.

 
brw-rw-----   1 root     system       10,  8 Mar 19 12:23 /dev/hd1
brw-rw-----   1 root     system       10,  5 Mar 19 13:17 /dev/hd2
brw-rw-----   1 root     system       10,  7 Mar 14 08:40 /dev/hd3
brw-rw-----   1 root     system       10,  4 Mar 14 08:36 /dev/hd4

Mit dem mount-Kommando findet sich der Mountpoint dieses Devices. Man kann dann im entsprechenden Filesystem mit dem find-Kommando nach der Inode suchen:
find / -inum 1126

 
# mount
  node       mounted        mounted over    vfs       date        options      
-------- ---------------  ---------------  ------ ------------ --------------- 
         /dev/hd4         /                jfs    Sep 04 09:06 rw,log=/dev/hd8 
.......

# find / -inum 1126
/download
#

Der Filehandle ist also von einem Verzeichnis namens download im Root-Verzeichnis. In so einem Fall hätte ein schneller Check mit dem ls-Kommando natürlich auch gereicht:

 
# ls -i
........
  172 bin                       1111 socket.7554
   25 dev                        496 tftpboot
 1126 download                     2 tmp
   26 etc                        139 u
.......
#

Die Rückgabe (REPLY) des NFS_GETATTR hat die Inode-Nummer schon dekodiert im Nodeid-Feld.


[ Main | Local ]

[ 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
Feedback bitte an: Orm Hager (orm@doc-tcpip.org )