你有没有遇到过这样一幕:系统突然崩溃,grub引导卡死,SSH 进不去,只能挂起镜像,眼睁睁看着系统文件在那里就是动不了?这时候很多人下意识地想:是不是得重装?别急,其实Chroot就是你此时的最佳救命工具之一。
chroot(change root)是一个 Linux 命令,可以把当前的根目录(/)切换到你指定的另一个路径里。简单说,就是你可以在一个“假”的系统目录里运行命令,让它以为自己就是“根环境”,从而实现在挂载状态下修改另一个 Linux 系统。
典型场景:系统挂了,但镜像文件还在。
这是最常见的用法。比如:云服务器误操作 /etc/fstab,系统无法启动;修改了grub重启直接黑屏;镜像损坏引导但数据还在;忘记 root 密码进不了系统;
你可以将镜像挂载到一台“救援系统”中,然后 chroot 进去维护。
实战步骤:一步一步用 chroot 维护一个 Linux 镜像
我们以一个 .img
镜像为例,比如你从 KVM 导出了一块系统盘镜像 ubuntu.img
。
第一步:挂载镜像到本地目录
mkdir /mnt/recover
mount -o loop ubuntu.img /mnt/recover
如果镜像是多分区的 raw 文件(比如带有 MBR),你可以用:
losetup -fP ubuntu.img
mount /dev/loop0p1 /mnt/recover
可以用 fdisk -l ubuntu.img
查看到底哪个分区是系统盘。
第二步:挂载必要的虚拟文件系统
为了让 chroot 环境能像一个“真实系统”那样运行,你还需要挂载 proc、dev、sys 这些系统接口:
mount -t proc /proc /mnt/recover/proc
mount --rbind /dev /mnt/recover/dev
mount --rbind /sys /mnt/recover/sys
如果是修grub 还建议挂载 boot 和 run:
mount --bind /run /mnt/recover/run
mount --bind /boot /mnt/recover/boot # 如果 boot 是单独分区
第三步:进入 chroot 环境
chroot /mnt/recover /bin/bash
现在你就相当于“登录”进了这台出故障的系统里。你可以正常运行 apt, passwd, update-grub,甚至升级内核。
第四步:做你该做的事,比如……
重设 root 密码:
passwd root
修复引导:
grub-install /dev/sda
update-grub
修改 fstab 配置:
nano /etc/fstab
删掉挂载失败的设备路径或改 UUID,防止下次引导失败。
清理临时包或日志过大:
apt clean && rm -rf /var/log/*
第五步:退出并卸载干净
做完所有维护操作后,记得卸载你挂载的内容,恢复系统干净状态:
exit
umount -l /mnt/recover/proc
umount -l /mnt/recover/sys
umount -l /mnt/recover/dev
umount -l /mnt/recover/run
umount -l /mnt/recover
如果你用了 losetup,还要清除 loop 设备:
losetup -d /dev/loop0
如果你是在实体服务器或者 VPS 系统中崩了,也可以用 rescue ISO 镜像挂载原系统后再 chroot 进去,比如挂 LiveCD 进入救援模式,和在主机上挂镜像一样的逻辑。
Chroot 是 Linux 运维工具箱中最被低估的一个利器。当系统“看上去坏了”,你其实还有一次进入内部修补的机会——只要你记得它还躺在磁盘里,没彻底“死透”。别轻易重装,多试一次 chroot,说不定就救回来了整个生产环境。