Provided by:
manpages-es_1.55-8_all 
NOMBRE
pivot_root - cambia el sistema de ficheros raíz
SINOPSIS
#include <linux/unistd.h>
_syscall2(int,pivot_root,const char *,new_root,const char *,put_old)
int pivot_root(const char *new_root, const char *put_old);
DESCRIPCIÓN
pivot_root mueve el sistema de ficheros raíz del proceso actual al
directorio put_old y establece el nuevo sistema de ficheros raíz para
el proceso actual en new_root.
El uso habitual de pivot_root es durante la puesta en marcha del
sistema, cuando el sistema monta un sistema de ficheros raíz temporal
(p.e un initrd), 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.
pivot_root 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 pivot_root 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 new_root antes de invocar a pivot_root.
La explicación en el párrafo de arriba no es muy completa ya que la
implementación de pivot_root puede cambiar en el futuro. En el momento
de escribir este documento, pivot_root cambia el directorio raíz y de
trabajo actual de cada proceso o hilo a new_root 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
pivot_root.
Observe que ésto también se aplica al proceso actual: pivot_root puede
o no afectar a su directorio de trabajo actual. Se recomienda por tanto
llamar a chdir("/") inmediatamente después de pivot_root.
Las siguientes restricciones se aplican a new_root y put_old:
- Deben ser directorios.
- new_root y put_old no deben estar en el mismo sistema de ficheros
que el directorio raíz actual.
- put_old debe estar debajo de new_root, es decir, añadir un número
distinto de cero de /.. a la cadena apuntada por put_old debe
resultar el mismo directorio que new_root.
- Ningún otro sistema de ficheros puede estar montado en put_old.
Véase también pivot_root(8) para ejemplos adicionales de uso.
Si el directorio raíz actual no es un punto de montaje (p.e. después de
chroot(2) o pivot_root, véase también abajo), el punto de montaje de
ese sistema de ficheros es montado en put_old, no el antiguo directorio
raíz.
OBSERVACIONES
new_root no tiene que ser un punto de montaje. En este caso,
/proc/mounts mostrará el punto de montaje del sistema de ficheros que
contiene a new_root como directorio raíz (/).
VALOR DEVUELTO
En caso de éxito, se devuelve cero. En caso de error, se devuelve -1, y
se modifica errno con el valor apropiado.
ERRORES
pivot_root puede devolver (en errno) cualquierda de los errores
devueltos por stat(2). Adicionalmente, puede devolver:
EBUSY new_root o put_old están en el sistema de ficheros raíz actual,
o ya hay un sistema de ficheros montado en put_old.
EINVAL put_old no está debajo de new_root.
ENOTDIR
new_root o put_old no es un directorio.
EPERM El proceso actual no tiene la capacidad de administrador.
FALLOS
pivot_root 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 pivot_root pueden llevar rápidamente
a la locura.
CONFORME A
pivot_root es específica de Linux y por tanto no portable.
HISTORIA
pivot_root fue introducida en Linux 2.3.41.
VÉASE TAMBIÉN
chdir(2), chroot(2), initrd(4), pivot_root(8), stat(2)