ioctl_fideduperange(2) System Calls Manual ioctl_fideduperange(2) NOM ioctl_fideduperange - partager les donnees d'un fichier avec un autre fichier BIBLIOTHEQUE Bibliotheque C standard (libc, -lc) SYNOPSIS #include /* Definition des constantes FIDEDUPERANGE et FILE_DEDUPE_* */ #include int ioctl(int src_fd, FIDEDUPERANGE, struct file_dedupe_range *arg); DESCRIPTION Si un systeme de fichiers prend en charge le stockage physique du partage de fichiers entre plusieurs fichiers (<< reflink >>), cette operation ioctl(2) peut etre utilisee pour faire apparaitre des donnees du fichier src_fd dans le fichier dest_fd en partageant le stockage sous-jacent, si les donnees du fichier sont identiques (<< deduplication >>). Les deux fichiers doivent se trouver sur le meme systeme de fichiers. Cela reduit la consommation en stockage en permettant au systeme de ne stocker qu'une copie partagee des donnees. Si une ecriture de fichier doit avoir lieu sur une region partagee, le systeme de fichiers doit garantir que les modifications n'appartiennent qu'au fichier qui est ecrit. On appelle generalement ce comportement la << copie sur ecriture >>. Cet ioctl accomplit l'operation << comparer et partager si identique >> jusqu'a src_lenght octets du descripteur de fichier src_fd decale de src_offset. Cette information est communiquee 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 deduplication est atomique par rapport aux ecritures concomitantes, vous n'avez donc pas besoin de poser de verrous pour avoir une copie dedupliquee coherente. Les champs reserved1 et reserved2 doivent valoir zero. Les destinations de l'operation de deduplication se placent dans un tableau a la fin de la structure. Le nombre de destinations est donne 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 operation de deduplication envoie src_length octets dans le descripteur de fichier dest_fd a la position dest_offset. Le champ reserved doit valoir zero. Pendant l'appel, src_fd doit etre ouvert en lecture et dest_fd en ecriture. La taille combinee du tableau des structures file_dedupe_range et file_dedupe_range_info ne doit pas depasser la taille de la page du systeme. La taille maximale de src_length depend du systeme de fichiers et est generalement de 16 Mio. Cette limite sera augmentee silencieusement par le systeme de fichiers. Par convention, le stockage utilise par src_fd est associe a dest_fd et le contenu precedent de dest_fd est libere. En cas de succes de cet ioctl, le nombre d'octets dedupliques avec succes est renvoye dans bytes_deduped et un code de retour de l'operation de deduplication est renvoye dans status. Si un seul octet de la plage ne correspond pas, la demande de deduplication sera ignoree et status sera positionne sur FILE_DEDUPE_RANGE_DIFFERS. Le code de status est positionne sur FILE_DEDUPE_RANGE_SAME en cas de succes, sur un code d'erreur negatif en cas d'erreur, ou sur FILE_DEDUPE_RANGE_DIFFERS si les donnees ne correspondaient pas. VALEUR RENVOYEE En cas d'erreur, la valeur de retour est -1 et errno est definie pour preciser 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 ecriture ou il n'est ouvert que pour des complements d'ecriture ; ou le systeme de fichiers ou se trouve src_fd ne gere pas la deduplication. EINVAL Le systeme de fichiers ne gere pas la deduplication des plages des fichiers donnes. Cette erreur peut egalement apparaitre si un descripteur de fichier represente un peripherique, un FIFO ou un socket. Les systemes de fichiers d'un disque necessitent generalement que les parametres de la position et de la longueur soient alignes sur la taille de bloc fondamentale. XFS et Btrfs ne prennent pas en charge le chevauchement des plages de reflink dans le meme fichier. EISDIR Un ou plusieurs fichiers sont des repertoires et le systeme de fichiers ne gere pas les regions partagees dans les repertoires. ENOMEM Le noyau n'a pas pu allouer assez de memoire pour effectuer l'operation ou dest_count est si grand que la description du parametre d'entree remplit plus d'une page de memoire. EOPNOTSUPP Cela peut apparaitre si le systeme de fichiers ne gere pas la deduplication d'un descripteur de fichier ou si un descripteur se rapporte a des inoeuds speciaux. EPERM dest_fd est immuable. ETXTBSY Un des fichiers est un fichier d'echange. Les fichiers d'echange ne peuvent pas partager de stockage. EXDEV dest_fd et src_fd ne sont pas sur le meme systeme de fichiers monte. VERSIONS Certains systemes de fichiers peuvent limiter la quantite de donnees qui peut etre dedupliquee dans un seul appel. STANDARDS Linux. HISTORIQUE Linux 4.5. Cette operation ioctl etait precedemment connue sous le nom BTRFS_IOC_FILE_EXTENT_SAME et etait reservee a Btrfs. NOTES Une operation de copie sur ecriture necessitant l'allocation d'un nouveau stockage, l'operation fallocate(2) peut ne plus partager les blocs partages pour garantir que les ecritures suivantes n'echoueront pas du fait d'un manque d'espace disque. VOIR AUSSI ioctl(2) TRADUCTION La traduction francaise de cette page de manuel a ete creee par Christophe Blaess , Stephan Rafin , Thierry Vignaud , Francois Micaux, Alain Portal , Jean-Philippe Guerard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas Francois , Florentin Duneau , Simon Paillard , Denis Barbier , David Prevot et Jean-Philippe MENGUAL Cette traduction est une documentation libre ; veuillez vous reporter a la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITE LEGALE. Si vous decouvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message a . Pages du manuel de Linux 6.06 31 octobre 2023 ioctl_fideduperange(2)