メインコンテンツへスキップ
  1. ノート/
  2. システム底层/

chroot

·1634 文字·4 分· loading · loading · · ·
ICE345
著者
ICE345
CS Student | System | Linux | OCaml
この記事は中国語版をもとにした日本語版メモです。コマンド、コード、数式、画像リンクは原文の意味を壊さないように保持し、説明文と見出しを日本語向けに整理しています。
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 できます访问宿主机的システム和プロセス信息。
    • 挂载コマンド
      sudo mount --bind /proc /mnt/proc

/sys (システムファイルシステム)
#

  1. /sys (システムファイルシステム)
    • 作用:提供关于システム硬件设备的信息,包括驱动程序、设备状态等。
    • 为什么挂载:システム管理ツール(如 udevadm)和硬件相关的功能必要访问 /sys
    • 挂载コマンド
      sudo mount --bind /sys /mnt/sys

/dev (设备ファイルシステム)
#

  1. /dev (设备ファイルシステム)
    • 作用:提供设备节点,比如ディスク、终端设备、USB 等。
    • 为什么挂载/devchroot 环境できます访问实际的硬件设备,包括ディスク、鼠标、键盘等,以及管理这些设备。
    • 挂载コマンド
      sudo mount --bind /dev /mnt/dev

/run (実行时信息)
#

  1. /run (実行时信息)
    • 作用:包含システム実行时生成的临时ファイル,比如 PID ファイル、socket ファイル等。
    • 为什么挂载:一些システムプロセス和服务必要 /run 来存储它们的実行状态或通信ファイル。
    • 挂载コマンド
      sudo mount --bind /run /mnt/run

/dev/pts (伪终端
#

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

/etc/resolv.conf (DNS 設定)
#

  1. /etc/resolv.conf (DNS 設定)
    • 作用:設定システム如何解析域名,通过 DNS サーバー转换域名为 IP 地址。
    • 为什么挂载:もし chroot 环境中必要访问ネットワーク(如更新软件),必须能解析域名,そのため要挂载 /etc/resolv.conf
    • 挂载コマンド
      sudo mount --bind /etc/resolv.conf /mnt/etc/resolv.conf

/tmp (临时ファイル)
#

  1. /tmp (临时ファイル)
    • 作用:用于存储临时ファイル和ディレクトリ。
    • 为什么挂载:某些程序可能必要 /tmp ディレクトリ来存储临时数据。
    • 挂载コマンド
      sudo mount --bind /tmp /mnt/tmp

挂载顺序
#

一般来说,挂载这些ディレクトリ的顺序不是特别严格,只要你确保所有必要的ディレクトリ都已经挂载。できます按照以下手順进行:

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

sudo chroot /mnt

関連記事