chroot

chroot概念

变更当前进程及其子进程的可见根路径。变更后,程序无法访问可见根目录外文件和命令,这个目录叫作 chroot jail

chroot 目的

切换根目录通常为了系统维护:

  • 重新安装 bootloader.
  • 重建 initramfs 镜像.
  • 更新或 降级软件包.
  • 重置 忘记的密码.
  • 在干净的 chroot 中构建软件包

chroot必要条件

  • root 权限
  • 另一个 linux 环境,例如 liveCD、USB 闪存介质或者一个已经安装的另一个 linux 发行版。
  • 匹配的架构,chroot 前后的环境架构要一致(例如均为 i686 或 x86_64)。可以用  uname –m  命令查看当前环境的架构
  • 提前加载 chroot 环境需要的内核模块
  • 如果需要 swap, chroot 前先启用 swap (swapon /dev/sdxY)
  • 如果需要网络,chroot 之前先建立好网络连接。

两种使用 chroot 的方式

>> arch-chroot bash 脚本是软件包 arch-install-scripts 的一部分,在运行 /usr/bin/chroot 前,这个脚本会挂载 /proc api 文件系统,建立可用的 /etc/resolv.conf。

  • 进入 chroot

 # arch-chroot /location/of/new/root 

例如在 安装指南 中,chroot 到 /mnt:

 # arch-chroot /mnt 

  • 退出 chroot:

 # exit 

  • 运行一个命令并退出

 # arch-chroot /location/of/new/root mycommand 

例如要在 /mnt/arch 中运行 mkinitcpio -p linux 并退出:

 # arch-chroot /mnt/arch mkinitcpio -p linux 

>> 使用 chroot

警告: 使用 --rbind 选项时,将无法卸载某些 dev/ 和 sys/ 的子目录,用 umount -l 卸载将会破坏会话并需要重启,所以请尽可能使用 -o bind。

作为 root 挂载 api 文件系统:

# cd /location/of/new/root

# mount -t proc proc proc/

# mount --rbind /sys sys/

# mount --rbind /dev dev/

可选挂载:

 # mount --rbind /run run/ 

如果已经建立了一个网络连接并且想在 chroot 环境中继续使用,将 DNS 服务器配置复制到新环境:

 # cp -L /etc/resolv.conf etc/resolv.conf 

chroot 到新环境中并启用指定 shell

 # chroot /mnt/arch /usr/bin/bash 

猜你喜欢

转载自www.cnblogs.com/tongyishu/p/11815437.html