Provided by: manpages-fr-dev_4.19.0-7_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⟩.