pivot_root(2) - wariua/manpages-ko GitHub Wiki
pivot_root - ๋ฃจํธ ํ์ผ ์์คํ ๋ฐ๊พธ๊ธฐ
int pivot_root(const char *new_root, const char *put_old);
์ฃผ์: ์ด ์์คํ ํธ์ถ์ ๋ํ glibc ๋ํผ๊ฐ ์๋ค. NOTES ์ฐธ๊ณ .
pivot_root()
๋ ํธ์ถ ํ๋ก์ธ์ค์ ๋ฃจํธ ํ์ผ ์์คํ
์ ๋๋ ํฐ๋ฆฌ put_old
๋ก ์ฎ๊ธฐ๊ณ new_root
๋ฅผ ํธ์ถ ํ๋ก์ธ์ค์ ์ ๋ฃจํธ ํ์ผ ์์คํ
์ผ๋ก ๋ง๋ ๋ค.
๋ํ์ ์ผ๋ก pivot_root()
๋ฅผ ์ฐ๋ ๊ณณ์ด ์์คํ
์๋ ๋์ธ๋ฐ, ์์คํ
์์ ์์ ๋ฃจํธ ํ์ผ ์์คํ
(๊ฐ๋ น initrd
)์ ๋ง์ดํธ ํ๊ณ ์ ์ค์ ๋ฃจํธ ํ์ผ ์์คํ
์ ๋ง์ดํธ ํ ๋ค์ ์ต์ข
์ ์ผ๋ก ํ์๋ฅผ ๋ชจ๋ ๊ด๋ จ ํ๋ก์ธ์ค ๋ด์ง ์ค๋ ๋์ ํ์ฌ ๋ฃจํธ๋ก ๋ฐ๊พผ๋ค.
์ด์ ๋ฃจํธ ๋๋ ํฐ๋ฆฌ๋ฅผ ์ฐ๋ ํ๋ก์ธ์ค ๋ด์ง ์ค๋ ๋์ ํ์ฌ ๋ฃจํธ ๋ฐ ํ์ฌ ์์
๋๋ ํฐ๋ฆฌ๋ฅผ pivot_root()
์์ ๋ฐ๊ฟ ์๋ ์๊ณ ๋ฐ๊พธ์ง ์์ ์๋ ์๋ค. pivot_root()
๋ฅผ ํธ์ถํ๋ ์ชฝ์์ ์ด์ ๋ฃจํธ๋ฅผ ๋ฃจํธ๋ ํ์ฌ ์์
๋๋ ํฐ๋ฆฌ๋ก ํ๋ ํ๋ก์ธ์ค๊ฐ ์ด๋ ๊ฒฝ์ฐ์๋ ์ฌ๋ฐ๋ฅด๊ฒ ๋์ํ๋๋ก ํด์ผ ํ๋ค. ๊ทธ๊ฑธ ๋ณด์ฅํ๋ ์์ฌ์ด ๋ฐฉ๋ฒ ํ๋๋ pivot_root()
ํธ์ถ ์ ์ ๊ทธ ํ๋ก์ธ์ค๋ค์ ๋ฃจํธ ๋ฐ ํ์ฌ ์์
๋๋ ํฐ๋ฆฌ๋ฅผ new_root
๋ก ๋ฐ๊พธ๋ ๊ฒ์ด๋ค.
์ ๋ฌธ๋จ์ ์๋์ ์ผ๋ก ๋ชจํธํ๊ฒ ์์ฑ๋๋๋ฐ, pivot_root()
๊ตฌํ์ด ํฅํ์ ๋ฐ๋ ์๋ ์๊ธฐ ๋๋ฌธ์ด๋ค. ์์ฑ ์์ ํ์ฌ๋ ๊ฐ ํ๋ก์ธ์ค ๋ด์ง ์ค๋ ๋์ ๋ฃจํธ ๋ฐ ํ์ฌ ์์
๋๋ ํฐ๋ฆฌ๊ฐ ์ด์ ๋ฃจํธ ๋๋ ํฐ๋ฆฌ๋ฅผ ๊ฐ๋ฆฌํค๊ณ ์์ผ๋ฉด ๊ทธ๊ฑธ pivot_root()
์์ new_root
๋ก ๋ฐ๊พผ๋ค. ์ด๋ ๊ฒ ํด ์ฃผ์ด์ผ ์ ํ ํ์ผ ์์คํ
์ ์ ๊ทผ๋ ํ์ง ์๋ ์ปค๋ ์ค๋ ๋๊ฐ ์ด์ ๋ฃจํธ ๋๋ ํฐ๋ฆฌ๋ฅผ ์๊ธฐ ๋ฃจํธ ๋ฐ ํ์ฌ ์์
๋๋ ํฐ๋ฆฌ๋ก ์ก์์ ๊ณ์ ์ฌ์ฉ ์ค์ด๋๋ก ํ๋ ๊ฑธ ๋ง์ ์ ์๋ค. ํฅํ์๋ ์ปค๋ ์ค๋ ๋์์ ๋ช
์์ ์ผ๋ก ํ์ผ ์์คํ
์ ๊ทผ์ ํฌ๊ธฐํ๋ ๋ฉ์ปค๋์ฆ์ด ์์ด์ ๊ฝค ์นจ์ต์ ์ธ ์ด ๋ฉ์ปค๋์ฆ์ pivot_root()
์์ ์์จ ์ ์๊ฒ ๋ ์๋ ์๋ค.
์ฐธ๊ณ ๋ก ํธ์ถ ํ๋ก์ธ์ค์๋ ์ ์ฌํญ์ด ์ ์ฉ๋๋ค. ์ฆ pivot_root()
๊ฐ ํธ์ถ ํ๋ก์ธ์ค์ ํ์ฌ ์์
๋๋ ํฐ๋ฆฌ์ ์ํฅ์ ์ค ์๋ ์๊ณ ์ฃผ์ง ์์ ์๋ ์๋ค. ๋ฐ๋ผ์ pivot_root()
์งํ์ chdir("/")
์ ํธ์ถํ๊ธฐ๋ฅผ ๊ถ์ฅํ๋ค.
new_root
์ put_old
์ ๋ค์ ์ ์ฝ๋ค์ด ์ ์ฉ๋๋ค.
-
๋๋ ํฐ๋ฆฌ์ฌ์ผ ํ๋ค.
-
new_root
์put_old
๊ฐ ํ์ฌ ๋ฃจํธ์ ๊ฐ์ ํ์ผ ์์คํ ์์ ์์ด์ ์ ๋๋ค. -
put_old
๊ฐnew_root
์๋์ ์์ด์ผ ํ๋ค. ์ฆput_old
๊ฐ ๊ฐ๋ฆฌํค๋ ๋ฌธ์์ด์/..
๋ฅผ 1๊ฐ ์ด์ ๋ง๋ถ์ฌ์new_root
์ ๋์ผํ ๋๋ ํฐ๋ฆฌ๊ฐ ๋์์ผ ํ๋ค. -
put_old
์ ๋ค๋ฅธ ํ์ผ ์์คํ ์ด ๋ง์ดํธ ๋ผ ์์ด์ ์ ๋๋ค.
๋ ๋ง์ ์ฌ์ฉ๋ก๋ pivot_root(8)
๋ฅผ ๋ณด๋ผ.
ํ์ฌ ๋ฃจํธ๊ฐ (๊ฐ๋ น chroot(2)๋ pivot_root()
๋ฅผ ํธ์ถํ ํ์, ์๋ ์ฐธ๊ณ ) ๋ง์ดํธ ์ง์ ์ด ์๋๋ฉด ์ด์ ๋ฃจํธ ๋๋ ํฐ๋ฆฌ๊ฐ ์๋๋ผ ๊ทธ ํ์ผ ์์คํ
์ ๋ง์ดํธ ์ง์ ์ด put_old
์ ๋ง์ดํธ ๋๋ค.
new_root
๊ฐ ๋ง์ดํธ ์ง์ ์ด์ด์ผ ํ๋ค. (์๋๋ผ๋ฉด new_root
์ ์ค์ค๋ก๋ฅผ ๋ฐ์ธ๋ ๋ฐ์ดํธ ํด ์ฃผ๋ฉด ๋๋ค.)
new_root
์ ๊ทธ ๋ถ๋ชจ ๋ง์ดํธ์ ์ ํ ์ ํ์ด MS_SHARED
์ฌ์ ์ ๋๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก put_old
๊ฐ ๊ธฐ์กด ๋ง์ดํธ ์ง์ ์ธ ๊ฒฝ์ฐ ๊ทธ ์ ํ ์ ํ์ด MS_SHARED
์ฌ์ ์ ๋๋ค.
new_root
๊ฐ ๊ผญ ๋ง์ดํธ ์ง์ ์ผ ํ์๋ ์๋ค. ๊ทธ ๊ฒฝ์ฐ์๋ /proc/mounts
์์ new_root
๋ฅผ ๋ด์ ํ์ผ ์์คํ
์ ๋ง์ดํธ ์ง์ ์ ๋ฃจํธ(/
)๋ก ๋ณด์ฌ ์ฃผ๊ฒ ๋๋ค.
์ฑ๊ณต ์ 0์ ๋ฐํํ๋ค. ์ค๋ฅ ์ -1์ ๋ฐํํ๋ฉฐ errno
๋ฅผ ์ ์ ํ ์ค์ ํ๋ค.
stat(2)์ด ๋ฐํํ๋ ์ค๋ฅ๋ค์ pivot_root()
๊ฐ (errno
๋ก) ๋ฐํํ ์ ์๋ค. ๋๋ถ์ด ๋ค์์ ๋ฐํํ ์ ์๋ค.
EBUSY
- ํ์ฌ ๋ฃจํธ ํ์ผ ์์คํ
์์
new_root
๋put_old
๊ฐ ์๊ฑฐ๋put_old
์ ์ด๋ฏธ ํ์ผ ์์คํ ์ด ๋ง์ดํธ ๋ผ ์๋ค. EINVAL
-
new_root
๊ฐ ๋ง์ดํธ ์ง์ ์ด ์๋๋ค. EINVAL
-
put_old
๊ฐnew_root
์๋์ ์์ง ์๋ค. EINVAL
- ํ์ฌ ๋ฃจํธ๊ฐ rootfs(์ด๊ธฐ ramfs) ํ์ผ ์์คํ ํ์ผ ์์คํ ์์ ์๋ค.
EINVAL
-
new_root
์ ๋ง์ดํธ ์ง์ ์ด๋ ๊ทธ ๋ง์ดํธ ์ง์ ์ ๋ถ๋ชจ ๋ง์ดํธ๊ฐ ์ ํ ์ ํ์ดMS_SHARED
๋ค. EINVAL
-
put_old
๊ฐ ์๋ฌธํธ ์ง์ ์ด๊ณ ์ ํ ์ ํ์ดMS_SHARED
๋ค. ENOTDIR
-
new_root
๋put_old
๊ฐ ๋๋ ํฐ๋ฆฌ๊ฐ ์๋๋ค. EPERM
- ํธ์ถ ํ๋ก์ธ์ค๊ฐ
CAP_SYS_ADMIN
์ญ๋ฅ์ ๊ฐ์ง๊ณ ์์ง ์๋ค.
๋ฆฌ๋
์ค 2.3.41์์ pivot_root()
๊ฐ ๋์
๋๋ค.
pivot_root()
๋ ๋ฆฌ๋
์ค ์ ์ฉ์ด๋ฏ๋ก ์ด์์ฑ์ด ์๋ค.
glibc์์ ์ด ์์คํ ํธ์ถ์ ๋ํผ๋ฅผ ์ ๊ณตํ์ง ์๋๋ค. syscall(2)์ ์ด์ฉํด ํธ์ถํด์ผ ํ๋ค.
rootfs(์ด๊ธฐ ramfs)๋ฅผ pivot_root()
ํ ์ ์๋ค. ์ด ๊ฒฝ์ฐ ๋ฃจํธ ํ์ผ ์์คํ
์ ๋ฐ๊พธ๋ ๊ถ์ฅํ๋ ๋ฐฉ๋ฒ์ rootfs์์ ๋ชจ๋ ๊ฑธ ์ง์ฐ๊ณ , ์ root๋ก rootfs๋ฅผ ๋ฎ์ด์ ๋ง์ดํธ ํ๊ณ , ์ /dev/console
์ stdin
/stdout
/stderr
๋ฅผ ๋ถ์ด๊ณ , ์ init(1)
์ exec ํ๋ ๊ฒ์ด๋ค. ์ด ๊ณผ์ ์ ์ํ ํฌํผ ํ๋ก๊ทธ๋จ๋ค์ด ์กด์ฌํ๋ค. switch_root(8)
์ฐธ๊ณ .
pivot_root()
๊ฐ ์์คํ
๋ด ๋ค๋ฅธ ๋ชจ๋ ํ๋ก์ธ์ค๋ค์ ๋ฃจํธ ๋ฐ ํ์ฌ ์์
๋๋ ํฐ๋ฆฌ๋ฅผ ๋ฐ๊ฟ์ผ ํด์๋ ์ ๋๋ค.
๋ ๋ช
ํํ pivot_root()
์ฌ์ฉ ๋ฐฉ์ ๋ช ๊ฐ์ง๋ ๋น ๋ฅด๊ฒ ์ฌ๋์ ๋๊ฒ ๋ง๋ค ์ ์๋ค.
chdir(2), chroot(2), mount(2), stat(2), initrd(4), pivot_root(8)
, switch_root(8)
2019-08-02