PIVOT\_ROOT(8) System Administration PIVOT\_ROOT(8)

# [NAME](#NAME)

pivot\_root - change the root filesystem

# [SYNOPSIS](#SYNOPSIS)

**pivot\_root** *new\_root* *put\_old*

# [DESCRIPTION](#DESCRIPTION)

**pivot\_root** moves the root file system of the current process to the directory *put\_old* and makes *new\_root* the new root file system. Since [**pivot\_root**(8)](/man/os/util-linux/pivot_root.8) simply calls [**pivot\_root**(2)](/man/os/util-linux/pivot_root.2), we refer to the man page of the latter for further details.

Note that, depending on the implementation of **pivot\_root**, root and current working directory of the caller may or may not change. The following is a sequence for invoking **pivot\_root** that works in either case, assuming that **pivot\_root** and **chroot** are in the current **PATH**:

```
cd new_root
pivot_root . put_old
exec chroot . command
```

Note that **chroot** must be available under the old root and under the new root, because **pivot\_root** may or may not have implicitly changed the root directory of the shell.

Note that **exec chroot** 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 **chroot** (see below; note the absence of leading slashes to make it work whether **pivot\_root** has changed the shell’s root or not).

# [OPTIONS](#OPTIONS)

**-h**, **--help**

Display help text and exit.

**-V**, **--version**

Display version and exit.

# [EXAMPLE](#EXAMPLE)

Change the root file system to */dev/hda1* from an interactive shell:

```
mount /dev/hda1 /new-root
cd /new-root
pivot_root . old-root
exec chroot . sh <dev/console >dev/console 2>&1
umount /old-root
```

Mount the new root file system over NFS from 10.0.0.1:/my\_root and run **init**:

```
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
```

# [SEE ALSO](#SEE_ALSO)

[**chroot**(1)](/man/os/util-linux/chroot.1), [**pivot\_root**(2)](/man/os/util-linux/pivot_root.2), [**mount**(8)](/man/os/util-linux/mount.8), [**switch\_root**(8)](/man/os/util-linux/switch_root.8), [**umount**(8)](/man/os/util-linux/umount.8)

# [REPORTING BUGS](#REPORTING_BUGS)

For bug reports, use the *issue tracker* &lt;https://github.com/util-linux/util-linux/issues&gt;.

# [AVAILABILITY](#AVAILABILITY)

The **pivot\_root** command is part of the util-linux package which can be downloaded from *Linux Kernel Archive* &lt;https://www.kernel.org/pub/linux/utils/util-linux/&gt;.

2026-09-25 util-linux 2.42.4

---

Document: pivot_root(8) from util-linux 2.42.4-r0 (Chainguard OS)
