filsys.h file

Zweck

Enthält das Format eines logischen JFS-Datenträgers (Journaled File System).

Syntax

#include < sys/filsys.h >

Beschreibung

Die Datei filsys.h enthält das Format eines JFS-Dateisystems. Ein JFS-Dateisystem hat ein einheitliches Format für wichtige Informationen und ist in eine Reihe von Einheiten mit fester Größe oder Fragmente unterteilt. Fragmente dienen als Basiseinheit für die Zuordnung von Plattenspeicherplatz im Dateisystem und können kleiner als die logische Blockgröße des Dateisystems (4096 Byte) sein. Der Superblock des Dateisystems zeichnet die logische Blockgröße und Fragmentgröße sowie die Größe des gesamten Dateisystems auf.

Eine eindeutige Funktion des JFS ist die Implementierung von Dateisystemmetadaten als nicht benannte Dateien, die sich in diesem Dateisystem befinden. Beispielsweise sind die Platten-I-Nodes für jedes Dateisystem in den Blockfragmenten enthalten, die der Datei zugeordnet sind, die vom IKNOTENS_I I-Node beschrieben wird. Die I-Node-Nummer für die Bootdatei ist 0. Jeder der folgenden reservierten I-Nodes entspricht einer Metadatendatei des Dateisystems:

Element Beschreibung
SUPER_I Superblockdatei
IKNOTENS_I I-Nodes der Platte
INDIR_I Indirekte Dateiblöcke, doppelt und einfach
INOMAP_I I-Node-Zuordnungsbitmap
ROOTDIR_I I-Node des Stammverzeichnisses
DISKMAP_I Blockfragmentzuordnungsbitmap
IKNOTENX_I I-Node-Erweiterungen
IKNOTENXMAP_I Zuordnungsübersicht für I-Node-Erweiterungen

Die ersten 4096 Byte des Dateisystems werden nicht verwendet und sind für ein Bootprogramm oder andere Informationen verfügbar. Die zweiten 4096 Byte des Dateisystems werden zum Speichern des Superblocks des Dateisystems verwendet. Die Struktur eines JFS-Superblocks folgt:

/* The following disk-blocks are formatted or reserved:
 * 
 *      ipl block 0 - not changed by filesystem.
 *
 *      superblocks at  1 x 4096 (primary superblock) and  31 x
 *      4096 (secondary superblock). the secondary super-block  
 *      location is likely to be on a different disk-surface than
 *      the primary super-block. both structures are allocated as
 *      fragments in ".superblock".
 *
 *      fragments for .inodes according to BSD layout. each 
 *      allocation group contains a fixed number of disk inodes. 
 *      for fsv3 file systems, each allocation group contains one
 *      inode per 4096 byte fragment of the allocation group, 
 *      with the number of fragments within each group described
 *      by the s_agsize field of the superblock. for fsv3p file 
 *      systems, the number of inodes per group is described by 
 *      the s_iagsize field of the superblock and may be less 
 *      than or greater than the number of fragments per group. 
 *      for these file systems, s_agsize describes the number of   
 *      s_fragsize fragments contained within each allocation 
 *      group. 
 *
 *      the first allocation group inodes starts at 32 x
 *      4096 bytes and consumes consecutive fragments sufficient
 *      to hold the group's inodes. the inode fragments for all
 *      other allocation groups start in the first fragments of 
 *      the allocation group and continue in consecutive 
 *      fragments sufficient to hold the group's inodes. 
 *
 *      other fragments are allocated for .indirect, .diskmap, 
 *      .inodemap, and their indirect blocks starting in the 
 *      first allocation-group.
 *
 * The special fs inodes formatted and their usage is as follows:
 *
 *      inode 0 - never allocated - reserved by setting 
 *      n_link = 1
 *      inode 1 - inode for .superblock
 *      inode 2 - inode for root directory
 *      inode 3 - inode for .inodes
 *      inode 4 - inode for .indirect
 *      inode 5 - inode for .inodemap - allocation map for 
 *      .inodes
 *      inode 6 - inode for .diskmap - disk allocation map
 *      inode 7 - inode for .inodex - inode extensions
 *      inode 8 - inode for .inodexmap - allocation map for 
 *      .inodex
 *      inode 9 - 16 - reserved for future extensions
 *
 * except for the root directory, the special inodes are not in 
 * any directory.
 *
 */
#define 
IPL_B            0
#define SUPER_B 1
#define SUPER_B1         31
#define INODES_B         32
#define NON_B            0
#define SUPER_I 1
#define ROOTDIR_I        2
#define INODES_I         3
#define INDIR_I 4
#define INOMAP_I         5
#define DISKMAP_I        6
#define INODEX_I         7
#define INDOESMAP_I      8
/*
 * super block format. primary superblock is located in the 
 * second 4096 bytes of the file system. 
 * the secondary super-block is not used except for disaster 
 * recovery.
*/
 struct superblock
 {
   char s_magic[4];     /* magic number */
   char s_flag[4];      /* flag word (see below) */
   int  s_agsize;       /* fragments per allocation group */     
   int  s_logserial;  /* serial number of log when fs mounted */
   daddr_t s_fsize;     /* size (in 512 bytes) of entire fs */
   short s_bsize;       /* block size (in bytes) for this 
                
           system */
   short s_spare;       /* unused.                      */
   char  s_fname[6];  /* name of this file system        */
   char  s_fpack[6];  /* name of this volume             */
   dev_t s_logdev;      /* device address of log        */
  
  /* current file system state information, values change over 
time */
 char   s_fmod;    /* flag: set when file system is mounted */
 char   s_ronly;   /*flag: file system is read only */
 time_t   s_time;    /* time of last superblock update      */
 
  /* more persistent 
information              &
nbsp;               &
nbsp;*/
  int s_version;    /* version 
number               
           */
  int s_fragsize;    /* fragment size in bytes (fsv3p only)    */
  int s_iagsize;     /* disk inodes per alloc grp (fsv3p only) */
  int s_compress;    /* > 0 if data compression                */

};
  
    /* Version 4 fs magic number  */
    #define fsv4magic  "\102\041\207\145"  
    /* Version 4p fs magic number */
    #define fsv4pmagic "\145\207\041\102"  
    /* Version 4p version number  */
    #define fsv4pvers  1

