IOCTL_GETFSMAP(2)

NOM
ioctl_getfsmap - récupérer la topographie physique du système de fichiers

SYNOPSIS
#include <sys/ioctl.h>
#include <linux/fs.h>
#include <linux/fsmap.h>

int ioctl(int fd, FS_IOC_GETFSMAP, struct fsmap_head * arg);

DESCRIPTION
Cette opération ioctl(2) récupère les plans de domaine (extent) d'un système de fichiers. Ces informations peuvent être utilisées, entre autres, pour rechercher les fichiers associés à un bloc physique, analyser l'espace libre, ou chercher les blocs connus comme défectueux.

Le seul paramètre de cette opération doit être un pointeur vers une struct fsmap_head unique :

    struct fsmap {
        __u32 fmr_device;      /* ID périphérique */
        __u32 fmr_flags;       /* Attributs de plan */
        __u64 fmr_physical;    /* Adresse du segment de périphérique */
        __u64 fmr_owner;       /* ID du propriétaire */
        __u64 fmr_offset;      /* Adresse du segment de fichier */
        __u64 fmr_length;      /* Longueur du segment */
        __u64 fmr_reserved[3]; /* Obligatoirement à zéro */
    };

    struct fsmap_head {
        __u32 fmh_iflags;       /* Attributs de contrôle */
        __u32 fmh_oflags;       /* Attributs de sortie */
        __u32 fmh_count;        /* # of entries in array incl. input */
        __u32 fmh_entries;      /* Nb d’entrées remplies (sortie) */
        __u64 fmh_reserved[6];  /* Obligatoirement à zéro */

        struct fsmap fmh_keys[2];  /* Clés basse et haute pour
                                      la recherche de plan */
        struct fsmap fmh_recs[];   /* Enregistrements renvoyés */
    };

Les deux éléments de tableau fmh_keys indiquent la clé la plus basse et la plus haute pour laquelle l'application veut les informations du plan physique par rétro-représentation. Une clé de rétro-représentation (« retro-mapping key ») consiste dans la séquence (périphérique, bloc, propriétaire, position). Les champs du propriétaire et de la position font partie de la clé car certains systèmes de fichiers prennent en charge le partage de blocs physiques entre plusieurs fichiers, ils peuvent donc renvoyer plusieurs associations pour un bloc physique donné.

Les plans des systèmes de fichiers sont copiés dans un tableau fmh_recs, qui suit immédiatement les données d'en-tête.

  Champs de la structure fsmap_head
Le champ fmh_iflags est un masque de bit passé au noyau pour modifier la sortie. Aucun attribut n'est actuellement défini, l'appelant doit donc positionner cette valeur à zéro.

Le champ fmh_oflags est un masque de bit d'attributs positionnés par le noyau concernant les plans renvoyés. Si FMH_OF_DEV_T est positionné, le champ fmr_device représente une structure dev_t contenant les numéros majeur et mineur du périphérique bloc.

Le champ fmh_count contient le nombre d'éléments du tableau à passer au noyau. Si cette valeur vaut 0, fmh_entries sera positionné au nombre d'enregistrements qui auraient été renvoyés avec un tableau plus grand ; aucune information de plan ne sera renvoyée.

Le champ fmh_entries contient le nombre d'éléments du tableau fmh_recs qui contiennent des informations utiles.

Le champ fmh_reserved doit être positionné à zéro.

  Clés
Les deux enregistrements de clés fsmap_head.fmh_keys indiquent les enregistrements de domaines le plus bas et le plus haut de l'espace de clés (keyspace) pour lequel l'appelant a demandé le renvoi. Un système de fichiers qui peut partager des blocs entre les fichiers exige probablement la série (device, physical, owner, offset, flags) pour n'indexer que les enregistrements de plan de système de fichiers. Les systèmes de fichiers classiques qui ne permettent pas ce partage pourraient identifier n'importe quel enregistrement avec uniquement (device, physical, flags). Par exemple, si la clé basse est positionnée sur (8:0, 36864, 0, 0, 0), le système de fichiers ne renverra que les enregistrements des domaines commençant ou se trouvant après 36 Kio sur le disque. Si la clé haute est positionnée sur (8:0, 1048576, 0, 0, 0), seuls les enregistrements inférieurs à 1 Mio seront renvoyés. Le format de fmr_device dans les clés doit correspondre au format de ces mêmes champs dans les enregistrements de sortie, comme défini ci-dessous. Par convention, le champ fsmap_head.fmh_keys[0] doit contenir la clé basse et le champ fsmap_head.fmh_keys[1] la clé haute pour la requête.

