chroot概念
chroot是操作系統級的“虛擬機”,其功能是切換程序運行時的根目錄,將程序限制在指定的根目錄中,從而隔離應用程序,這個目錄叫作 chroot jail。
在chroot中運行的程序實際上使用的是真實系統的內核和資源,所以性能不會有損耗。
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
建立一個最小的chroot環境:
1.在 /home 目錄下建立一個 rootfs目錄,作為 chroot 的根目錄
2.建立 bin 目錄,並拷貝默認的 bash 命令和用於測試的 ls 命令:
3. ldd 找到兩個命令的依賴,拷貝到相應的位置:
4. chroot . 改變根目錄,並使用 ls -a 測試,完成后exit退出: