IOCTL_GETFSMAP(2) Manuel du programmeur Linux IOCTL_GETFSMAP(2)

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

#include <linux/fsmap.h>  /* Definition of FS_IOC_GETFSMAP,
                             FM?_OF_*, and *FMR_OWN_* constants */
#include <sys/ioctl.h>
int ioctl(int fd, FS_IOC_GETFSMAP, struct fsmap_head * arg);

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.

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.

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

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 :

Le domaine est alloué mais pas encore écrit.
Ce domaine contient des données d'attributs étendus.
Ce domaine contient des informations sur le plan de domaine pour le propriétaire.
Certaines parties de ce domaine peuvent être partagées.
Le champ fmr_owner contient une valeur spéciale et non un numéro d'inœud.
Il s'agit du dernier enregistrement du jeu de données.

Le champ fmr_reserved sera positionné à zéro.

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.

Espace libre.
Ce domaine est utilisé mais son propriétaire n'est pas connu ou n’est pas facilement récupérable.
Ce domaine est une métadonnée d'un système de fichiers.

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

Espace libre.
Ce domaine est utilisé mais son propriétaire n'est pas connu ou n’est pas facilement récupérable.
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.
Le journal du système de fichiers.
Métadonnées du groupe d'allocation telles que les btrees de l'espace libre ou du rétro-plan.
L'inœud et les btrees de l'inœud libre.
Enregistrements de l'inœud.
Informations du compte de référence.
Ce domaine est utilisé pour préparer une copie sur écriture.
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 :

Espace libre.
Ce domaine est utilisé mais son propriétaire n'est pas connu ou n’est pas facilement récupérable.
Métadonnées du système de fichiers statiques qui existent à une adresse fixe. Il s'agit du superbloc et des descripteurs de groupe.
Le journal du système de fichiers.
Enregistrements de l'inœud.
Plan de bit de bloc.
Plan de bit d'inœud.

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

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

fd n'est pas ouvert en lecture.
Le système de fichiers a détecté une erreur de somme de contrôle dans les métadonnées.
Le pointeur fourni ne correspond à aucune adresse mémoire valable.
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.
Pas assez de mémoire pour traiter la requête.
Le système de fichiers ne prend pas en charge cette commande.
Les métadonnées du système de fichiers sont corrompues et doivent être réparées.

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

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

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

ioctl(2)

Cette page fait partie de la publication 5.13 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/.

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

22 mars 2021 Linux