systemd-nspawn vs chroot e bind mount?

0

Será que systemd-nspawn especial para chroot ou apenas um método diferente para executar chroot + as montagens ro --bind adequadas para proc , sys . Os documentos dizem

similar to chroot(1), but more powerful since it fully virtualizes the file system hierarchy, as well as the process tree, the various IPC subsystems and the host and domain name

Não tenho certeza de como esses itens estão definidos,

  • virtualiza a hierarquia do sistema de arquivos

    Não é isso que o chroot altera a raiz?

  • bem como a árvore de processos

    Não tenho certeza do que isso significa.

  • vários subsistemas IPC

    Quais subsistemas? Alguém pode me dizer exatamente o que isso significa?

  • host e nome de domínio

    Eu não tenho certeza do que isso significa também? Não é só /proc/sys/kernel/domainname e /proc/sys/kernel/hostname

Eu usei os scripts chroot e mount --bind . Parece que isso é mais convincente, mas estou embaçado em qualquer funcionalidade adicional. Que coisas novas isso me proporciona?

    
por Evan Carroll 22.07.2018 / 22:00

1 resposta

2

  • virtualiza a hierarquia do sistema de arquivos

Ele usa namespaces de montagem. É mais poderoso que chroot porque você pode montar e desmontar sistemas de arquivos sob o seu namespace e eles ficarão ocultos do lado de fora ou de outros namespaces de montagem.

Dê uma olhada em este artigo nos namespaces do Linux (e, em particular, monte namespaces) para ter uma visão geral do que eles fazem.

  • e também a árvore de processos

Isso significa que você obtém novos números de PID dentro do namespace. PID 1 dentro do namespace pode ser PID 12001 fora dele, PID 40 dentro dele pode estar fora do PID 13987, e assim por diante. Em particular, nem todos os PIDs são mapeados dentro do namespace, portanto, se você usar um comando como ps -ef dentro dele, verá apenas os processos que estão nesse namespace, e não aqueles do lado de fora ou de outros namespaces de pid .

O artigo mencionado acima também oferece uma boa visão geral dos namespaces do PID.

  • vários subsistemas IPC

Memória compartilhada, semáforos ... O material mostrado pelo comando ipcs . Mais uma vez, esse artigo que eu apontei tem um pouco mais sobre isso. (Se você ainda não ouviu falar do SysV IPC ou do comando ipcs , você provavelmente pode ignorar este.)

  • host e nome de domínio

Este é, na verdade, o namespace UTS e, mais uma vez, esse artigo tem mais detalhes.

Ele virtualiza o retorno do comando uname (você pode dar uma olhada em uname -a dentro do contêiner.) Além disso, os comandos hostname e domainname . Sim, os dois arquivos /proc que você mencionou também.

Em suma, isso significa que systemd-nspawn está usando namespaces do Linux para fornecer isolamento de contêiner. Isso também é o que outras tecnologias de contêiner (como o Docker) empregam.

Espero que isso ajude!

    
por 26.07.2018 / 07:31