chroot

1
2
3
4
5
6
7
8
9
10
11
sudo mount /dev/sdXX /mnt 
sudo mount /dev/sdaXX /mnt/home(有这个分区的话)
sudo mount --bind /dev /mnt/dev
sudo mount --bind /dev/pts /mnt/dev/pts
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys
sudo mount --bind /run /mnt/run
sudo mount --bind /etc/resolv. conf /mnt/etc/resolv. conf
sudo mount --bind /tmp /mnt/tmp

sudo chroot /mnt

什么是 chroot

chroot(Change Root)是 Linux/Unix 系统中的一种工具,它允许你将当前的根文件系统切换到指定的目录,使该目录成为虚拟机或类似于容器的环境。简单来说,chroot 可以将系统的根目录 / 改变为某个其他的目录,这样你可以在这个隔离的环境下操作,不影响主系统。这种方式通常用于恢复系统、测试环境、构建软件或者运行独立的系统。

但是,chroot 环境并不自动包含宿主机所有功能。为了确保虚拟机能够正常使用类似宿主机的功能,比如设备访问、进程管理和网络功能,你需要手动挂载一些关键文件系统。

挂载的原理:

这些挂载操作是通过 --bind 选项来实现的,它允许将宿主机的某个目录或文件系统“绑定”到 chroot 环境的某个位置。这样一来,虚拟机就可以直接访问宿主机上的这些资源,达到正常运行系统和网络功能的目的。

这些文件系统本身大多是虚拟的(例如 /proc/sys),因此它们不是实际的存储内容,而是动态生成的系统信息。通过将它们挂载到虚拟机,虚拟机就可以和宿主机共享这些动态系统信息。

挂载的文件系统有哪些?为什么挂载?

为了让 chroot 环境有完整的系统功能,你需要挂载以下文件系统或文件:

/proc (进程文件系统)

  1. /proc (进程文件系统)
    • 作用:提供系统和进程的信息,如 CPU、内存使用情况、挂载点等。
    • 为什么挂载:许多命令依赖 /proc 来获取系统状态(如 ps, top 等)。挂载后,chroot 可以访问宿主机的系统和进程信息。
    • 挂载命令
      1
      sudo mount --bind /proc /mnt/proc

/sys (系统文件系统)

  1. /sys (系统文件系统)
    • 作用:提供关于系统硬件设备的信息,包括驱动程序、设备状态等。
    • 为什么挂载:系统管理工具(如 udevadm)和硬件相关的功能需要访问 /sys
    • 挂载命令
      1
      sudo mount --bind /sys /mnt/sys

/dev (设备文件系统)

  1. /dev (设备文件系统)
    • 作用:提供设备节点,比如硬盘、终端设备、USB 等。
    • 为什么挂载/devchroot 环境可以访问实际的硬件设备,包括硬盘、鼠标、键盘等,以及管理这些设备。
    • 挂载命令
      1
      sudo mount --bind /dev /mnt/dev

/run (运行时信息)

  1. /run (运行时信息)
    • 作用:包含系统运行时生成的临时文件,比如 PID 文件、socket 文件等。
    • 为什么挂载:一些系统进程和服务需要 /run 来存储它们的运行状态或通信文件。
    • 挂载命令
      1
      sudo mount --bind /run /mnt/run

/dev/pts (伪终端

  1. /dev/pts (伪终端)
    • 作用:提供伪终端(pseudo-terminal),用于创建多个终端会话,比如 sshsudo 需要使用它。
    • 为什么挂载:在 chroot 中执行需要伪终端的命令时(如 sudo),必须挂载 /dev/pts
    • 挂载命令
      1
      sudo mount --bind /dev/pts /mnt/dev/pts

/etc/resolv.conf (DNS 配置)

  1. /etc/resolv.conf (DNS 配置)
    • 作用:配置系统如何解析域名,通过 DNS 服务器转换域名为 IP 地址。
    • 为什么挂载:如果 chroot 环境中需要访问网络(如更新软件),必须能解析域名,因此要挂载 /etc/resolv.conf
    • 挂载命令
      1
      sudo mount --bind /etc/resolv.conf /mnt/etc/resolv.conf

/tmp (临时文件)

  1. /tmp (临时文件)
    • 作用:用于存储临时文件和目录。
    • 为什么挂载:某些程序可能需要 /tmp 目录来存储临时数据。
    • 挂载命令
      1
      sudo mount --bind /tmp /mnt/tmp

挂载顺序

一般来说,挂载这些目录的顺序不是特别严格,只要你确保所有必要的目录都已经挂载。可以按照如下步骤进行:

1
2
3
4
5
6
7
sudo mount --bind /dev /mnt/dev
sudo mount --bind /dev/pts /mnt/dev/pts
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys
sudo mount --bind /run /mnt/run
sudo mount --bind /etc/resolv. conf /mnt/etc/resolv. conf
sudo mount --bind /tmp /mnt/tmp

然后进入 chroot

1
sudo chroot /mnt

chroot
http://example.com/2024/10/14/chroot/
作者
JunBin Liang
发布于
2024年10月14日
许可协议