Provided by: manpages-es_1.55-10_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)