MOUNT(2) | Manuel du programmeur Linux | MOUNT(2) |
mount - Monter un système de fichiers
#include <sys/mount.h>
int mount(const char *source, const char *target, const char *filesystemtype, unsigned long mountflags, const void *data);
mount() attache le système de fichiers indiqué par source (qui est généralement un nom de périphérique, mais peut aussi être un répertoire ou un objet fictif) à un emplacement (un répertoire ou à un fichier) indiqué par le chemin dans target.
Des privilèges appropriés (sous Linux : la capacité CAP_SYS_ADMIN) sont nécessaires pour monter des systèmes de fichiers.
Les valeurs de l'argument filesystemtype prises en charge par le noyau sont listées dans /proc/filesystems (par exemple « btrfs » « ext4 », « jfs », « xfs », « vfat », « fuse », « tmpfs », « cgroup », « proc », « mqueue », « nfs », « fifs », « iso9660 »). Des types supplémentaires peuvent être disponibles lorsque les modules appropriés sont chargés.
L'argument data est interprété différemment suivant le type de système de fichiers. Typiquement, c'est une chaîne d'options comprises par le système de fichiers, séparées par des virgules. Consultez mount(8) pour des détails sur les options disponibles pour chaque type de système.
Un appel à mount() effectue un des nombreux types généraux d'opération en fonction des bits indiqués dans mountflags. Le choix de l'opération à effectuer se fait en testant l'ensemble de bits mountflags, les tests étant menés dans l'ordre indiqué ici :
Chacune de ces opérations est détaillée plus tard dans cette page. D'autres attributs peuvent être indiqués dans mountflags pour modifier le comportement de mount(), comme décrits ci-dessous.
La liste ci-dessous décrit les attributs supplémentaires qui peuvent être indiqués dans mountflags. Remarquez que certains types d'opération ignorent tout ou partie d'autres attributs, comme décrits plus loin dans cette page.
De Linux 2.4 jusqu'à aujourd'hui, certains des attributs ci-dessus sont positionnables sur une base par montage, tandis que d'autres s'appliquent au superbloc du système de fichier monté, ce qui veut dire que tous les montages du même système de fichiers partagent ces attributs (précédemment, tous les attributs étaient sur une base par superbloc).
Les attributs par point de montage sont les suivants :
Les attributs suivants fonctionnent par superbloc : MS_DIRSYNC, MS_LAZYTIME, MS_MANDLOCK, MS_SILENT et MS_SYNCHRONOUS. Les réglages initiaux de ces attributs sont déterminés lors du premier montage du système de fichiers et seront partagés par tous les montages suivants du même système de fichiers. Par conséquent, les réglages des attributs peuvent être modifiés à l'aide d'une opération de remontage (voir ci-dessous). De telles modifications seront visibles à l'aide de tous les points de montage associés au système de fichiers.
Depuis Linux 2.6.16, MS_RDONLY peut être positionné ou effacé sur une base par point de montage ou par superbloc du système de fichiers sous-jacent. Le système de fichiers monté ne sera accessible en écriture que si ni lui, ni le point de montage, n'ont l’attribut de lecture seule.
Un montage existant peut être remonté en utilisant MS_REMOUNT dans mountflags. Cela permet de modifier mountflags et data du montage existant sans être obligé de démonter et de remonter le système de fichiers. target devrait valoir la même valeur que celle indiquée dans l'appel mount() initial.
Les arguments source et filesystemtype sont ignorés.
Les arguments mountflags et data devraient correspondre aux valeurs utilisées dans l'appel mount() originel, sauf ceux qui seront délibérément modifiés.
Les mountflags peuvent être modifiés : MS_LAZYTIME, MS_MANDLOCK, MS_NOATIME, MS_NODEV, MS_NODIRATIME, MS_NOEXEC, MS_NOSUID, MS_RELATIME, MS_RDONLY, MS_STRICTATIME (dont l'effet est de vider les attributs MS_NOATIME et MS_RELATIME) et MS_SYNCHRONOUS. Les tentatives de modification des attributs MS_DIRSYNC et MS_SILENT lors d'un remontage sont ignorées silencieusement. Remarquez que les modifications d'attributs par superbloc se voient à travers les points de montage de tous les systèmes de fichiers associés (parce que l'attribut par superbloc est partagé par tous les points de montage).
Depuis Linux 3.17, si ni MS_NOATIME, ni MS_NODIRATIME, ni MS_RELATIME, ni MS_STRICTATIME n'est indiqué dans mountflags, l'opération de remontage préserve les valeurs existantes de ces attributs (au lieu de revenir à MS_RELATIME par défaut).
Depuis Linux 2.6.26, l'attribut MS_REMOUNT peut être utilisé avec MS_BIND pour ne modifier que les attributs sur la base des points de montage. Cela est particulièrement utile pour positionner ou effacer l'attribut « read-only » d'un point de montage sans modifier le système de fichiers sous-jacent. Si on indique mountflags ainsi :
MS_REMOUNT | MS_BIND | MS_RDONLY
donnera accès à ce point de montage en lecture seule, sans modifier les autres points de montage.
Si mountflags comprend MS_BIND (disponible depuis Linux 2.4), effectuer un montage miroir. Un montage miroir rend visible un fichier ou la sous-arborescence d'un répertoire à un autre endroit d'une même hiérarchie de répertoires. Les montages miroir peuvent franchir les limites du système de fichiers et outrepasser les verrous chroot(2).
Les paramètres filesystemtype et data sont ignorés.
Les autres bits (sauf MS_REC décrit ci-dessous) du paramètre mountflags sont ignorés également (le montage miroir a les mêmes options de montage que celui sous-jacent). Cependant, consultez le point sur le remontage ci-dessus pour une méthode permettant de rendre un montage miroir en lecture seule.
Par défaut, quand un répertoire est monté en miroir, seul ce répertoire est monté ; s'il y a des sous-montages dans l'arborescence de répertoires, ils ne sont pas montés en miroir. Si l'attribut MS_REC est indiqué également, une opération de montage miroir récursif est effectuée : tous les sous-montages de la sous-arborescnece de source (sauf les montages qu'il n'est pas possible de monter en miroir) sont également montés en miroir à l'endroit correspondant dans la sous-arborescence target.
Si mountflags comprend MS_SHARED, MS_PRIVATE, MS_SLAVE ou MS_UNBINDABLE (disponibles depuis Linux 2.6.15), le type de propagation d'un montage existant est modifié. Si plus d'un de ces attributs est indiqué, cela provoque une erreur.
Les seuls autres attributs qui peuvent être indiqués pendant un changement de type de propagation sont MS_REC (décrit ci-dessous) et MS_SILENT (qui est ignoré).
Les paramètres source, filesystemtype et data sont ignorés.
Voici la signification des attributs de types de propagation :
Par défaut, la modification du type de propagation ne concerne que le point de montage target. Si l'attribut MS_REC est aussi indiqué dans mountflags, le type de propagation de tous les points de montage de target est aussi modifié.
Pour plus de détails sur les types de propagation des montages (notamment celui par défaut affecté aux nouveaux montages), voir mount_namespaces(7).
Si mountflags contient l'attribut MS_MOVE (disponible depuis linux 2.4.18), déplacer une sous-arborescence : source indique un point de montage existant et target le nouvel emplacement où replacer le point de montage. Le déplacement est atomique : à aucun moment la sous-arborescence n'est démontée.
Les autres bits du paramètre mountflags sont ignorés, ainsi que les paramètres filesystemtype et data.
Si ni MS_REMOUNT, ni MS_BIND, ni MS_MOVE, ni MS_SHARED, ni MS_PRIVATE, ni MS_SLAVE ni MS_UNBINDABLE ne sont indiqués dans mountflags, mount() opère son action par défaut : créer un nouveau point de montage. source indique la source du nouveau point de montage et target indique le répertoire où créer le point de montage.
Les paramètres filesystemtype et data sont utilisés et d'autres bits peuvent être indiqués dans mountflags pour modifier le comportement de l'appel.
En cas de succès, zéro est renvoyé. En cas d'erreur, -1 est renvoyé et errno reçoit une valeur adéquate.
Les erreurs détaillées ici sont indépendantes du type de système de fichiers. Chaque type de système peut avoir des codes d'erreurs spécifiques, et un comportement particulier. Consultez les sources du noyau Linux pour plus de détails.
Les définitions de MS_DIRSYNC, MS_MOVE, MS_PRIVATE, MS_REC, MS_RELATIME, MS_SHARED, MS_SLAVE, MS_STRICTATIME et MS_UNBINDABLE ont été ajoutées aux en-têtes de la glibc depuis la version 2.12.
Cette fonction est spécifique à Linux et ne doit pas être employée dans des programmes destinés à être portables.
Depuis Linux 2.4 un même système de fichiers peut être visible en différents points, et plusieurs montages peuvent être empilés au même point.
L'argument mountflags peut avoir le nombre magique 0xC0ED (MS_MGC_VAL) dans ses 16 bits de poids fort (tous les autres attributs abordés dans DESCRIPTION sont dans les 16 bits de poids faible de mountflags). L'indication de MS_MGC_VAL était obligatoire dans les noyaux des versions antérieure à 2.4, mais depuis ne l'est plus et est ignoré si vous le faites.
L'attribut original MS_SYNC a été renommé MS_SYNCHRONOUS dans Linux 1.1.69 car un MS_SYNC différent a été ajouté dans <mman.h>.
Avant Linux 2.4, une tentative d'exécution d'un programme Set-UID ou Set-GID sur un système de fichiers monté avec l'attribut MS_NOSUID échouait avec l'erreur EPERM. Depuis Linux 2.4 les bits Set-UID et Set-GID sont simplement ignorés silencieusement dans ce cas.
À partir du noyau 2.4.19, Linux fournit des espaces de noms montage. Un espace de noms montage est un ensemble de montages de systèmes de fichiers qui sont visibles par un processus. Les espaces de noms montage peuvent être (ils le sont généralement) partagés entre différents processus et les modifications de l'espace de noms (c'est-à-dire les montages et démontages) par un processus sont visibles pour tous les autres processus qui partagent le même espace de noms (la situation des versions antérieures à 2.4.19 de Linux peut être considérée comme l'utilisation d'un unique espace de noms partagé par tous les processus du système).
Un processus enfant créé avec fork(2) partage l'espace de noms montage de son parent ; l'espace de noms montage est préservé au travers d'un execve(2).
Un processus peut obtenir un espace de noms montage privé si : il a été créé en utilisant l'attribut CLONE_NEWNS de clone(2), dans ce cas son nouvel espace de noms est initialisé comme une copie de l'espace de noms du processus qui a appelé clone(2) ; ou il appelle unshare(2) avec l'attribut CLONE_NEWNS, ce qui provoque l'obtention d'une copie privée de l'environnement de l'appelant, qui était auparavant partagé avec d'autres processus, de telle sorte que les montages ou démontages futurs de l'appelant ne seront pas visibles des autres processus (à l'exception des processus enfants que le processus pourrait créer), et vice-versa.
Pour plus de détails sur les espaces de noms montage, voir mount_namespaces(7).
Chaque point de montage a un point de montage parent. La relation de parenté entre tous les points de montage définit la seule hiérarchie de répertoires que voient les processus à l'intérieur d'un espace de noms montage.
Le parent d'un nouveau point de montage est défini quand le point de montage est créé. En général, le parent d'un nouveau montage est le point de montage du système de fichiers qui contient le répertoire ou le fichier sur lequel est rattaché le montage. Si un nouveau montage est empilé sur un montage existant, le parent du nouveau montage est le montage précédent empilé à cet endroit.
La relation de parenté entre les points de montage peut être examinée dans le fichier /proc/[pid]/mountinfo (voir ci-dessous).
Le fichier /proc/[pid]/mounts spécifique à Linux présente la liste des points de montage dans l'espace de noms montage du processus ayant l'identifiant indiqué. Le fichier /proc/[pid]/mountinfo présente encore plus d'informations sur les points de montage, notamment le type de propagation et les informations d'identification du montage, ce qui permet de visualiser la relation de parenté entre les points de montage. Voir proc(5) et mount_namespaces(7) pour plus de détails sur ce fichier.
mountpoint(1), chroot(2), ioctl_iflags(2), pivot_root(2), umount(2), mount_namespaces(7), path_resolution(7), findmnt(8), lsblk(8), mount(8), umount(8)
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/.
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.
21 décembre 2020 | Linux |