1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
|
.TH PIVOT_ROOT 2 "23 febrero 2000" "Linux" "Llamadas al sistema"
.SH NOMBRE
pivot_root \- cambia el sistema de ficheros raíz
.SH SINOPSIS
.B #include <linux/unistd.h>
.sp
.B _syscall2(int,pivot_root,const char *,new_root,const char *,put_old)
.sp
.BI "int pivot_root(const char *" new_root ", const char *" put_old );
.SH DESCRIPCIÓN
\fBpivot_root\fP mueve el sistema de ficheros raíz del proceso actual al
directorio \fIput_old\fP y establece el nuevo sistema de ficheros raíz
para el proceso actual en \fInew_root\fP.
El uso habitual de \fBpivot_root\fP es durante la puesta en marcha del
sistema, cuando el sistema monta un sistema de ficheros raíz temporal
(p.e un \fBinitrd\fP), monta el sistema de ficheros raíz real, y finalmente
convierte al último en el sistema raíz para todos los procesos o hilos importantes.
\fBpivot_root\fP puede o no cambiar el directorio raíz actual y el directorio
de trabajo actual (cwd) de cualquier proceso o hilo que use el
directorio raíz antiguo. El invocador de \fBpivot_root\fP
debe asegurarse de que los procesos que tengan como directorio raíz o de
trabajo actual el antiguo directorio raíz funcionen correctamente en ambos
casos. Una manera sencilla de asegurar ésto es cambiar su directorio
raíz y de trabajo actual a \fInew_root\fP antes de invocar a \fBpivot_root\fP.
La explicación en el párrafo de arriba no es muy completa ya que la implementación
de \fBpivot_root\fP puede cambiar en el futuro. En el momento de escribir
este documento, \fBpivot_root\fP cambia el directorio raíz y de trabajo actual de cada proceso o
hilo a \fInew_root\fP si apuntan al antiguo directorio raíz. Ésto es necesario para
impedir que los hilos del núcleo mantengan el antiguo directorio raíz ocupado con su
directorio raíz y de trabajo actual, incluso cuando nunca acceden al sistema de ficheros
de ninguna manera. En el futuro, puede haber un mecanismo para que los hilos del núcleo
renuncien explícitamente a cualquier acceso al sistema de ficheros,
tal mecanismo intrusivo puede ser eliminado de
\fBpivot_root\fP.
Observe que ésto también se aplica al proceso actual: \fBpivot_root\fP puede
o no afectar a su directorio de trabajo actual. Se recomienda por tanto llamar a
\fBchdir("/")\fP inmediatamente después de \fBpivot_root\fP.
Las siguientes restricciones se aplican a \fInew_root\fP y \fIput_old\fP:
.IP \- 3
Deben ser directorios.
.IP \- 3
\fInew_root\fP y \fIput_old\fP no deben estar en el mismo sistema de ficheros
que el directorio raíz actual.
.IP \- 3
\fIput_old\fP debe estar debajo de \fInew_root\fP, es decir, añadir
un número distinto de cero de \fB/..\fP a la cadena apuntada por \fIput_old\fP
debe resultar el mismo directorio que \fInew_root\fP.
.IP \- 3
Ningún otro sistema de ficheros puede estar montado en \fIput_old\fP.
.PP
Véase también \fBpivot_root(8)\fP para ejemplos adicionales de uso.
Si el directorio raíz actual no es un punto de montaje (p.e. después de \fBchroot(2)\fP o
\fBpivot_root\fP, véase también abajo), el punto de montaje de ese sistema de ficheros es
montado en \fIput_old\fP, no el antiguo directorio raíz.
.SH OBSERVACIONES
\fInew_root\fP no tiene que ser un punto de montaje. En este caso,
\fB/proc/mounts\fP mostrará el punto de montaje del sistema de ficheros que contiene a
\fInew_root\fP como directorio raíz (\fB/\fP).
.SH "VALOR DEVUELTO"
En caso de éxito, se devuelve cero. En caso de error, se devuelve \-1, y
se modifica \fIerrno\fP con el valor apropiado.
.SH ERRORES
\fBpivot_root\fP puede devolver (en \fIerrno\fP) cualquierda de los errores devueltos por
\fBstat(2)\fP. Adicionalmente, puede devolver:
.TP
.B EBUSY
\fInew_root\fP o \fIput_old\fP están en el sistema de ficheros raíz actual,
o ya hay un sistema de ficheros montado en \fIput_old\fP.
.TP
.B EINVAL
\fIput_old\fP no está debajo de \fInew_root\fP.
.TP
.B ENOTDIR
\fInew_root\fP o \fIput_old\fP no es un directorio.
.TP
.B EPERM
El proceso actual no tiene la capacidad de administrador.
.SH FALLOS
\fBpivot_root\fP no tendría que cambiar el directorio raíz
y de trabajo actual de todos los otros procesos del sistema.
Algunos de los usos más oscuros de \fBpivot_root\fP pueden llevar rápidamente
a la locura.
.SH "CONFORME A"
\fBpivot_root\fP es específica de Linux y por tanto no portable.
.SH HISTORIA
\fBpivot_root\fP fue introducida en Linux 2.3.41.
.SH "VÉASE TAMBIÉN"
.BR chdir (2),
.BR chroot (2),
.BR initrd (4),
.BR pivot_root (8),
.BR stat (2)
|