为什么我可以(或不能)再次挂载已挂载的设备?怎么了?

为什么我可以(或不能)再次挂载已挂载的设备?怎么了?

为什么我可以(或不能)再次挂载已挂载的设备?怎么了?
例如:

/tmp/test$ sudo mount /dev/sda5 ./1;echo ${?}
0
/tmp/test$ sudo mount /dev/sda5 ./2;echo ${?}
0
/tmp/test$ sudo mount | grep test
/dev/sda5 on /tmp/test/1 type ext4 (rw,relatime,data=ordered)
/dev/sda5 on /tmp/test/2 type ext4 (rw,relatime,data=ordered)
/tmp/test$ sudo umount ./1 ./2;echo ${?}
0
/tmp/test$ sudo losetup
NAME       SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE          DIO
/dev/loop0         0      0         0  0 /tmp/test/grub.iso   0
/tmp/test$ sudo mount /dev/loop0 ./1;echo ${?}
mount: /dev/loop0 is write-protected, mounting read-only
0
/tmp/test$ sudo mount /dev/loop0 ./2;echo ${?}
mount: /dev/loop0 is already mounted or /tmp/test/2 busy
       /dev/loop0 is already mounted on /tmp/test/1
32
/tmp/test$ sudo mount | grep test
/dev/loop0 on /tmp/test/1 type iso9660 (ro,relatime,nojoliet,check=s,map=n,blocksize=2048)
/tmp/test$ 

答案1

看来这个原因是多个位置安装的标志-w-r标志需要相同。

例如(/dev/sda5已经安装-o rw):

$ sudo mount -r ./grub.iso ./1;echo $?
0
$ sudo mount -r ./grub.iso ./2;echo $?
0
$ sudo mount -r ./grub.iso ./3;echo $?
0
$ sudo umount ./1 ./2 ./3;echo $?
0
$ sudo mount -r /dev/sda5 /mnt;echo $?
mount: /dev/sda5 is already mounted or /mnt busy
       /dev/sda5 is already mounted on /home/xx/yy
32

另请参阅男子坐骑伸展:

-w, --rw, --read-write
          Mount the filesystem read/write.  This is the default.  A synonym is -o rw.

这就是(似乎)为什么您可以/dev/sda5使用默认选项安装在多个位置,但不能grub.iso使用默认选项安装在多个位置

答案2

从证据来看:/dev/sda2最初是作为/(文件系统根目录)安装的。但 fstab 已完全禁用,主要挂载是在my_init脚本文件中完成的。第一个挂载添加了原始根文件系统的完整/dev/sda2内容,下一行/home//home/home/通过--bind选项挂载到相同内容,应该隐藏原始根文件系统的其余部分。如果你这样做umount /home/一次,你应该在文件夹中看到(正如我所写的)整个原始根文件系统/home/,即 ls /home/ 然后给出:bin boot dev etc home ...

不要问我为什么有人这样做。

相关内容