| .TH PIVOT_ROOT 8 "Feb 23, 2000" "Linux" "Maintenance Commands" |
| .SH NAME |
| pivot_root \- change the root file system |
| .SH SYNOPSIS |
| .B pivot_root |
| .I new_root put_old |
| .SH DESCRIPTION |
| \fBpivot_root\fP moves the root file system of the current process to the |
| directory \fIput_old\fP and makes \fInew_root\fP the new root file system. |
| Since \fBpivot_root\fP(8) simply calls \fBpivot_root\fP(2), we refer to |
| the man page of the latter for further details. |
| |
| Note that, depending on the implementation of \fBpivot_root\fP, root and |
| cwd of the caller may or may not change. The following is a sequence for |
| invoking \fBpivot_root\fP that works in either case, assuming that |
| \fBpivot_root\fP and \fBchroot\fP are in the current \fBPATH\fP: |
| .sp |
| cd \fInew_root\fP |
| .br |
| pivot_root . \fIput_old\fP |
| .br |
| exec chroot . \fIcommand\fP |
| .sp |
| Note that \fBchroot\fP must be available under the old root and under the new |
| root, because \fBpivot_root\fP may or may not have implicitly changed the |
| root directory of the shell. |
| |
| Note that \fBexec chroot\fP changes the running executable, which is |
| necessary if the old root directory should be unmounted afterwards. |
| Also note that standard input, output, and error may still point to a |
| device on the old root file system, keeping it busy. They can easily be |
| changed when invoking \fBchroot\fP (see below; note the absence of |
| leading slashes to make it work whether \fBpivot_root\fP has changed the |
| shell's root or not). |
| .SH EXAMPLES |
| Change the root file system to /dev/hda1 from an interactive shell: |
| .sp |
| .nf |
| mount /dev/hda1 /new-root |
| cd /new-root |
| pivot_root . old-root |
| exec chroot . sh <dev/console >dev/console 2>&1 |
| umount /old-root |
| .fi |
| .sp |
| Mount the new root file system over NFS from 10.0.0.1:/my_root and run |
| \fBinit\fP: |
| .sp |
| .nf |
| ifconfig lo 127.0.0.1 up # for portmap |
| # configure Ethernet or such |
| portmap # for lockd (implicitly started by mount) |
| mount -o ro 10.0.0.1:/my_root /mnt |
| killall portmap # portmap keeps old root busy |
| cd /mnt |
| pivot_root . old_root |
| exec chroot . sh -c 'umount /old_root; exec /sbin/init' \\ |
| <dev/console >dev/console 2>&1 |
| .fi |
| .SH "SEE ALSO" |
| .BR chroot (1), |
| .BR mount (8), |
| .BR pivot_root (2), |
| .BR umount (8) |
| .SH AVAILABILITY |
| The pivot_root command is part of the util-linux-ng package and is available from |
| ftp://ftp.kernel.org/pub/linux/utils/util-linux-ng/. |