Entendendo como os namespaces de montagem funcionam no Linux

1

Estou lendo sobre monte namespaces e veja:

in a mount namespace you can mount and unmount filesystems without it affecting the host filesystem. So you can have a totally different set of devices mounted (usually less).

Estou tentando entender namespaces do linux , e o LXC e tal, mas eu não entendo bem o que essa afirmação significa.

O que estou tentando entender é como um contêiner (1) pode ter arquivos como este:

/foo/a.txt
/foo/bar/b.txt

E outro contêiner (2) pode ter arquivos como este:

/foo/a.txt
/foo/x.txt
/foo/bar/b.txt
/foo/bar/y.txt

Onde /foo/a.txt e /foo/bar/b.txt nos contêineres (1) e (2) são o mesmo caminho , mas talvez eles tenham um conteúdo diferente:

# container (1)
cat /foo/a.txt #=> Hello from (1)

# container (2)
cat /foo/a.txt #=> Hello from (2)

Isso significaria que os arquivos no sistema físico (dos quais eu não sei nada) são armazenados de uma maneira, talvez espalhados por toda parte. Mas depois há um banco de dados centralizado de arquivos "virtuais" no sistema operacional , assim:

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)

Em seguida, existe outro banco de dados do sistema operacional para os arquivos físicos que podem ter esta aparência:

drive1:
  dir1:
    foo:
      a.txt
      bar:
        b.txt
  dir2:
    foo:
      a.txt
      x.txt
      bar:
        b.txt
        y.txt

Então, quando você cria um arquivo no container, você está criando 2 novos registros:

  1. 1 para o mapa de arquivos físicos no nível do drive
  2. 1 para o mapa de arquivos virtuais no nível do contêiner

É assim que imagino que funcione. Isto é como eu posso ver que existe uma maneira de (1) apresentar o usuário (em um contêiner LXC ou cgroup (que eu não sei muito sobre)) com o que parece um completo "arquivo" system ", no qual eles podem (2) criar sua própria estrutura de diretório totalmente personalizável (que pode ter os mesmos arquivos / diretórios / caminhos nomeados como um sistema de arquivos virtual completamente diferente), tal que (3) os arquivos de vários diferentes virtuais sistemas de arquivos / containers não se sobrepõem.

Imaginando se é assim que funciona, ou se não funciona realmente (ou um esboço de como funciona).

    
por Lance Pollard 22.08.2018 / 06:21

1 resposta

0

Os namespaces de montagem diferem no arranjo de sistemas de arquivos montados .

Isso é muito flexível, porque as montagens podem ser montagens de um subdiretório dentro de um sistema de arquivos.

# 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

Você pode listar seu conjunto atual de montagens com o comando findmnt .

Em um contêiner completo, a montagem raiz é substituída e você trabalha com uma árvore de montagens totalmente separada. Isso envolve alguns detalhes extras, como a chamada do sistema pivot_root() . Você provavelmente não precisa saber exatamente como fazer isso. Alguns detalhes estão disponíveis aqui: Como executar o chroot com namespaces do Linux?

    
por 22.08.2018 / 09:33