Date création : 27-03-2008 20:23:44
 Vous êtes dans : GNU/Linux Astuces / Pages man [Section2 - Appels système]
PIVOT_ROOT
Index
- NOM
- SYNOPSIS
- DESCRIPTION
- NOTES
- VALEUR RENVOYÉE
- ERREURS
- BOGUES
- CONFORMITÉ
- HISTORIQUE
- VOIR AUSSI
- TRADUCTION
NOM
pivot_root - Modifier la racine du système de fichiers
SYNOPSIS
#include <linux/unistd.h>
#include <errno.h>
_syscall2(int,pivot_root,const char *,new_root,const char *,put_old)
/* Il peut être préférable d'utiliser syscall(2) ; voir intro(2) */
int pivot_root(const char *new_root, const char *put_old);
DESCRIPTION
pivot_root() déplace la racine du système de fichiers pour le processus
courant vers le répertoire put_old et fait de new_root la nouvelle
racine du système de fichiers pour le processus en cours.
L'utilisation typique de pivot_root() est durant le boot, lorsque le
système monte un système de fichiers temporaire (par ex. un initrd) puis
monte le véritable système de fichiers, et le transforme en racine pour tous
les processus et threads concernés.
pivot_root() peut changer ou non les répertoires racine et de travail en
cours de tous les processus et threads qui utilisaient l'ancien répertoire
racine. L'appelant de pivot_root() doit s'assurer que les processus ayant
pour racine ou répertoire de travail l'ancien répertoire se comportent
correctement. Le meilleur moyen est de modifier leur répertoire de travail
et répertoire racine avant d'invoquer pivot_root().
Le paragraphe ci-dessus est intentionnellement flou, car l'implémentation de
pivot_root() peut changer dans le futur. Actuellement, pivot_root()
modifie la racine et le répertoire de travail de tous les processus ou
threads en new_root s'ils pointent sur l'ancien répertoire. Ceci est
nécessaire pour éviter que des threads du noyau ne conservent l'ancien
répertoire occupé, même s'ils accèdent au nouveau système de fichiers. Dans
le futur, il y aura peut-être un mécanisme pour les threads du noyau pour
renoncer explicitement à tout accès au système de fichiers, ce qui évitera
ce mécanisme un peu invasif.
Notez que ceci s'applique aussi au processus en cours : pivot_root()
peut changer ou non son répertoire de travail. Il vaut mieux donc appeler
chdir("/") immédiatement après pivot_root().
Les restrictions suivantes s'appliquent à new_root et put_old :
- -
-
Ils doivent être des répertoires,
- -
-
new_root et put_old ne doivent pas être sur le même système de
fichiers que la racine actuelle.
- -
-
put_old doit être un descendant de new_root : ajouter un nombre
non-nul de /.. à la chaîne put_old doit ramener au même répertoire que
new_root.
- -
-
Aucun système de fichiers ne doit être monté sur put_old.
Voir pivot_root(8) pour des exemples d'utilisation supplémentaires.
Si la racine en cours n'est pas un point de montage (après un chroot(2)
ou un pivot_root(), voir plus bas), ce n'est pas l'ancien répertoire,
mais le point de montage du système de fichiers qui est monté dans
put_old.
NOTES
new_root n'a pas besoin d'être un point de montage. Dans ce cas,
/proc/mounts montrera le point de montage concernant new_root comme
racine (/).
VALEUR RENVOYÉE
En cas de réussite, zéro est renvoyé, sinon -1 est renvoyé et errno
contient le code d'erreur.
ERREURS
pivot_root() peut renvoyer (dans errno) toute erreur renvoyée par
stat(2). De plus, il peut renvoyer :
- EBUSY
-
new_root ou put_old sont sur le système de fichiers principal actuel,
ou un système de fichiers est déjà monté sur put_old.
- EINVAL
-
put_old n'est pas un descendant de new_root.
- ENOTDIR
-
new_root ou put_old n'est pas un répertoire.
- EPERM
-
Le processus appelant n'a pas la capacité CAP_SYS_ADMIN.
BOGUES
pivot_root() ne devrait pas modifier le répertoire racine et le
répertoire de travail des autres processus du système.
Les utilisations les plus obscures de pivot_root() peuvent rapidement
rendre fou.
CONFORMITÉ
pivot_root() est spécifique à Linux et donc non portable.
HISTORIQUE
pivot_root() a été introduit dans Linux 2.3.41.
VOIR AUSSI
chdir(2), chroot(2), stat(2), initrd(4), pivot_root(8)
TRADUCTION
Cette page de manuel a été traduite et mise à jour par
Christophe Blaess <http://www.blaess.fr/christophe/> entre 1996 et 2003,
puis par Alain Portal <aportal AT univ-montp2 DOT fr> jusqu'en 2006.
La traduction de cette page de manuel est basée sur les traductions
disponibles sur http://manpagesfr.free.fr/,
mais est gérée par l'équipe francophone de traduction de Debian
au travers de la liste de discussion debian-l10n-french.
Veuillez signaler toute erreur de traduction par un rapport de bogue sur
le paquet manpages-fr.
Vous pouvez toujours avoir accès à la version anglaise de ce document en
utilisant la commande
« man -L C <section> <page_de_man> ».
|