< FS namespace >
각각의 process 가 가지고 있는 mount set
다른 FS namespace 를 가지고 있는 process 는 서로 다른 mount information 을 가지고 있다.
각 process 의 proc 의 ns 에서 FS namespace 를 확인 할 수 있다.
root@klte:/proc/7532 # ls -al /proc/7939/ns
lrwxrwxrwx bluetooth bluetooth 2015-01-02 11:09 mnt -> mnt:[4026534520]
root@klte:/proc/7532 # ls -al /proc/7532/ns
이처럼 FS namespace 가 다르면
에서 조회되는 각 process 마다의 mount 정보도 다르다.
# cat /proc/7532/mounts
rootfs / rootfs ro,seclabel,relatime 0 0
tmpfs /dev tmpfs rw,seclabel,nosuid,relatime,mode=755 0 0
devpts /dev/pts devpts rw,seclabel,relatime,mode=600 0 0
proc /proc proc rw,relatime 0 0
sysfs /sys sysfs rw,seclabel,relatime 0 0
selinuxfs /sys/fs/selinux selinuxfs rw,relatime 0 0
debugfs /sys/kernel/debug debugfs rw,seclabel,relatime 0 0
tmpfs /mnt tmpfs rw,seclabel,relatime,mode=755,gid=1000 0 0
...
# cat /proc/7939/mounts
rootfs / rootfs ro,seclabel,relatime 0 0
tmpfs /dev tmpfs rw,seclabel,nosuid,relatime,mode=755 0 0
devpts /dev/pts devpts rw,seclabel,relatime,mode=600 0 0
proc /proc proc rw,relatime 0 0
sysfs /sys sysfs rw,seclabel,relatime 0 0
selinuxfs /sys/fs/selinux selinuxfs rw,relatime 0 0
debugfs /sys/kernel/debug debugfs rw,seclabel,relatime 0 0
tmpfs /mnt tmpfs rw,seclabel,relatime,mode=755,gid=1000 0 0
/data/media /mnt/runtime/write/emulated sdcardfs rw,seclabel,nosuid,nodev,noexec,relatime,low_uid=1023,low_gid=1023,gid=9997,multi_user,mask=0007 0 0
....
자세한 이론 설명등은 아래 페이지를 참고
http://bluese05.tistory.com/category/IT/Linux
http://blog.yadutaf.fr/2014/01/12/introduction-to-linux-namespaces-part-4-ns-fs/
http://man7.org/linux/man-pages/man7/namespaces.7.html
clone 이나 fork 할때 CLONE_NEWNS 를 호출 하지 않으면 부모와 같은 mount namespace 를 보게 됨
CLONE_NEWNS 를 clone() 할때 호출되면 child process 는 자신의 mount namespace 를 가지게 되는데 이것은 parect 의 namespace 복사본으로 초기화 되어 있다.
setns(2) : process 의 namespace 를 동적으로 변경할 수 있다.
< UTS namespace >
hostname 역시 각 process 마다 isolate 시킬 수 있다.
여기서 host name 이란 "onegun@onegun-Samsung-Desktop-System" 에서의 뒷 부분을 뜻한다.
아래 두 명령어로 확인이 가능하다.
onegun@change-onegun:~$ hostname
onegun-Samsung-Desktop-System
onegun@change-onegun:~$ uname -n
onegun-Samsung-Desktop-System
sethostname(2); 함수를 사용하면 process 내에서 변경이 가능하고,
shell 에서 간단하게 unshare 라는 command 를 사용해서도 변경이 가능하다.
# unshare Usage: unshare [options] <program> [args...] Options: -h, --help usage information (this) -m, --mount unshare mounts namespace -u, --uts unshare UTS namespace (hostname etc) -i, --ipc unshare System V IPC namespace -n, --net unshare network namespace For more information see unshare(1). |
unshare 옵션으로 프로그램을 실행시키면, namespace 가 parent 와 share 되지 않은 상태로 process 가 생성된다.
여기서 -m option 이 위에 설명했던 FS namespace 를 isolate 시키는옵션이고
-u 가 hostname 을 isolate 시키는 옵션이다.
unshare -u /bin/bash
를 하면 hostname 이 분리된 새로운 shell 이 실행되게 된다.
hostname [new name] 은 host name 을 변경시키는 명령어 이다.
만약 내가 아래와 같이 입력하고,
root@onegun-Samsung-Desktop-System:~#hostname new-shell-name
새로운 shell 을 open 하면
root@new-shell-name:~#
으로 접속이 된다.
하지만, unshare -u /bin/bash 을 입력 한 후에
root@onegun-Samsung-Desktop-System:~#hostname new-shell-name
을 하면 새롭게 open 된 /bin/bash 의 namespace 만 변경되고, global hostname 에는 영향을 미치지 않게 된다.
이 상태에서 각 bash shell 의 uts 를 보면 서로 다른 uts namespace 를 사용하고 있음을 알 수 있다.
root@change-onegun:~# ps | grep bash
30982 pts/23 00:00:00 bash
30994 pts/23 00:00:00 bash
root@change-onegun:~# ls -al /proc/30994/ns
total 0
dr-x--x--x 2 root root 0 10월 14 15:59 .
dr-xr-xr-x 9 root root 0 10월 14 15:58 ..
lrwxrwxrwx 1 root root 0 10월 14 15:59 ipc -> ipc:[4026531839]
lrwxrwxrwx 1 root root 0 10월 14 15:59 mnt -> mnt:[4026531840]
lrwxrwxrwx 1 root root 0 10월 14 15:59 net -> net:[4026531956]
lrwxrwxrwx 1 root root 0 10월 14 15:59 pid -> pid:[4026531836]
lrwxrwxrwx 1 root root 0 10월 14 15:59 user -> user:[4026531837]
lrwxrwxrwx 1 root root 0 10월 14 15:59 uts -> uts:[4026532284]
root@change-onegun:~# ls -al /proc/30982/ns
total 0
dr-x--x--x 2 root root 0 10월 14 15:59 .
dr-xr-xr-x 9 root root 0 10월 14 15:56 ..
lrwxrwxrwx 1 root root 0 10월 14 15:59 ipc -> ipc:[4026531839]
lrwxrwxrwx 1 root root 0 10월 14 15:59 mnt -> mnt:[4026531840]
lrwxrwxrwx 1 root root 0 10월 14 15:59 net -> net:[4026531956]
lrwxrwxrwx 1 root root 0 10월 14 15:59 pid -> pid:[4026531836]
lrwxrwxrwx 1 root root 0 10월 14 15:59 user -> user:[4026531837]
lrwxrwxrwx 1 root root 0 10월 14 15:59 uts -> uts:[4026531838]
'Programming > Linux_Platform' 카테고리의 다른 글
linux signals (0) | 2015.10.19 |
---|---|
linux stand out 을 file 에 logging 하기 (0) | 2015.10.19 |
Android log command, logwrapper (0) | 2015.09.30 |
logcat 사용법 정리 (0) | 2015.09.30 |
wrtie 비교 O_DIRECT and no-delay-alloc mount option (0) | 2014.08.04 |