.\" -*- coding: UTF-8 -*- .\" Copyright 2002 Urs Thuermann (urs@isnogud.escape.de) .\" and Copyright 2015 Michael Kerrisk .\" .\" SPDX-License-Identifier: GPL-2.0-or-later .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH loop 4 "3 mai 2023" "Pages du manuel de Linux 6.05.01" .SH NOM loop, loop\-control —\ Périphériques boucle .SH SYNOPSIS .nf #include .fi .SH DESCRIPTION Un périphérique boucle est un périphérique bloc qui mappe ses blocs de données non sur un périphérique physique tel qu’un disque dur ou un support optique, mais sur les blocs d’un fichier normal dans un système de fichiers ou sur ceux d’un autre périphérique bloc. Cela peut être utile pour fournir un périphérique bloc pour un stockage d’image de système de fichiers, de façon à pouvoir le monter avec la commande \fBmount\fP(8). Il est possible de faire\ : .PP .in +4n .EX $ \fBdd if=/dev/zero of=fich.img bs=1MiB count=10\fP $ \fBsudo losetup /dev/loop4 fich.img\fP $ \fBsudo mkfs \-t ext4 /dev/loop4\fP $ \fBsudo mkdir /monperboucle\fP $ \fBsudo mount /dev/loop4 /monperboucle\fP .EE .in .PP Consulter \fBlosetup\fP(8) pour un autre exemple. .PP Une fonction de transfert peut être spécifiée pour chaque périphérique boucle dans un but de chiffrement et de déchiffrement. .PP Les opérations \fBioctl\fP(2) suivantes sont fournies par le périphérique boucle\ : .TP \fBLOOP_SET_FD\fP Associer le périphérique boucle avec le fichier ouvert dont le descripteur de fichier est passé comme (troisième) argument d’\fBioctl\fP(2). .TP \fBLOOP_CLR_FD\fP Dissocier le périphérique boucle de n’importe quel descripteur de fichier. .TP \fBLOOP_SET_STATUS\fP Régler l’état du périphérique boucle en utilisant le (troisième) argument d’\fBioctl\fP(2). Cet argument est un pointeur vers une structure \fIloop_info\fP, définie dans \fI\fP ainsi\ : .IP .in +4n .EX struct loop_info { int lo_number; /* ioctl r/o */ dev_t lo_device; /* ioctl r/o */ unsigned long lo_inode; /* ioctl r/o */ dev_t lo_rdevice; /* ioctl r/o */ int lo_offset; int lo_encrypt_type; int lo_encrypt_key_size; /* ioctl w/o */ int lo_flags; /* ioctl r/w (r/o avant Linux 2.6.25) */ char lo_name[LO_NAME_SIZE]; unsigned char lo_encrypt_key[LO_KEY_SIZE]; /* ioctl w/o */ unsigned long lo_init[2]; char reserved[4]; }; .EE .in .IP Le type de chiffrement (\fIlo_encrypt_type\fP) devrait être soit \fBLO_CRYPT_NONE\fP, \fBLO_CRYPT_XOR\fP, \fBLO_CRYPT_DES\fP, \fBLO_CRYPT_FISH2\fP, \fBLO_CRYPT_BLOW\fP, \fBLO_CRYPT_CAST128\fP, \fBLO_CRYPT_IDEA\fP, \fBLO_CRYPT_DUMMY\fP, \fBLO_CRYPT_SKIPJACK\fP ou (depuis Linux\ 2.6.0) \fBLO_CRYPT_CRYPTOAPI\fP. .IP Le champ \fIlo_flags\fP est un masque de bits qui peut inclure zéro ou plus des drapeaux suivants\ : .RS .TP \fBLO_FLAGS_READ_ONLY\fP Le périphérique boucle est en lecture seule. .TP \fBLO_FLAGS_AUTOCLEAR\fP (depuis Linux 2.6.25) .\" commit 96c5865559cee0f9cbc5173f3c949f6ce3525581 Le périphérique boucle s’autodétruira lors de la dernière fermeture. .TP \fBLO_FLAGS_PARTSCAN\fP (depuis Linux 3.2) .\" commit e03c8dd14915fabc101aa495828d58598dc5af98 Permission de l’analyse automatique des partitions. .TP \fBLO_FLAGS_DIRECT_IO\fP (depuis Linux 4.10) .\" commit 2e5ab5f379f96a6207c45be40c357ebb1beb8ef3 Utilisation du mode E/S direct pour accéder au fichier de sauvegarde. .RE .IP Les seuls \fIlo_flags\fP pouvant être modifiés par \fBLOOP_SET_STATUS\fP sont \fBLO_FLAGS_AUTOCLEAR\fP et \fBLO_FLAGS_PARTSCAN\fP. .TP \fBLOOP_GET_STATUS\fP Obtention de l’état du périphérique boucle\ ; le (troisième) argument d’\fBioctl\fP(2) doit être un pointeur vers une \fIstruct loop_info\fP. .TP \fBLOOP_CHANGE_FD\fP (depuis Linux 2.6.5) Basculement du stockage de sauvegarde du périphérique boucle vers le nouveau fichier identifié par le descripteur de fichier spécifié dans le (troisième) argument d’\fBioctl\fP(2), qui est un entier. Cette opération est possible si le périphérique boucle est en lecture seule et que le nouveau stockage de sauvegarde est de la même taille et du même type que l’ancien stockage de sauvegarde. .TP \fBLOOP_SET_CAPACITY\fP (depuis Linux 2.6.30) .\" commit 53d6660836f233df66490707365ab177e5fb2bb4 Redimensionnement d’un périphérique boucle actif. Il est possible de changer la taille du stockage de sauvegarde sous\-jacent et puis d’utiliser cette opération de façon que le pilote de boucle connaisse la nouvelle taille. Cette opération ne prend pas d’argument. .TP \fBLOOP_SET_DIRECT_IO\fP (depuis Linux 4.10) .\" commit ab1cb278bc7027663adbfb0b81404f8398437e11 Régler le mode E/S direct sur le périphérique boucle, de façon à ce qu’il puisse être utilisé pour ouvrir un fichier de sauvegarde. Le (troisième) argument d’\fBioctl\fP(2) est une valeur «\ unsigned long\ ». Une valeur différente de zéro représente le mode E/S direct. .TP \fBLOOP_SET_BLOCK_SIZE\fP (depuis Linux 4.14) .\" commit 89e4fdecb51cf5535867026274bc97de9480ade5 Régler la taille de bloc de périphérique boucle. Le (troisième) argument d’\fBioctl\fP(2) est une valeur «\ unsigned long\ ». Cette valeur doit être une puissance de deux dans l’intervalle [512,taille_page], sinon une erreur \fBEINVAL\fP en résultera. .TP \fBLOOP_CONFIGURE\fP (depuis Linux 5.8) .\" commit 3448914e8cc550ba792d4ccc74471d1ca4293aae Régler et configurer tous les paramètres du périphérique boucle en une seule étape en utilisant le (troisième) argument d’\fBioctl\fP(2). Cet argument est un pointeur vers une structure \fIloop_config\fP, définie dans \fI\fP ainsi\ : .IP .in +4n .EX struct loop_config { __u32 fd; __u32 block_size; struct loop_info64 info; __u64 __reserved[8]; }; .EE .in .IP En plus de faire ce que \fBLOOP_SET_STATUS\fP peut faire, \fBLOOP_CONFIGURE\fP peut aussi être utilisé pour faire les choses suivantes\ : .RS .IP \- 3 régler la taille correcte de bloc immédiatement en réglant \fIloop_config.block_size\fP\ ; .IP \- requérir explicitement le mode E/S direct en réglant \fBLO_FLAGS_DIRECT_IO\fP dans \fIloop_config.info.lo_flags\fP\ ; .IP \- requérir explicitement le mode lecture seule en réglant \fBLO_FLAGS_READ_ONLY\fP dans \fIloop_config.info.lo_flags\fP. .RE .PP Depuis Linux\ 2.6, deux nouvelles opérations \fBioctl\fP(2) existent\ : .TP \fBLOOP_SET_STATUS64\fP, \fBLOOP_GET_STATUS64\fP Elles sont similaires à \fBLOOP_SET_STATUS\fP et \fBLOOP_GET_STATUS\fP décrites ci\-dessus, mais utilisent la structure \fIloop_info64\fP qui a quelques champs supplémentaires et des intervalles plus grands pour quelques autres champs\ : .IP .in +4n .EX struct loop_info64 { uint64_t lo_device; /* ioctl r/o */ uint64_t lo_inode; /* ioctl r/o */ uint64_t lo_rdevice; /* ioctl r/o */ uint64_t lo_offset; uint64_t lo_sizelimit; /* octets, 0 == max dispo. */ uint32_t lo_number; /* ioctl r/o */ uint32_t lo_encrypt_type; uint32_t lo_encrypt_key_size; /* ioctl w/o */ uint32_t lo_flags; i /* ioctl r/w (r/o avant Linux 2.6.25) */ uint8_t lo_file_name[LO_NAME_SIZE]; uint8_t lo_crypt_name[LO_NAME_SIZE]; uint8_t lo_encrypt_key[LO_KEY_SIZE]; /* ioctl w/o */ uint64_t lo_init[2]; }; .EE .in .SS /dev/loop\-control .\" commit 770fe30a46a12b6fb6b63fbe1737654d28e84844 Depuis Linux\ 3.1, le noyau fournit le périphérique \fI/dev/loop\-control\fP qui permet à une application de trouver de manière dynamique un périphérique libre et d’ajouter ou de retirer des périphériques boucle du système. Pour réaliser ces opérations, l’utilisateur doit d’abord ouvrir \fI/dev/loop\-control\fP, puis employer une des opérations \fBioctl\fP(2) suivantes\ : .TP \fBLOOP_CTL_GET_FREE\fP Allocation ou récupération d’un périphérique boucle libre pour une utilisation. En cas de succès, le numéro du périphérique est renvoyé comme résultat de l’appel. Cette opération ne nécessite aucun argument. .TP \fBLOOP_CTL_ADD\fP Ajout du nouveau périphérique boucle dont le numéro de périphérique est spécifié comme entier «\ long\ » dans le troisième argument d’\fBioctl\fP(2). En cas de succès, l’indice du périphérique est renvoyé comme résultat de l’appel. Si le périphérique est déjà alloué, l’appel échoue avec l’erreur \fBEEXIST\fP. .TP \fBLOOP_CTL_REMOVE\fP Retrait du périphérique boucle dont le numéro de périphérique est spécifié comme entier «\ long\ » dans le troisième argument d’\fBioctl\fP(2). En cas de succès, le numéro du périphérique est renvoyé comme le résultat de l’appel. Si le périphérique est déjà utilisé, l’appel échoue avec l’erreur \fBEBUSY\fP. .SH FICHIERS .TP \fI/dev/loop*\fP Les fichiers du périphérique bloc spécial de boucle. .SH EXEMPLES Le programme ci\-dessous utilise le périphérique \fI/dev/loop\-control\fP pour trouver un périphérique boucle libre, ouvre le périphérique boucle, ouvre un fichier à utiliser comme stockage sous\-jacent du périphérique et alors associe le périphérique boucle avec le stockage de sauvegarde. La session d’interpréteur suivante fait une démonstration de l’utilisation de ce programme\ : .PP .in +4n .EX $ \fBdd if=/dev/zero of=fich.img bs=1MiB count=10\fP 10+0 enregistrements in 10+0 enregistrement out 10485760 octets (10 Mio) copiés, 0.00609385 s, 1.7 Gio/s $ \fBsudo ./mnt_loop fich.img\fP nomboucle = /dev/loop5 .EE .in .SS "Source du programme" \& .EX #include #include #include #include #include #include \& #define errExit(msg) do { perror(msg); exit(EXIT_FAILURE); \e } while (0) \& int main(int argc, char *argv[]) { int ddfloopctl, ddfloop, fichsauv; long n°per; char nomboucle[4096]; \& if (argc != 2) { fprintf(stderr, "Usage : %s fichsauv\en", argv[0]); exit(EXIT_FAILURE); } \& ddfloopctl = open("/dev/loop\-control", O_RDWR); if (ddfloopctl == \-1) errExit("open: /dev/loop\-control"); \& n°per = ioctl(ddfloopctl, LOOP_CTL_GET_FREE); if (n°pr == \-1) errExit("ioctl\-LOOP_CTL_GET_FREE"); \& sprintf(nomboucle, "/dev/loop%ld", n°per); printf("nomboucle = %s\en", nomboucle); \& loopfd = open(nomboucle, O_RDWR); if (ddfloop == \-1) errExit("open: nomboucle"); \& fichsauv = open(argv[1], O_RDWR); if (fichsauv == \-1) errExit("open: fichsauv"); \& if (ioctl(ddfloop, LOOP_SET_FD, fichsauv) == \-1) errExit("ioctl\-LOOP_SET_FD"); \& exit(EXIT_SUCCESS); } .EE .SH "VOIR AUSSI" \fBlosetup\fP(8), \fBmount\fP(8) .PP .SH TRADUCTION La traduction française de cette page de manuel a été créée par Christophe Blaess , Stéphan Rafin , Thierry Vignaud , François Micaux, Alain Portal , Jean-Philippe Guérard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas François , Florentin Duneau , Simon Paillard , Denis Barbier , David Prévot et Jean-Paul Guillonneau . .PP Cette traduction est une documentation libre ; veuillez vous reporter à la .UR https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License version 3 .UE concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE. .PP Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à .MT debian-l10n-french@lists.debian.org .ME .