Linux命令:pivot_root
pivot_root 命令基本介绍pivot_root是 Linux 系统中用于切换根文件系统的工具它将当前进程的根目录从旧根切换到新根并将旧根移动到新根下的某个位置。与chroot不同pivot_root真正改变整个系统的根文件系统常用于容器初始化、系统升级和嵌入式系统中。资料合集https://pan.quark.cn/s/6fe3007c3e95、https://pan.quark.cn/s/561de99256a5、https://pan.quark.cn/s/985f55b13d94、https://pan.quark.cn/s/d0fb20abd19a语法pivot_root NEW_ROOT PUT_OLD参数说明参数说明NEW_ROOT新的根文件系统目录PUT_OLD旧根文件系统将被挂载到新根下的位置使用示例1. 基本用法pivot_root /newroot /newroot/oldroot2. 容器初始化流程# 挂载新根文件系统mount/dev/sdX /newroot# 挂载必要的文件系统mount-tproc proc /newroot/procmount-tsysfs sysfs /newroot/sysmount-obind/dev /newroot/dev# pivot_root 切换根pivot_root /newroot /newroot/oldroot# 切换到新根后执行命令execchroot./bin/bashdev/consoledev/console213. 配合 chroot 使用# pivot_root 切换根pivot_root /newroot /newroot/oldroot# 卸载旧根umount/oldroot# 执行新系统的 initexec/sbin/init4. 在脚本中使用#!/bin/bash# 检查参数if[$#-ne2];thenechoUsage:$0NEW_ROOT PUT_OLDexit1fiNEW_ROOT$1PUT_OLD$2# pivot_root 切换pivot_root$NEW_ROOT$PUT_OLD# 切换目录到新根cd/# 卸载旧根umount-l$PUT_OLD# 启动新系统exec/sbin/init5. 清理旧根pivot_root /newroot /newroot/oldrootcd/umount-l/oldroot/procumount-l/oldroot/sysumount-l/oldroot/devumount-l/oldroot输出格式说明成功执行# 无输出直接切换成功错误输出示例pivot_root: failed to change root from / to /newroot: Invalid argument工作原理pivot_root 与 chroot 的区别特性pivot_rootchroot作用范围整个系统单个进程及其子进程旧根处理移动到新根下保持不变需要挂载需要提前挂载不需要适用场景容器、系统升级隔离环境、修复工作流程1. 挂载新根文件系统 2. 挂载必要的伪文件系统proc、sys、dev 3. pivot_root 切换根目录 4. 切换工作目录到新根 5. 卸载旧根文件系统 6. 启动新系统的 init 进程实用技巧创建容器根文件系统# 创建目录mkdir-p/container/{rootfs,oldroot}# 使用 debootstrap 创建根文件系统debootstrapstable /container/rootfs http://deb.debian.org/debian/# 挂载必要的文件系统mount-tproc proc /container/rootfs/procmount-tsysfs sysfs /container/rootfs/sysmount-obind/dev /container/rootfs/dev# pivot_root 切换pivot_root /container/rootfs /container/rootfs/oldroot# 启动容器 initexec/sbin/init系统升级# 挂载新系统镜像mount/dev/sdX /newroot# 挂载必要的文件系统mount--bind/proc /newroot/procmount--bind/sys /newroot/sysmount--bind/dev /newroot/dev# pivot_root 切换pivot_root /newroot /newroot/oldroot# 卸载旧系统umount/oldroot# 启动新系统exec/sbin/init嵌入式系统初始化# 挂载根文件系统mount/dev/mmcblk0p1 /newroot# 创建旧根目录mkdir-p/newroot/oldroot# pivot_root 切换pivot_root /newroot /newroot/oldroot# 切换到新根cd/# 卸载旧根umount-l/oldroot# 启动 initexec/sbin/init相关命令chroot改变进程的根目录mount挂载文件系统umount卸载文件系统debootstrap创建 Debian 根文件系统systemd-nspawnsystemd 容器工具docker容器化平台exec替换当前进程注意事项权限要求pivot_root需要 root 权限目录要求NEW_ROOT和PUT_OLD必须在不同的文件系统上挂载要求新根文件系统必须已经挂载工作目录执行后需要切换工作目录到新根卸载顺序需要按正确顺序卸载旧根的挂载点进程替换通常需要使用exec替换当前进程内核支持需要内核支持 pivot_root 系统调用总结pivot_root是 Linux 系统中用于切换整个系统根文件系统的工具。它与chroot不同pivot_root真正改变系统的根目录常用于容器初始化、系统升级和嵌入式系统中。使用时需要注意权限要求、文件系统挂载顺序和进程替换确保系统能够正确启动。