同一分区挂载两次,在每个挂载点上显示不同的内容。这怎么可能?
# 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
Run Code Online (Sandbox Code Playgroud)
同一个分区 ,/dev/block/sda1
被挂载两次,每个挂载点(/data
和/mnt/tmp
)显示不同的内容。
背景:我想修改 GRUB 的menu.lst
文件,在 android-x86 中,该文件似乎只能从 GRUB 的调试模式或通过 mount 的 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
Run Code Online (Sandbox Code Playgroud)
就是这样:
# 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)
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)