Change root (chroot)
Introduction#
Change root (chroot) is an operation that changes the apparent root directory for the current running process and their children. A program that is run in such a modified environment cannot access files and commands outside that environmental directory tree.
Syntax#
- chroot [destination path] [shell or command]
Manually changing root in a directory
-
Ensure you met all requirements, as per Requirements
-
Mount the temporary API filesystems:
cd /location/of/new/root mount -t proc proc proc/ mount --rbind /sys sys/ mount --rbind /dev dev/ mount --rbind /run run/ (optionally)
-
If you need to use an internet connection in the chroot environment, copy over the DNS details:
cp /etc/resolv.conf etc/resolv.conf
-
Change root into /location/of/new/root, specifying the shell (
/bin/bash
in this example):chroot /location/of/new/root /bin/bash
-
After chrooting it may be necessary to load the local bash configuration:
source /etc/profile source ~/.bashrc
-
Optionally, create a unique prompt to be able to differentiate your chroot environment:
export PS1="(chroot) $PS1"
-
When finished with the chroot, you can exit it via:
exit
-
Unmount the temporary file systems:
cd / umount --recursive /location/of/new/root
Requirements
- root privileges
- another working Linux environment,such as Live CD boot or an existing distribution
- matching environment architectures of
chroot
source and destination (check current environment architecture withuname -m
) - kernel modules which you may need in
chroot
environment must be loaded (for example, withmodprobe
)
Reasons to use chroot
Changing root is commonly done for performing system maintenance on systems where booting and/or logging in is no longer possible.
Common examples are:
- reinstalling the bootloader
- rebuilding the initramfs image
- upgrading or downgrading packages
- resetting a forgotten password
- building software in a clean root environment