상세 컨텐츠

본문 제목

Mount 네임스페이스

운영 체제(OS)/리눅스(Linux)

by Pyidros 2024. 3. 11. 11:15

본문

Mount?? -

컴퓨팅에서 "마운트(Mount)"란 파일 시스템이 운영 체제에 의해 액세스가능하도록 만드는 과정을 말합니다. 이 용어는 주로 운영 체제가 저장 매체(하드 드라이브, SSD, CD-ROM 등) 또는 파일 시스템을 검색하여 사용할 준비를 할 때 사용됩니다. 마운트 과정을 통해 운영 체제는 해당 저장 매체의 파일과 디렉토리를 파일 시스템 트리의 특정 지점에 연결하게 되고, 이후에는 사용자와 다른 프로그램들이 파일 경로를 통해 저장 매체에 접근할 수 있게 됩니다.

예를 들어, 리눅스와 유닉스 계열 시스템에서 USB 드라이브를 컴퓨터에 연결하면 운영 체제는 이를 파일 시스템 트리의 특정 지점에 마운트해야 합니다. 일반적으로 이 과정은 자동으로 이루어지며, 마운트 후에는 사용자가 /media/usbdrive와 같은 경로를 통해 드라이브의 내용을 볼 수 있습니다.

마운트의 반대 과정은 "언마운트(Unmount)"이며, 이는 파일 시스템을 안전하게 제거하여 더 이상 액세스할 수 없게 만드는 것을 말합니다. 이는 데이터 손실을 방지하기 위해 저장 매체를 제거하기 전에 일반적으로 수행됩니다.

 

Mount 네임스페이스는 - 리눅스 커널의 기능 중 하나로, 프로세스 그룹이 파일 시스템 마운트를 별도로 관리할 수 있게 하는 기능입니다. 간단히 말해, mount 네임스페이스는 특정 프로세스나 프로세스 그룹이 시스템의 나머지 부분과 독립적으로 파일 시스템 마운트를 볼 수 있게 합니다.

이는 주로 컨테이너와 같은 가상화 기술에서 중요한 역할을 하며, 다양한 컨테이너가 각기 다른 파일 시스템 뷰를 가질 수 있도록 해줍니다. 컨테이너 A는 특정한 파일이나 디렉토리를 마운트할 수 있고, 컨테이너 B는 완전히 다른 것을 마운트할 수 있습니다. 이들 각각의 마운트는 다른 컨테이너나 호스트 시스템에는 보이지 않습니다.

Mount 네임스페이스는 리눅스의 다른 네임스페이스 기능들과 함께 시스템의 격리와 보안을 강화하는 데 사용됩니다. 예를 들어, PID 네임스페이스는 프로세스 ID를 격리시키고, Network 네임스페이스는 네트워크 인터페이스를 격리시키는 등의 작업을 수행합니다.

1. unshare 명령어 사용하기

unshare 명령어는 실행하는 쉘 또는 프로세스에 대해 새로운 네임스페이스를 생성하여 격리된 환경을 만듭니다.

먼저 unshare --help를 실행하여 사용 가능한 옵션들을 확인합니다. -m 옵션은 새로운 mount 네임스페이스를 생성하는 데 사용됩니다.

2. 새로운 mount 네임스페이스 생성

  • 현재 쉘의 PID(프로세스 ID)를 확인합니다: echo $$
  • unshare -m /bin/bash 명령어를 사용해 새로운 쉘을 시작하고, 이 쉘에 대해 새로운 mount 네임스페이스를 생성합니다.
  • 다시 echo $$를 사용해 새 쉘의 PID를 확인합니다. 이 PID는 이전과 동일할 것입니다. 네임스페이스 격리는 PID 네임스페이스가 아니므로, PID는 변경되지 않습니다.

3. tmpfs 마운트

  • 새로운 mount 네임스페이스 내에서 mount -t tmpfs tmpfs /mnt를 실행하여 tmpfs(임시 파일 시스템)를 /mnt에 마운트합니다.
  • mount | grep /mnt를 실행하여 /mnt에 마운트된 파일 시스템을 확인합니다.

4. 테스트 파일 생성 및 확인

  • /mnt/hello.txt 파일을 생성하고 "Hello"를 내용으로 씁니다: echo "Hello" > /mnt/hello.txt
  • cat /mnt/hello.txt를 사용해 파일의 내용을 확인합니다.

5. 다른 터미널에서 파일 확인 시도

  • 새로운 터미널을 열고 cat /mnt/hello.txt를 실행하여 파일 내용을 확인합니다. 파일이 보이지 않거나 다른 내용이 표시되는 경우, 이는 해당 터미널이 원본 mount 네임스페이스에 있기 때문입니다.

6. nsenter 명령어 사용하기

  • man nsenter를 통해 nsenter 명령어 사용법을 확인합니다. nsenter는 특정 PID의 네임스페이스로 진입하여 커맨드를 실행할 수 있게 해줍니다.
  • nsenter -t $TARGET_PID -a를 실행하여 타겟 PID의 모든 네임스페이스(여기서는 mount 네임스페이스)로 진입한 후 커맨드를 실행할 수 있습니다. $TARGET_PID는 앞서 unshare로 생성한 쉘의 PID입니다.

7. mount 네임스페이스 종료

  • exit 명령어를 사용하여 unshare로 생성한 쉘을 종료합니다. 이로써 새로운 mount 네임스페이스에서 작업한 내용은 종료되며, 원래의 네임스페이스로 돌아갑니다.

  • 네임스페이스를 사용할 때는 현재 작업 중인 네임스페이스를 항상 인식하고 있어야 합니다. 실수로 잘못된 네임스페이스에서 작업할 경우 예상치 못한 결과가 발생할 수 있습니다.
  • unshare와 nsenter는 리눅스 컨테이너를 다루거나 격리된 환경에서 테스트를 실행하는 등 다양한 시나리오에서 유용하게 사용될 수 있습니다.

관련글 더보기