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/bashin 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
chrootsource and destination (check current environment architecture withuname -m) - kernel modules which you may need in
chrootenvironment 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