전공영역 공부 기록

linux의 mount namespace

악분 2024. 9. 1. 13:07
반응형

 

1. mount namespace이란?

mount namespace 파일 시스템 마운트(mount) 언마운트(umount) 작업을 격리할 있는 전용 공간을 생성합니다. namespace에서 수행된 mount umount 작업은 다른 namespace 영향을 미치지 않습니다.

 

예를 들어, A mount namespace에서 생성된 /test 마운트 포인트는 B mount namespace에서는 존재하지 않습니다. 왜냐하면 namespace 서로 다른 파일 시스템 마운트 환경을 사용하기 때문입니다.

 

2. 컨테이너 관점에서 바라보는 mount namespace 역할

컨테이너에서 mount namespace 역할은 컨테이너가 자기만의 파일 시스템 환경을 가지도록 하는 입니다. mount namespace는 mount umount 작업이 다른 namespace 영향을 주지 않기 때문에, 컨테이너는 자신만의 고유한 디스크 작업 공간을 안전하게 사용할 있습니다.

 

3. 생성방법

mount namespaceunshare --mount명령어로 생성합니다.

unshare --mount {실행파일 경로}

 

mount namespace /proc/{process id}/ns/mnt에서 확인할 있습니다. 주로 현재 프로세스 id 의미하는 $$ 사용해서 mount namespace 확인합니다.

$ readlink /proc/$$/ns/mnt
mnt:[4026531841]

 

4. 예제

unshare명령어로 /bin/sh쉘을 실행합니다. --mount인자를 설정하여 /bin/sh쉘을 위한 mount namespace 생성합니다.

unshare --mount /bin/sh

 

/bin/sh쉘과 host에서 mount namespace 서로 다른지 확인합니다. unshare명령어를 사용했을 mount namespace 생성했기 때문에, host /bin/sh쉘은 mount namespace 서로 다릅니다.

# host
$ readlink /proc/$$/ns/mnt
mnt:[4026531841]

# unshare /bin/sh
$ readlink /proc/$$/ns/mnt
mnt:[4026532587]

 

이제 /bin/sh쉘에서 mount작업이 정말 다른 mount namespace 영향을 안미치는지 확인해보겠습니다. /bin/sh쉘에서 mount작업을 하고 host에서 mount결과가 보이는지 확인할 겁니다.

 

/bin/sh쉘에서 tmpfs /tmp/mount_test디렉터리에 mount합니다. tmpfs temporary file storage로서 데이터를 임시로 메모리에 저장합니다. 메모리에 저장된 데이터를 /tmp/mount_test mount하면 tmpfs 저장된 데이터가 mount 디렉터리에 보입니다.

$ mkdir /tmp/mount_test
$ mount -t tmpfs tmpfs /tmp/mount_test

 

/bin/sh쉘에서는 mount 목록에 이전에 mount /tmp/mount_test 보입니다.

# /bin/sh
$ df -h | grep mount_test
tmpfs                              482M     0  482M   0% /tmp/mount_test

 

하지만 host에서는 /tmp/mount_test 보이지 않습니다. 왜냐하면 host /bin/sh쉘은 mount namespace 다르기 때문입니다.

# host
$ df -h | grep mount_test
결과 없음

 

5. 참고자료

이하공백

반응형