Linux
為什麼重複綁定掛載會為源目錄創建條目?
為什麼重複綁定掛載會在中創建多個條目
/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
在第一次綁定掛載之後,有一個條目將源卷映射到掛載點。在第二次呼叫之後,我們有一個額外的掛載點條目加上一個源前綴條目。
同樣,findmnt報告源綁定安裝到自身:
# 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
再次重複後,我最終得到三個源條目,四個目標條目:
# 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
級數是1, 3, 7, 15, …,即n = 1 + 2^(n-1),導致每次掛載操作的附加條目數加倍。
這是什麼原因?
安裝傳播。
這是“掛載點爆炸問題”的一個具體案例,在mount_namespaces(7)中的“MS_UNBINDABLE 範例”中有說明
systemd 預設情況下有效地啟用掛載傳播。例如,這使得根據systemd.exec選項在
/home
被阻止的子命名空間中執行服務成為可能。通過允許掛載和解除安裝傳播到子命名空間,它可以繼續在主命名空間中正常工作,依此類推。ProtectHome=yes``eject