Por que as montagens de ligação repetidas criam entradas para o diretório de origem?

3

Por que uma montagem de ligação repetida cria várias entradas em /proc/mounts ?

# md -p /mnt/test-mount/{source,target}
# mount --bind /mnt/test-mount/{source,target}
# grep test-mount /proc/mounts 
/dev/sda3 /mnt/test-mount/target ext4 rw,relatime 0 0
# mount --bind /mnt/test-mount/{source,target}
# grep test-mount /proc/mounts 
/dev/sda3 /mnt/test-mount/target ext4 rw,relatime 0 0
/dev/sda3 /mnt/test-mount/target ext4 rw,relatime 0 0
/dev/sda3 /mnt/test-mount/source ext4 rw,relatime 0 0

Após a montagem da primeira ligação, havia uma entrada mapeando a origem volume para o ponto de montagem. Após a segunda invocação, temos uma entrada adicional para o ponto de montagem mais uma para a fonte prefixo.

Da mesma forma, findmnt informa que a origem é vinculada à montagem em si:

# findmnt |grep test-mount
├─/mnt/test-mount/target                       /dev/sda3[/mnt/test-mount/source]                ext4            rw,relatime
│ └─/mnt/test-mount/target                     /dev/sda3[/mnt/test-mount/source]                ext4            rw,relatime
└─/mnt/test-mount/source                       /dev/sda3[/mnt/test-mount/source]                ext4            rw,relatime

Após outra repetição, acabo com três entradas para o fonte, quatro para o alvo:

# mount --bind /mnt/test-mount/{source,target
# findmnt |grep test-mount
├─/mnt/test-mount/target                       /dev/sda3[/mnt/test-mount/source]                ext4            rw,relatime
│ └─/mnt/test-mount/target                     /dev/sda3[/mnt/test-mount/source]                ext4            rw,relatime
│   └─/mnt/test-mount/target                   /dev/sda3[/mnt/test-mount/source]                ext4            rw,relatime
│     └─/mnt/test-mount/target                 /dev/sda3[/mnt/test-mount/source]                ext4            rw,relatime
└─/mnt/test-mount/source                       /dev/sda3[/mnt/test-mount/source]                ext4            rw,relatime
  └─/mnt/test-mount/source                     /dev/sda3[/mnt/test-mount/source]                ext4            rw,relatime
    └─/mnt/test-mount/source                   /dev/sda3[/mnt/test-mount/source]                ext4            rw,relatime

A progressão é 1, 3, 7, 15,… , i. e. n = 1 + 2 ^ (n-1) , fazendo com que o número de entradas adicionais dobre com cada operação de montagem.

Qual é o motivo disso?

    
por phg 24.08.2018 / 11:25

1 resposta

3

Monte a propagação.

Este é um caso específico do "problema de explosão do ponto de montagem", explicado no "exemplo MS_UNBINDABLE" em mount_namespaces (7)

O

systemd permite efetivamente a propagação de montagens por padrão. Por exemplo, isso torna viável a execução de um serviço em um namespace filho em que /home esteja bloqueado, conforme systemd.exec opção ProtectHome=yes . Ao permitir montagens e desmontar para propagar para o namespace filho, ele permite que eject continue funcionando corretamente no namespace principal e assim por diante.

    
por 24.08.2018 / 11:45