Par commodité, si fmr_length est positionné dans la clé basse, il sera ajouté en fonction à fmr_block ou à fmr_offset. L'appelant peut tirer parti de cette subtilité en positionnant les appels suivants à travers la copie de fsmap_head.fmh_recs[fsmap_head.fmh_entries - 1] dans la clé basse. La fonction fsmap_advance (définie dans linux/fsmap.h) fournit cette possibilité.

  Champs de la structure fsmap
Le champ fmr_device identifie uniquement le périphérique de stockage sous-jacent. Si l'attribut FMH_OF_DEV_T est positionné dans le champ fmh_oflags de l'en-tête, ce champ contient un dev_t à partir duquel les numéros majeur et mineur peuvent être extraits. Si l'attribut n'est pas positionné, ce champ contient une valeur qui doit être unique pour chaque périphérique de stockage.

Le champ fmr_physical contient l'adresse sur le disque du domaine en octets.

Le champ fmr_owner contient le propriétaire du domaine. Il s'agit d'un numéro d'inœud, sauf si FMR_OF_SPECIAL_OWNER est positionné dans le champ fmr_flags, auquel cas la valeur est déterminée par le système de fichiers. Voir la section ci-dessous concernant les valeurs du propriétaire pour plus de détails.

Le champ fmr_offset contient l'adresse logique sur l'enregistrement du plan en octets. Ce champ n'a aucun sens si les attributs FMR_OF_SPECIAL_OWNER ou FMR_OF_EXTENT_MAP sont positionnés dans fmr_flags.

Le champ fmr_length contient la longueur du domaine en octets.

Le champ fmr_flags est un masque de bit des attributs d'état du domaine. Les bits sont :

    FMR_OF_PREALLOC
        Le domaine est alloué mais pas encore écrit.

    FMR_OF_ATTR_FORK
        Ce domaine contient des données d'attributs étendus.

    FMR_OF_EXTENT_MAP
        Ce domaine contient des informations sur le plan de domaine pour le propriétaire.

    FMR_OF_SHARED
        Certaines parties de ce domaine peuvent être partagées.

    FMR_OF_SPECIAL_OWNER
        Le champ fmr_owner contient une valeur spéciale et non un numéro d'inœud.

    FMR_OF_LAST
        Il s'agit du dernier enregistrement du jeu de données.

Le champ fmr_reserved sera positionné à zéro.

  valeur du propriétaire
Généralement, la valeur du champ fmr_owner pour les domaines qui ne sont pas des métadonnées devrait être un numéro d'inœud. Cependant, les systèmes de fichiers ne sont pas obligés de signaler les numéros d'inœud ; ils peuvent plutôt renvoyer FMR_OWN_UNKNOWN si le numéro d'inœud ne peut pas être récupéré facilement, si l'appelant n'a pas assez de privilèges, si le système de fichiers ne gère pas les numéros d'inœud stables, ou pour toute autre raison. Si un système de fichiers souhaite conditionner l'envoi des numéros d'inœuds aux capacités du processus, il est fortement recommandé d'utiliser la capacité CAP_SYS_ADMIN à cette fin.

Les valeurs spéciales de propriétaire suivantes sont communes à tous les systèmes de fichiers :

    FMR_OWN_FREE
        Espace libre.

    FMR_OWN_UNKNOWN
        Ce domaine est utilisé mais son propriétaire n'est pas connu ou n’est pas facilement récupérable.

    FMR_OWN_METADATA
        Ce domaine est une métadonnée d'un système de fichiers.

