Proc

Bind-mount 和 cryptsetup 導致 /proc/self/mountinfo 中的根路徑被截斷

  • January 22, 2021

我有一個加密的容器,其中包含一個 ext4 文件系統和一個子目錄,該子目錄在以後的時間點綁定安裝。如果我看一下/proc/self/mountinfo,掛載的根目錄有一個我不知道原因的值。

重現步驟:

cd /tmp
fallocate -l 1G container.luks
cryptsetup luksFormat container.luks
cryptsetup open --type=luks2 container.luks container
mkfs.ext4 /dev/mapper/container
mkdir /mnt/container
mount /dev/mapper/container /mnt/container/
mkdir /mnt/container/subdir
mkdir /tmp/abc
mount -o bind /mnt/container/subdir/ /tmp/abc
cat /proc/self/mountinfo

...
24 1 253:1 / / rw,noatime - ext4 /dev/dm-1 rw
...
56 24 253:5 / /mnt/container rw,relatime - ext4 /dev/mapper/container rw
57 24 253:5 /subdir /tmp/abc rw,relatime - ext4 /dev/mapper/container rw

根據man 5 proc欄位 #4 是

root:文件系統中目錄的路徑名,該目錄構成此掛載的根目錄。

為什麼最後一行的欄位 #4/subdir而不是/mnt/container/subdir?鑑於 mount #57 的資訊,我如何能夠推斷出 mount #57 是 mount #56 的子目錄的綁定掛載?

旁注:umount -R /mnt/container忽略安裝 #57。


鑑於比利叔叔的回答以及對相關手冊頁的多次重讀,我的解釋是/subdir從系統中某個潛在不存在的設備掛載點的根目錄來看253:5。我希望這有點道理。

56 24 253:5 / /mnt/container
57 24 253:5 /subdir /tmp/abc

鑑於 mount 的資訊#57,我如何推斷該 mount#57是 mount 的子目錄的綁定掛載#56

它不是。你沒有推斷出來。

這兩個掛載僅通過相同文件系統/設備的掛載(253:5)相關;並不是說它們中的任何一個都是另一個的“子安裝”或類似的東西。它們彼此獨立。

引用自:https://unix.stackexchange.com/questions/630410