---
name: "pivot_root"
section: "8"
platform: "linux"
package: "util-linux"
version: "2.42.4-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/pivot_root"
---

# pivot\_root(8)

change the root filesystem

## NAME

pivot\_root - change the root filesystem

## SYNOPSIS

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

## 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)](/pivot_root/8.md) simply calls [**pivot\_root**(2)](/pivot_root/2.md), 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

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

  Display help text and exit.

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

  Display version and exit.

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

[**chroot**(1)](/chroot/1.md), [**pivot\_root**(2)](/pivot_root/2.md), [**mount**(8)](/mount/8.md), [**switch\_root**(8)](/switch_root/8.md), [**umount**(8)](/umount/8.md)

## REPORTING BUGS

For bug reports, use the *issue tracker* \<https://github.com/util-linux/util-linux/issues\>.

## AVAILABILITY

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