Mount

這怎麼可能:同一個分區掛載了兩次,每次掛載顯示不同的內容?

  • August 23, 2021

同一個分區掛載了兩次,在每個掛載點上顯示不同的內容。這怎麼可能?

# mkdir /mnt/tmp
# mount -t ext4 -o noatime /dev/block/sda1 /mnt/tmp/

# mount | grep sda1
/dev/block/sda1 on /data type ext4 (rw,seclabel,noatime)
/dev/block/sda1 on /mnt/tmp type ext4 (rw,seclabel,noatime)

# ll /data
drwx------  2 root     root       4096 2021-08-19 18:34 adb
drwxrwxr-x  2 system   system     4096 2021-08-19 18:34 anr
drwxrwx--x  8 system   system     4096 2021-08-21 22:42 app
(...)
drwx--x--x  2 system   system     4096 2021-08-19 18:34 user
drwx--x--x  3 system   system     4096 2021-08-19 18:34 user_de
drwxrwx--x  3 root     root       4096 2021-08-19 18:34 vendor

# ll /mnt/tmp/                                                    
drwxr-xr-x 3 root root 4096 2021-08-19 18:33 android-8.1-r6
drwxr-xr-x 2 root root 4096 2021-08-19 18:33 grub
drwx------ 2 root root 4096 1970-01-01 01:00 lost+found

同一個分區 ,/dev/block/sda1被掛載兩次,每個掛載點 (/data/mnt/tmp) 顯示不同的內容。

背景:我想修改 GRUB 的menu.lst文件,在 android-x86 中,該文件似乎只能通過 GRUB 的調試模式使用,或者通過安裝從 android 本身可用/dev/block/sda1。我這樣做了,然後確實可以訪問menu.lst/mnt/tmp/grub/menu.lst),但是這是如何工作的,以及為什麼/dev/block/sda1根據掛載點顯示不同的內容超出了我的範圍!

[編輯:user488112給出的答案如下]

看起來/data實際上是安裝在/android-8.1-r6/data的子目錄上/dev/block/sda1,而不是安裝在 的“根目錄”上dev/block/sda1# mount不完整(它只顯示設備塊,而不是安裝的“根”):

# egrep '/data|/mnt/tmp' /proc/self/mountinfo                         
18 15 8:1 /android-8.1-r6/data /data rw,noatime shared:3 - ext4 /dev/block/sda1 rw,seclabel
237 28 8:1 / /mnt/tmp rw,noatime shared:23 - ext4 /dev/block/sda1 rw,seclabel

就是這樣:

# cd /tmp
# mkdir foo bar
# mount -B /usr/bin foo
# mount -B /var/log bar
# mount | egrep 'foo|bar'
/dev/sda1 on /tmp/foo type ext4 (rw,relatime,errors=remount-ro)
/dev/sda1 on /tmp/bar type ext4 (rw,relatime,errors=remount-ro)

tl;博士; 該mount命令的輸出在現代版本的 Linux 上不可靠。改為使用cat /proc/self/mountinfo(格式記錄在 中man 5 mountinfo),它還顯示了掛載的“根”,而不僅僅是它的“設備”:

# egrep 'foo|bar' /proc/self/mountinfo 
380 26 8:1 /usr/bin /tmp/foo rw,relatime shared:1 - ext4 /dev/sda1 rw,errors=remount-ro
457 26 8:1 /var/log /tmp/bar rw,relatime shared:1 - ext4 /dev/sda1 rw,errors=remount-ro

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