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  1

Le 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 à:
if (strncmp(sp->s_magic,fsv3magic,4) == 0)

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 à:
if (strncmp(sp->s_magic,fsv3pmagic,4) == 0 &&
    sp->s_version == fsv3pvers)
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:
  • 0 = Le système de fichiers est propre et démonté.
  • 1 = Le système de fichiers est propre et monté.
  • 2 = Le système de fichiers a été monté.

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)).