Provided by: manpages-fr-dev_4.21.0-2_all bug

NOM

       ioctl_fideduperange - partager les données d'un fichier avec un autre fichier

BIBLIOTHÈQUE

       Bibliothèque C standard (libc, -lc)

SYNOPSIS

       #include <linux/fs.h>      /* Définition des constantes FIDEDUPERANGE
                                       et FILE_DEDUPE_* */
       #include <sys/stat.h>

       int ioctl(int src_fd, FIDEDUPERANGE, struct file_dedupe_range *arg);

DESCRIPTION

       Si  un  système  de  fichiers prend en charge le stockage physique du partage de fichiers entre plusieurs
       fichiers (« reflink »), cette opération ioctl(2) peut être utilisée pour faire apparaître des données  du
       fichier  src_fd  dans le fichier dest_fd en partageant le stockage sous-jacent, si les données du fichier
       sont identiques (« déduplication »). Les deux  fichiers  doivent  se  trouver  sur  le  même  système  de
       fichiers.  Cela  réduit  la  consommation en stockage en permettant au système de ne stocker qu'une copie
       partagée des données. Si une écriture de fichier doit avoir lieu sur une région partagée, le  système  de
       fichiers  doit  garantir  que  les  modifications n’appartiennent qu’au fichier qui est écrit. On appelle
       généralement ce comportement la « copie sur écriture ».

       Cet ioctl accomplit l'opération « comparer et  partager  si  identique »  jusqu'à  src_lenght  octets  du
       descripteur  de fichier src_fd décalé de src_offset. Cette information est communiquée dans une structure
       de la forme suivante :

           struct file_dedupe_range {
               __u64 src_offset;
               __u64 src_length;
               __u16 dest_count;
               __u16 reserved1;
               __u32 reserved2;
               struct file_dedupe_range_info info[0];
           };

       La déduplication est atomique par rapport aux écritures concomitantes, vous n'avez  donc  pas  besoin  de
       poser de verrous pour avoir une copie dédupliquée cohérente.

       Les champs reserved1 et reserved2 doivent valoir zéro.

       Les  destinations de l'opération de déduplication se placent dans un tableau à la fin de la structure. Le
       nombre de destinations est donné dans dest_count et les informations sur la destination  sont  transmises
       sous la forme suivante :

           struct file_dedupe_range_info {
               __s64 dest_fd;
               __u64 dest_offset;
               __u64 bytes_deduped;
               __s32 status;
               __u32 reserved;
           };

       Chaque  opération  de  déduplication envoie src_length octets dans le descripteur de fichier dest_fd à la
       position dest_offset. Le champ reserved doit valoir zéro. Pendant l'appel, src_fd  doit  être  ouvert  en
       lecture  et  dest_fd  en  écriture.  La  taille  combinée  du tableau des structures file_dedupe_range et
       file_dedupe_range_info ne doit pas dépasser la taille de la  page  du  système.  La  taille  maximale  de
       src_length  dépend  du  système  de  fichiers  et est généralement de 16 Mio. Cette limite sera augmentée
       silencieusement par le système de fichiers. Par convention, le stockage utilisé par src_fd est associé  à
       dest_fd et le contenu précédent de dest_fd est libéré.

       En  cas de succès de cet ioctl, le nombre d'octets dédupliqués avec succès est renvoyé dans bytes_deduped
       et un code de retour de l'opération de déduplication est renvoyé dans status. Si  un  seul  octet  de  la
       plage  ne  correspond  pas,  la  demande  de  déduplication  sera  ignorée  et status sera positionné sur
       FILE_DEDUPE_RANGE_DIFFERS. Le code de status est positionné sur FILE_DEDUPE_RANGE_SAME en cas de  succès,
       sur  un  code  d'erreur  négatif  en  cas  d'erreur,  ou  sur FILE_DEDUPE_RANGE_DIFFERS si les données ne
       correspondaient pas.

VALEUR RENVOYÉE

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

ERREURS

       Les codes d'erreur possibles comprennent, entre autres, les suivants :

       EBADF  src_fd n'est pas ouvert en lecture ; dest_fd n'est pas ouvert en écriture ou il n'est  ouvert  que
              pour  des  compléments  d'écriture ;  ou le système de fichiers où se trouve src_fd ne gère pas la
              déduplication.

       EINVAL Le système de fichiers ne gère pas la déduplication des plages des fichiers donnés.  Cette  erreur
              peut  également  apparaître si un descripteur de fichier représente un périphérique, un FIFO ou un
              socket. Les systèmes de fichiers d'un disque nécessitent généralement que  les  paramètres  de  la
              position  et  de  la  longueur  soient alignés sur la taille de bloc fondamentale. XFS et Btrfs ne
              prennent pas en charge le chevauchement des plages de reflink dans le même fichier.

       EISDIR Un ou plusieurs fichiers sont des répertoires et le système de fichiers ne gère  pas  les  régions
              partagées dans les répertoires.

       ENOMEM Le noyau n'a pas pu allouer assez de mémoire pour effectuer l'opération ou dest_count est si grand
              que la description du paramètre d'entrée remplit plus d'une page de mémoire.

       EOPNOTSUPP
              Cela peut apparaître si le système de fichiers ne gère pas la déduplication  d'un  descripteur  de
              fichier ou si un descripteur se rapporte à des inœuds spéciaux.

       EPERM  dest_fd est immuable.

       ETXTBSY
              Un  des  fichiers  est  un  fichier  d'échange.  Les fichiers d'échange ne peuvent pas partager de
              stockage.

       EXDEV  dest_fd et src_fd ne sont pas sur le même système de fichiers monté.

VERSIONS

       Cette opération ioctl est apparue pour la première fois dans Linux 4.5. Elle  était  précédemment  connue
       sous le nom BTRFS_IOC_FILE_EXTENT_SAME et elle était réservée à Btrfs.

STANDARDS

       Cette API est spécifique à Linux.

NOTES

       Une  opération  de  copie  sur  écriture  nécessitant  l'allocation  d'un  nouveau  stockage, l'opération
       fallocate(2) peut ne plus  partager  les  blocs  partagés  pour  garantir  que  les  écritures  suivantes
       n'échoueront pas du fait d'un manque d'espace disque.

       Certains  systèmes  de  fichiers peuvent limiter la quantité de données qui peut être dédupliquée dans un
       seul appel.

VOIR AUSSI

       ioctl(2)

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