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 1Der 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: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: |
| 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:
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)). |