chroot与pivot_root总结

chroot与pivot_root总结

chroot与pivot_root总结

大纲

根文件系统rootfschroot隔离pivot_roo隔离

根文件系统rootfs

根文件系统一般也叫做rootfs

这里所谓的Linux根文件系统更像是一个文件夹或者叫做目录 (而非FATFS、FAT、EXT4、YAFFS和NTFS等这样的文件系统),在这个目录里面会有很多的子目录。根目录下和子目录中会有很多的文件,这些文件是Linux运行所必须的,比如库、常用的软件和命令、设备文件、配置文件等等

根文件系统首先是内核启动时所mount(挂载)的第一个文件系统,内核代码映像文件保存在根文件系统中,而系统引导启动程序会在根文件系统挂载之后从中把一些基本的初始化脚本和服务等加载到内存中去运行。

根文件系统是Linux内核启动以后挂载(mount)的第一个文件系统,然后从根文件系统中读取初始化脚本,比如rcS,inittab等。根文件系统和Linux内核是分开的,单独的Linux内核是没法正常工作的,必须要搭配根文件系统。如果不提供根文件系统,Linux内核在启动的时候就会提示内核崩溃(Kernelpanic)的提示。

注意 rootfs 与 bootfs的区别 ,bootfs包含BootLoader与内核各个linux发行版的bootfs基本一致, rootfs与各个linux发行版有关,可能不一样

可以下载一个根文件系统 (以上传到百度云 /常用软件/操作系统/rootfs.tar.gz)

wget https://github.com/ericchiang/containers-from-scratch/releases/download/v0.1.0/rootfs.tar.gz

解压后得到一个根文件系统

或者基于docker导出一个根文件系统

例如

docker pull alpine

docker pull busybox

docker run -d busybox top -b

docker export -o busybox.tar (busybox容器id)

tar -xvf busybox.tar -C busybox

使用docker导出一个根文件系统

另外一个终端中

这样就得到了一个linux运行时的根文件系统

chroot隔离

chroot 就是可以改变某进程的根目录,使这个程序不能访问目录之外的其他目录。

chroot NEWROOT [COMMAND [ARG]...]

注意 此处的COMMAND需要是新的根目录中存在的

pivot_root隔离

pivot_root把当前进程的root文件系统放在put_old目录,而使new_root成为新的root文件系统

改变当前工作目录的所有进程或线程的工作目录. 这个跟chroot的就有很大的区别,chroot是只改变即将运行的

某进程的根目录。pviot_root主要是把整个系统切换到一个新的root目录,然后去掉对之前rootfs的依赖,以便于可以umount 之前的文件系统(pivot_root需要root权限)

https://man7.org/linux/man-pages/man2/pivot_root.2.html

命令各式:

pivot_root new_root put_old

使用pivot_root 需要注意

1 new_root 与 put_old 必须是文件夹2 new_root文件夹必须是一个挂载点 ,并且new_root文件夹里面有完整rootfs的各种文件3 new_root 文件夹挂载应该是一个与主机不同的name space4 put_old文件夹必须在new_root文件夹内

new_root文件夹必须是一个挂载点 ,并且new_root文件夹里面有完整rootfs的各种文件

new_root 文件夹挂载应该是一个与主机不同的name space

put_old文件夹必须在new_root文件夹内

完整例子

unshare --mount --fork /bin/bash #需要有独立的命名空间

mkdir /new-root

mount -t tmpfs mytmpfs /new-root #new-root是一个独立的挂载点

cd /new-root

mkdir old-root #注意可以不创建old-root文件夹直接使用tmp文件夹

cp -r /ushare/busybox/* /new-root/ #new_root文件夹里面有完整rootfs的各种文件

cd ..

pivot_root /new-root/ /new-root/old-root

cd /

资料

相关推荐

刘邦在哪里登基称帝?西汉开国在哪里定都?
best365提现多久到账

刘邦在哪里登基称帝?西汉开国在哪里定都?

07-19 🌱 5918
易维帮助台:Helpdesk完整落地,一体化的企业客服管理
星座运势软件哪个好?最准的星座软件推荐
365彩票app下载2020

星座运势软件哪个好?最准的星座软件推荐

07-14 🌱 9231