Provided by: manpages-fr-dev_4.13-4_all bug

NOM

       ioctl_ficlonerange, ioctl_ficlone - partager certaines données d'un fichier avec un autre fichier

SYNOPSIS

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

       int ioctl(int dest_fd, FICLONERANGE, struct file_clone_range*arg);
       int ioctl(int dest_fd, FICLONE, int src_fd);

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, ce qui est plus rapide que
       de faire une copie physique séparée des données. Les deux fichiers doivent se trouver sur le même système
       de fichiers. 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 « reflink » jusqu'à  src_length  octets  du  descripteur  de  fichier  src_fd,  à  la  position
       src_offset dans le fichier dest_fd à la position dest_offset, pourvu que les deux soient des fichiers. Si
       src_length  vaut  zéro,  l'ioctl  « reflink »  à la fin du fichier source. Ces informations vont dans une
       structure de la forme suivante :

           struct file_clone_range {
               __s64 src_fd;
               __u64 src_offset;
               __u64 src_length;
               __u64 dest_offset;
           };

       Les clones sont atomiques par rapport aux écritures concomitantes, vous n'avez donc pas besoin  de  poser
       de verrous pour avoir une copie clonéecohérente.

       L'ioctl FICLONE clone des fichiers entiers.

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 peuvent être, 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 ajouts d'écritures ; ou le système de fichiers  où  se  trouve  src_fd  ne  gère  pas  le
              reflink.

       EINVAL Le  système  de  fichiers  ne gère pas le reflink des plages de 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  des  fichiers  est  un répertoire et le système de fichiers ne prend pas en charge les régions
              partagées dans des répertoires.

       EOPNOTSUPP
              Cela peut apparaître si le système de fichiers ne gère pas le reflink d'un descripteur de  fichier
              ou si le 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

       Ces opérations d'ioctl sont apparues pour la première fois dans  Linux 4.5.  Elles  étaient  précédemment
       connues en tant que BTRFS_IOC_CLONE et BTRFS_IOC_CLONE_RANGE, et elles étaient réservées à Btrfs.

CONFORMITÉ

       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.

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

Linux                                           15 septembre 2017                          IOCTL_FICLONERANGE(2)