Der Pfadname dieser Datei ist /usr/include/jfs/filsys.h. Wenn jedoch die Datei /usr/include/sys/filsys.h enthalten ist, wird die Datei /usr/include/jfs/filsys.h standardmäßig eingeschlossen.

Die Felder der Superblockstruktur haben die folgenden Funktionen:

Element Beschreibung
s_fname Gibt den Namen des Dateisystems an
s_fpack Gibt den Namen des Datenträgers an, auf dem sich das Dateisystem befindet.
s_fsize Gibt die Größe des gesamten Dateisystems in Einheiten von 512 Byte an
s_bsize Gibt die logische Blockgröße des Dateisystems in Byte an.
s_fragsize Gibt die Fragmentgröße des Dateisystems an und ist nur für fsv3p -Dateisysteme gültig. Bei fsv3 -Dateisystemen ist die Fragmentgröße des Dateisystems logisch als logische Blockgröße des Dateisystems definiert.
s_agsize Gibt die Anzahl der Fragmente pro Dateisystemzuordnungsgruppe an. Für fsv3 -Dateisysteme gibt dieses Feld auch die Anzahl der Platten-I-Nodes pro Dateisystemzuordnungsgruppe an.
s_iagsize Gibt die Anzahl der Platten-I-Nodes pro Dateisystemzuordnungsgruppe für fsv3p -Dateisysteme an. Ders_iagsizeist nur für fsv3p -Dateisysteme gültig.
s_magic Gibt den Dateitypanzeiger des Dateisystems an und wird zur Validierung von Dateisystemen verwendet. Die Dateitypanzeiger ist als 4-Byte-Zeichenfolge codiert, damit der Superblock validiert werden kann, ohne die Byteanordnung der übrigen Felder zu kennen. Verwenden Sie eine Bedingung ähnlich der folgenden, um nach einem gültigen fsv3 -Superblock zu suchen:
if (strncmp(sp->s_magic,fsv3magic,4) == 0)

Bei fsv3p -Dateisystemen erfolgt die Superblockvalidierung, indem sowohl dies_magicunds_versionFelder.

s_version Gibt die Versionsnummer des Dateisystems an und ist nur für fsv3p -Dateisysteme gültig. Verwenden Sie eine Bedingung ähnlich der folgenden, um nach einem gültigen fsv3p -Superblock zu suchen:
if (strncmp(sp->s_magic,fsv3pmagic,4) == 0 &&
    sp->s_version == fsv3pvers)
s_logdev Gibt die Einheiten-ID der Dateisystemprotokolleinheit an.
s_logserial Zeichnet die Seriennummer der Protokolleinheit zum Zeitpunkt des letzten Mounts des Dateisystems als änderbar auf.
s_fmod Enthält ein Flag, das die Sauberkeit des Dateisystems angibt. Wenn ein Dateisystem angehängt wird, wird dieses Flag geprüft und eine Warnung ausgegeben, wenn dies_fmodFeld ist ungleich null. Ein Dateisystem, dessens_fmodFeld ist gleich 0 ist sehr wahrscheinlich sauber zu sein, und ein Dateisystem, dessens_fmodFeld ist gleich 2 hat wahrscheinlich Probleme. Ders_fmodDas Feld soll ein Flag mit drei Status sein, wobei der dritte Status ein Haltestatus ist. Die drei Status lauten wie folgt:
  • 0 = Dateisystem ist bereinigt und abgehängt.
  • 1 = Dateisystem ist bereinigt und angehängt.
  • 2 = Dateisystem wurde angehängt.

Wenn Sie nur das Dateisystem an-und abhängen, schaltet das Flag zwischen den Status 0 und 1 hin und her. Wenn Sie das Dateisystem anhängen, während sich das Flag im Status 1 befindet, wechselt das Flag in den Status 2 und bleibt dort, bis Sie den Befehl Fsck ausführen. Die einzige Möglichkeit, ein beschädigtes Dateisystem zu bereinigen (das Flag von Status 2 zurück in Status 0 ändern), besteht darin, den Befehl Fsck auszuführen.

s_ronly Enthält ein Flag, das angibt, dass das Dateisystem schreibgeschützt angehängt ist. Dieses Flag wird nur im Speicher verwaltet; sein Wert auf Platte ist ungültig.
s_time Gibt an, wann der Superblock des Dateisystems zuletzt geändert wurde (in Sekunden seit dem 1. Januar 1970 00:00 Uhr (GMT)).