xref: /third_party/toybox/toys/other/pivot_root.c (revision 0f66f451)
1/* pivot_root.c - edit system mount tree
2 *
3 * Copyright 2012 Rob Landley <rob@landley.net>
4
5USE_PIVOT_ROOT(NEWTOY(pivot_root, "<2>2", TOYFLAG_SBIN))
6
7config PIVOT_ROOT
8  bool "pivot_root"
9  default y
10  help
11    usage: pivot_root OLD NEW
12
13    Swap OLD and NEW filesystems (as if by simultaneous mount --move), and
14    move all processes with chdir or chroot under OLD into NEW (including
15    kernel threads) so OLD may be unmounted.
16
17    The directory NEW must exist under OLD. This doesn't work on initramfs,
18    which can't be moved (about the same way PID 1 can't be killed; see
19    switch_root instead).
20*/
21
22#define FOR_pivot_root
23#include "toys.h"
24
25#include <sys/syscall.h>
26#include <unistd.h>
27
28void pivot_root_main(void)
29{
30  if (syscall(__NR_pivot_root, toys.optargs[0], toys.optargs[1]))
31    perror_exit("'%s' -> '%s'", toys.optargs[0], toys.optargs[1]);
32}
33