1. 安装 debootstrap:
    确保你的系统已有 debootstrap 工具。如果没有,可以通过包管理器安装。例如,在 Ubuntu 上可以运行:

    1
    2
    sudo apt-get update
    sudo apt-get install debootstrap
  2. 使用 debootstrap 安装:
    执行你已经写的命令来初始化新的 Debian 系统:

    1
    sudo debootstrap trixie /home/yuki/debian
  3. 挂载必要的文件系统:
    在进入 chroot 环境之前,通常需要挂载一些系统文件系统,比如 /proc, /sys, 和 /dev。可以使用以下命令:

    1
    2
    3
    4
    sudo mount -t proc /proc /home/yuki/debian/proc
    sudo mount --rbind /sys /home/yuki/debian/sys
    sudo mount --rbind /dev /home/yuki/debian/dev
    sudo mount --rbind /run /home/yuki/debian/run
  4. 进入 chroot 环境:
    可以使用 chroot 进入新的 Debian 系统:

    1
    sudo chroot /home/yuki/debian
  5. 配置新系统:
    在进入的 chroot 环境中,配置系统。例如,设置网络、安装基本软件包:

    1
    2
    3
    apt update
    apt install locales
    dpkg-reconfigure locales # 配置所需的区域设置
  6. 其它配置:
    根据需要,还可以编辑 /etc/fstab, /etc/hosts, 和 /etc/hostname 等文件。

  7. 清理与退出:
    从 chroot 环境退出,然后卸载挂载的文件系统:

    1
    2
    3
    4
    5
    exit
    sudo umount -l /home/yuki/debian/proc
    sudo umount -l /home/yuki/debian/sys
    sudo umount -l /home/yuki/debian/dev
    sudo umount -l /home/yuki/debian/run

/proc 文件系统

  • 是什么?
    /proc 是一个虚拟文件系统,提供了内核和进程的运行时信息。它不存储真实数据,而是实时生成数据,比如当前运行的进程信息、系统内核参数、内存使用情况等。
  • 为什么挂载?
    在 chroot 环境中,很多系统命令(比如 ps、top、free)依赖 /proc 来读取系统状态信息。没有挂载 /proc,这些命令不会工作,脚本或程序也会因为无法访问内核信息而失败。

2. /sys 文件系统

  • 是什么?
    /sys 也是一个虚拟文件系统,用于展示内核中的设备和驱动程序状态信息,是 sysfs 的挂载点。它提供硬件、设备和驱动的相关数据,允许用户空间查看和修改内核设备参数。
  • 为什么挂载?
    许多硬件相关命令和服务需要访问 /sys 里的信息。比如 udev(设备管理器)需要从这里获取设备事件和状态,网络配置工具可能读取网络设备的状态等。
  • 你可以理解:
    /sys 是内核与用户空间交互的重要桥梁,许多现代服务和脚本依赖它。

3. /dev 目录

  • 是什么?
    /dev 里面包含设备文件,它们是内核“与外部设备交互”的接口,比如硬盘(/dev/sda)、终端设备(/dev/tty)等。
  • 为什么挂载?
    chroot 是改变根目录的环境,但原来的设备文件默认还留在主系统里,不会自动出现在新系统里。挂载 /dev,可以让新系统访问到实际的设备文件,从而能读写磁盘、输入输出、操作终端等。
  • 挂载方式
    使用 --rbind 递归绑定,确保所有子目录(如 /dev/pts、/dev/shm)也被包含。

4. /run 目录

  • 是什么?
    /run 是一个临时文件系统,存放运行时需要的进程数据和锁文件,比如 pid 文件、Unix 套接字。
  • 为什么挂载?
    某些服务和程序在运行时会往 /run 写锁文件或者状态文件,如果不挂载,某些程序可能无法正常运行。

总结一下挂载的意义

  • 虚拟文件系统(/proc, /sys) 提供内核信息接口,chroot 环境需要它们以保证系统工具和服务正确运行。
  • 设备文件系统(/dev) 提供硬件设备的访问接口。
  • 运行时目录(/run) 支持服务和程序写入运行时状态数据。

举个例子:

假设你已经用 debootstrap 搭好了一个最小系统,现在想在里面用 ps 查看运行进程,或者用 udevadm 管理设备,如果你没有挂载 /proc 和 /sys,ps 就会显示空白或者错误,udevadm 也会报错,因为这些工具依赖于在这两个文件系统中的内核接口。同理,如果没挂载 /dev,你的 chroot 根本没法访问控制台设备,甚至无法执行基本输入输出。