博主头像
mxd's Blog

把日子当 commit,把崩溃当 feature,在不断的挫折里给现实偷偷打上 nightly 更新!

完整chroot环境需要做的工作

在Linux系统中,chroot命令可以改变进程的根目录,从而创建一个隔离的环境。当系统出现故障无法正常启动时,chroot可以用来修复系统。

以下是一个我基于Debian Linux的chroot修复过程笔记,供各位参考:

一、准备工作

假设系统分区为/dev/sda1,首先需要从一个可引导的Linux环境(如Live CD或USB)启动系统。

二、挂载分区

  1. 创建挂载点并挂载根分区:

    sudo mkdir /mnt/debian
    sudo mount /dev/sda1 /mnt/debian
  2. 如果系统有单独的/boot/boot/efi分区,也需要挂载它们。例如,对于EFI启动的系统:

    sudo mount /dev/sda1 /mnt/debian/boot/efi

三、挂载虚拟文件系统

为了让chroot环境正常工作,需要将一些虚拟目录挂载到目标系统中。

引用Deepin社区enforcee用户的话

我们知道在Linux中有些文件并不是实际在硬盘上,而是为了一些特殊操作而“虚构”出来的。我们挂载上其他系统的根分区,打开proc,sys等目录,会发现他空无一物。这个目录中的文件只有系统启动时才有,并存在内存中,有一些应用是需要使用这些目录的。我们上面做的简单的chroot环境,在执行一些复杂的命令时可能会出现问题,因为这些程序需要这些位置的资源。chroot并不会像真实系统一样建立这些“虚拟”文件。幸好,在Linux中我们可以将一些目录“映射”到其他目录,这可以让chroot内这些目录的访问就会用实际系统的相同目录替代。比如,在我们chroot环境中没有的proc,sys,dev等文件夹替换成当前系统中的/proc,/sys,/dev,这样需要这些资源的命令在chroot环境中也能使用。

sudo mount --rbind /dev /mnt/debian/dev
sudo mount --bind /proc /mnt/debian/proc
sudo mount --bind /sys /mnt/debian/sys

四、进入chroot环境

使用chroot命令切换到目标系统:

sudo chroot /mnt/debian /bin/bash

如果提示bash: chroot: command not found,可能是环境变量未正确设置,可以通过以下命令修复:

export PATH=$PATH:/usr/sbin:/sbin

五、修复系统

  1. 修复网络配置:如果网络不可用,可以复制Live CD的网络配置文件:

    sudo cp -v /etc/resolv.conf /mnt/debian/etc
  2. 安装或重装软件:如果某些软件被误删,可以使用包管理器重新安装。例如,修复network-manager

    sudo apt install network-manager
  3. 修复GRUB:如果引导程序损坏,可以重新安装GRUB:

    grub-install --target=x86_64-efi --efi-directory=/boot/efi/ --removable
    update-grub

六、退出并清理

  1. 退出chroot环境:

    exit
  2. 卸载挂载的文件系统:

    sudo umount -Rlv /mnt/debian/{dev,proc,sys}
    sudo umount /mnt/debian

OK,你完成了一次修复。

完整chroot环境需要做的工作
https://blog.mxdyeah.top/mxdyeah_blog_post/full_chroot_work.html
本文作者 mxdyeah
发布时间 2025-05-23
许可协议 CC BY-NC-SA 4.0
发表新评论

以下是Google广告,请注意辨别其内容: