Provided by: manpages-fr-dev_4.23.1-1_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 d'opération 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

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

STANDARDS

       Linux.

HISTORIQUE

       Linux 4.5.

       Cette opération ioctl était précédemment connue sous le nom BTRFS_IOC_FILE_EXTENT_SAME  et
       était réservée à Btrfs.

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.

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