내가 읽고 있는 내용은마운트 네임스페이스그리고 확인해 보세요:
마운트 네임스페이스에서는 호스트 파일 시스템에 영향을 주지 않고 파일 시스템을 마운트 및 마운트 해제할 수 있습니다. 따라서 완전히 다른 장치 세트(대개 더 적음)를 설치할 수 있습니다.
나는 이해하려고 노력한다리눅스 네임스페이스, LXC 등이 있는데 위 문장의 의미를 잘 모르겠습니다.
내가 이해하고 싶은 것은 어떻게 컨테이너(1)이 다음과 같은 파일을 가질 수 있는지입니다:
/foo/a.txt
/foo/bar/b.txt
다른 컨테이너(2)에는 다음과 같은 파일이 포함될 수 있습니다.
/foo/a.txt
/foo/x.txt
/foo/bar/b.txt
/foo/bar/y.txt
/foo/a.txt
컨테이너 (1)과 (2)는 위치 와 /foo/bar/b.txt
위치가 동일합니다.길, 하지만 내용이 다를 수도 있습니다.
# container (1)
cat /foo/a.txt #=> Hello from (1)
# container (2)
cat /foo/a.txt #=> Hello from (2)
이는 물리적 시스템의 파일(제가 아는 바는 없음)이 한 가지 방식으로 저장되어 곳곳에 흩어져 있을 수 있음을 의미합니다. 그러나 "더미" 파일의 중앙 집중식 데이터베이스도 있습니다.운영 체제에서, 이와 같이:
db:
container1:
foo:
a.txt: Hello from a from (1)
bar:
b.txt: Hello from b from (1)
container2:
foo:
a.txt: Hello from a from (2)
x.txt: Hello from x from (2)
bar:
b.txt: Hello from b from (2)
y.txt: Hello from y from (2)
그럼 거기 있어요다른실제 파일의 운영 체제 데이터베이스는 다음과 같습니다.
drive1:
dir1:
foo:
a.txt
bar:
b.txt
dir2:
foo:
a.txt
x.txt
bar:
b.txt
y.txt
따라서 컨테이너에 파일을 생성하면 실제로 2개의 새 레코드가 생성됩니다.
- 드라이브 수준 실제 파일 매핑의 경우 1개
- 컨테이너 수준 가상 파일 매핑의 경우 1개
이것이 제가 일하는 방식을 상상하는 것입니다. 이것이 (1) 사용자에게 표시하는 방법이 있다는 것을 보는 방법입니다(LXC 컨테이너 또는 cgroup에서(이에 대해 잘 모릅니다))느낌이 어떤가요(2) 완전히 사용자 정의 가능한 디렉토리 구조(완전히 다른 가상 파일 시스템과 동일한 이름의 파일/디렉터리/경로 사용 가능)를 생성하여 (3) 파일이 서로 다른 여러 파일에서 나올 수 있는 완전한 "파일 시스템" 가상 파일 시스템/컨테이너는 서로 덮어쓰지 않습니다.
그것이 작동하는 방식인지, 그렇지 않은 경우 실제로 작동하는 방식(또는 작동 방식에 대한 개요)이 궁금합니다.
답변1
마운트 네임스페이스가 다르게 배열됨마운트된 파일 시스템.
마운트는 파일 시스템 내 하위 디렉토리의 바인드 마운트가 될 수 있으므로 이는 매우 유연합니다.
# unshare --mount # run a shell in a new mount namespace
# mount --bind /usr/bin/ /mnt/
# ls /mnt/cp
/mnt/cp
# exit # exit the shell, and hence the mount namespace
# ls /mnt/cp
ls: cannot access '/mnt/cp': No such file or directory
이 명령을 사용하여 현재 설치 세트를 나열할 수 있습니다 findmnt
.
전체 컨테이너에서는 루트 마운트가 교체되고 완전히 별도의 마운트 트리가 생성됩니다. 여기에는 pivot_root()
시스템 호출 과 같은 몇 가지 추가 세부정보가 포함됩니다 . 이 작업을 수행하는 방법을 정확히 알 필요는 없을 것입니다. 일부 세부정보는 여기에서 확인할 수 있습니다.Linux 네임스페이스를 사용하여 chroot를 수행하는 방법은 무엇입니까?