XFS peut renvoyer les valeurs spéciales de propriétaire suivantes :

    XFS_FMR_OWN_FREE
        Espace libre.

    XFS_FMR_OWN_UNKNOWN
        Ce domaine est utilisé mais son propriétaire n'est pas connu ou n’est pas facilement récupérable.

    XFS_FMR_OWN_FS
        Les métadonnées de système de fichiers statiques qui existent à une adresse fixe. Il s'agit de superblocs AG et des en-têtes AGF, AGFL et AGI.

    XFS_FMR_OWN_LOG
        Le journal du système de fichiers.

    XFS_FMR_OWN_AG
        Métadonnées du groupe d'allocation telles que les btrees de l'espace libre ou du rétro-plan.

    XFS_FMR_OWN_INOBT
        L'inœud et les btrees de l'inœud libre.

    XFS_FMR_OWN_INODES
        Enregistrements de l'inœud.

    XFS_FMR_OWN_REFC
        Informations du compte de référence.

    XFS_FMR_OWN_COW
        Ce domaine est utilisé pour préparer une copie sur écriture.

    XFS_FMR_OWN_DEFECTIVE:
        Cette extension a été marquée comme étant défectueuse, soit par le système de fichiers, soit par le périphérique sous-jacent.

ext4 peut renvoyer les valeurs spéciales de propriétaire :

    EXT4_FMR_OWN_FREE
        Espace libre.

    EXT4_FMR_OWN_UNKNOWN
        Ce domaine est utilisé mais son propriétaire n'est pas connu ou n’est pas facilement récupérable.

    EXT4_FMR_OWN_FS
        Métadonnées du système de fichiers statiques qui existent à une adresse fixe. Il s'agit du superbloc et des descripteurs de groupe.

    EXT4_FMR_OWN_LOG
        Le journal du système de fichiers.

    EXT4_FMR_OWN_INODES
        Enregistrements de l'inœud.

    EXT4_FMR_OWN_BLKBM
        Plan de bit de bloc.

    EXT4_FMR_OWN_INOBM
        Plan de bit d'inœud.

VALEUR RENVOYÉE
En cas d'erreur, la valeur de retour est -1 et errno est définie pour préciser l'erreur.

ERREURS
L'erreur inscrite dans errno peut être, entre autres, une des suivantes :

EBADF
    fd n'est pas ouvert en lecture.

EBADMSG
    Le système de fichiers a détecté une erreur de somme de contrôle dans les métadonnées.

EFAULT
    Le pointeur fourni ne correspond à aucune adresse mémoire valable.

EINVAL
    Le tableau n'est pas assez long, les clés ne pointent pas vers une partie valable du système de fichiers, la clé basse pointe vers un point de l'espace d'adresses de stockage physique du système de fichiers plus élevé que la clé haute ou une valeur non nulle a été inscrite dans un champ qui doit contenir zéro.

ENOMEM
    Pas assez de mémoire pour traiter la requête.

EOPNOTSUPP
    Le système de fichiers ne prend pas en charge cette commande.

EUCLEAN
    Les métadonnées du système de fichiers sont corrompues et doivent être réparées.

VERSIONS
L'opération FS_IOC_GETFSMAP est apparue pour la première fois dans Linux 4.12.

CONFORMITÉ
Cette API est spécifique à Linux. Tous les systèmes de fichiers ne la gèrent pas.

EXEMPLES
Voir io/fsmap.c dans les xfsprogs pour un programme d'exemple.

VOIR AUSSI
ioctl(2)

COLOPHON
Cette page fait partie de la publication 5.10 du projet man-pages Linux. Une description du projet et des instructions pour signaler des anomalies et la dernière version de cette page peuvent être trouvées à l'adresse https://www.kernel.org/doc/man-pages/.

TRADUCTION
La traduction française de cette page de manuel a été créée par Christophe Blaess <https://www.blaess.fr/christophe/>, Stéphan Rafin <stephan.rafin@laposte.net>, Thierry Vignaud <tvignaud@mandriva.com>, François Micaux, Alain Portal <aportal@univ-montp2.fr>, Jean-Philippe Guérard <fevrier@tigreraye.org>, Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>, Julien Cristau <jcristau@debian.org>, Thomas Huriaux <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centraliens.net>, Florentin Duneau <fduneau@gmail.com>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>, Denis Barbier <barbier@debian.org>, David Prévot <david@tilapin.org> et Jean-Philippe MENGUAL <jpmengual@debian.org>

Cette traduction est une documentation libre ; veuillez vous reporter à la GNU General Public License version 3 (https://www.gnu.org/licenses/gpl-3.0.html) concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.

Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à debian-l10n-french@lists.debian.org.