「pivot_root(8)」-

改变根文件系统

命令语法格式

pivot_root new_root put_old

命令描述

命令pivot_root将当前进程的根文件系统移动到put_old目录,并使new_root成为新的根文件系统。 由于pivot_root(8)只是调用pivot_root(2),因此我们将参考后者的手册页以获取更多详细信息。

请注意,根据pivot_root的实现,调用者的root和cwd可能会也可能不会更改。 以下是调用pivot_root的顺序,在任何一种情况下均可使用,假设pivot_root和chroot位于当前PATH中:

cd new_root

pivot_root . put_old

exec chroot . command

请注意,chroot必须在旧根目录下和新根目录下可用,因为pivot_root可能已经或可能没有隐式更改shell的根目录。

请注意,exec chroot会更改正在运行的可执行文件,如果之后应该卸载旧的根目录,这是必需的。 另请注意,标准输入、标准输出、标准错误仍可能指向旧根文件系统上的设备,使其保持忙碌状态。 调用chroot时可以轻松更改它们(请参阅下文;请注意,如果pivot_root已更改shell的根目录,则无需使用前导斜杠来使其工作)。

命令支持的选项及含义

-V, –version
显示版本信息并退出。

-h, –help
显示帮助信息并退出。

使用示例

从交互式shell将根文件系统更改为/dev/hda1:

mount /dev/hda1 /new-root

cd /new-root

pivot_root . old-root

exec chroot . sh <dev/console >dev/console 2>&1

umount /old-root

从10.0.0.1:/my_root通过NFS挂载新的根文件系统,并运行init:

ifconfig lo 127.0.0.1 up # for portmap

# configure Ethernet or such

portmap # for lockd (implicitly started by mount)

mount -o ro 10.0.0.1:/my_root /mnt

killall portmap # portmap keeps old root busy

cd /mnt

pivot_root . old_root

exec chroot . sh -c ‘umount /old_root; exec /sbin/init’ <dev/console >dev/console 2>&1

如上示例

相关手册

chroot(1), pivot_root(2), mount(8), switch_root(8), umount(8)

参考文献

  • man 8 pivot_root, Version 2.32.1-0.1

更新日志

  • 10/08/2018 创建文章