Fichier filsys.h
Objectif
Contient le format d'un volume logique JFS (Journaled File System).
Syntaxe
#include < sys/filsys.h >
Descriptif
Le fichier filsys.h contient le format d'un système de fichiers JFS. Un système de fichiers JFS a un format commun pour les informations vitales et est divisé en plusieurs unités de taille fixe, ou fragments. Les fragments servent d'unité de base de l'allocation d'espace disque du système de fichiers et peuvent être plus petits que la taille de bloc logique du système de fichiers, qui est de 4096 octets. Le superbloc du système de fichiers enregistre la taille de bloc logique et la taille de fragment, ainsi que la taille de l'ensemble du système de fichiers.
Une caractéristique unique de JFS est l'implémentation des métadonnées du système de fichiers en tant que fichiers sans nom qui résident dans ce système de fichiers. Par exemple, les i-nodes du disque pour tout système de fichiers sont contenus dans les fragments de blocs alloués au fichier décrit par le i-node INODES_I . Le numéro i-node du fichier d'amorçage est 0. Chacun des i-nodes réservés suivants correspond à un fichier de métadonnées de système de fichiers:
| Article | Descriptif |
|---|---|
| SUPER_I | Fichier superbloc |
| INODES_I | I-nodes du disque |
| INDIR_I | Blocs de fichiers indirects, doubles et simples |
| INOMAP_I | Mappe de bits d'i-node |
| RÉP_INSTALL_ROOT_I | Répertoire racine i-node |
| DISKMAP_I | Mappe de bits d'allocation de fragment de bloc |
| INODEX_I | Extensions i-node |
| INODEXMAP_I | Mappe d'allocation pour les extensions i-node |
Les 4096 premiers octets du système de fichiers sont inutilisés et disponibles pour contenir un programme d'amorçage ou d'autres informations. Les deuxième 4096 octets du système de fichiers sont utilisés pour contenir le superbloc de système de fichiers. Voici la structure d'un superbloc JFS:
/* 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 1Le nom de chemin de ce fichier est /usr/include/jfs/filsys.h. Toutefois, si le fichier /usr/include/sys/filsys.h est inclus, le fichier /usr/include/jfs/filsys.h est inclus par défaut.
Les zones de la structure de superbloc ont les fonctions suivantes:
| Article | Descriptif |
|---|---|
| s_fname | Indique le nom du système de fichiers. |
| s_fpack | Indique le nom du volume sur lequel réside le système de fichiers. |
| s_fsize | Indique l'intégralité de la taille du système de fichiers dans les unités de 512 octets. |
| s_bsize | Indique la taille du bloc logique du système de fichiers en octets. |
| s_fragsize | Indique la taille de fragment du système de fichiers et n'est valide que pour les systèmes de fichiers fsv3p . Pour les systèmes de fichiers fsv3 , la taille de fragment de système de fichiers est définie logiquement comme la taille de bloc logique du système de fichiers. |
| s_agsize | Indique le nombre de fragments par groupe d'allocation de système de fichiers. Pour les systèmes de fichiers fsv3 , cette zone indique également le nombre d'i-nodes de disque par groupe d'allocation de système de fichiers. |
| s_iagsize | Indique le nombre d'i-nodes de disque par groupe d'allocation de système de fichiers pour les systèmes de fichiers fsv3p . :NONE.s_iagsizeN'est valide que pour les systèmes de fichiers fsv3p . |
| s_magic | Indique le numéro de magie du système de fichiers et est utilisé pour valider les systèmes de fichiers. Le Nombre magique est codé en tant que chaîne de caractères à 4 octets pour permettre de valider le superbloc sans connaître l'ordre des octets des autres zones. Pour rechercher un superbloc fsv3 valide, utilisez une condition similaire à:Pour les systèmes de fichiers fsv3p , la validation du superbloc est effectuée en vérifiant les deuxs_magicets_version. |
| s_version | Indique le numéro de version du système de fichiers et n'est valide que pour les systèmes de fichiers fsv3p . Pour rechercher un superbloc fsv3p valide, utilisez une condition similaire à: |
| s_logdev | Indique l'ID unité de l'unité de journalisation du système de fichiers. |
| s_logserial | Enregistre le numéro de série de l'unité de journal au moment où le dernier système de fichiers a été monté comme modifiable. |
| s_fmod | Contient un indicateur permettant d'indiquer la propreté du système de fichiers. Chaque fois qu'un système de fichiers est monté, cette option est cochée et un message d'avertissement est imprimé si les_fmodEst égal à zéro. Un système de fichiers donts_fmodEst égal à 0 est très susceptible d'être propre, et un système de fichiers donts_fmodEst égal à 2 est susceptible d'avoir des problèmes. :NONE.s_fmodEst destinée à être un drapeau à trois états dont le troisième état est un état collant. Les trois États sont:
Si vous ne montez et démonter que le système de fichiers, le drapeau bascule entre les états 0 et 1. Si vous montez le système de fichiers alors que l'indicateur est à l'état 1, l'indicateur passe à l'état 2 et reste là jusqu'à ce que vous exécutez la commande Fsck . La seule façon de nettoyer un système de fichiers endommagé (changer l'indicateur de l'état 2 à l'état 0) est d'exécuter la commande Fsck . |
| s_ronly | Contient un indicateur indiquant que le système de fichiers est monté en lecture seule. Cet indicateur est conservé en mémoire uniquement ; sa valeur sur le disque n'est pas valide. |
| s_time | Indique la dernière fois que le superbloc du système de fichiers a été modifié (en secondes depuis 00:00 le 1er janvier 1970 (GMT)). |