为什么以下可能?
root@pkara-pc01:~# mkdir -p /tmp/shared
root@pkara-pc01:~# mount -t tmpfs -o size=1G mymount /tmp/shared/
root@pkara-pc01:~# mount -t tmpfs -o size=1G mymount /tmp/shared/
root@pkara-pc01:~# mount | grep -i shared
mymount on /tmp/shared type tmpfs (rw,relatime,size=1048576k)
mymount on /tmp/shared type tmpfs (rw,relatime,size=1048576k)
编辑:我问是因为通常情况下,尝试安装已经安装的 fs 应该会失败(?)
$ mkdir -p mydir
/tmp
$ dd if=/dev/zero of=myfile bs=1M count=1000
1000+0 records in
1000+0 records out
1048576000 bytes (1.0 GB, 1000 MiB) copied, 0.563994 s, 1.9 GB/s
/tmp
$ mkfs.ext4 myfile
mke2fs 1.44.1 (24-Mar-2018)
Discarding device blocks: done
Creating filesystem with 256000 4k blocks and 64000 inodes
Filesystem UUID: 95fe153e-a575-4c9a-beef-b7a20a6ae342
Superblock backups stored on blocks:
32768, 98304, 163840, 229376
Allocating group tables: done
Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done
/tmp
$ sudo mount -o loop myfile /tmp/mydir/
/tmp
$ sudo mount -o loop myfile /tmp/mydir/
mount: /tmp/mydir/: /tmp/myfile is already mounted.
请注意,这
tmpfs
是一个虚拟文件系统,因为它没有也不需要后备存储来将其元数据写入其中。相反,它
ext4fs
是一个持久的文件系统,它需要一个后备存储(无论是图像文件还是真正的设备)来写入其元数据。因此,您对该案例的
mount
命令tmpfs
只是重新使用同一目录来安装另一个(尽管还是 tmpfs)完全原始的文件系统。这是允许的,即使该目录已经被用作持久文件系统的挂载点,例如ext4
:第二个mount
只会覆盖以前的文件系统,它会重新出现,就像你卸载第二个文件系统。相反,您对该案例的
mount
命令ext4
是尝试多次将相同的后备存储(文件)安装到相同的安装点,这就是您收到错误消息的原因。myfile
这对于虚拟文件系统永远不会发生,tmpfs
因为它们根本没有(外部)后备存储。事实上mymount
,你的命令tmpfs
只是一个占位符,用于制作mount
's 的语法内容。您可以在那里使用任意字符串作为tmpfs
. 相反,您对 案件myfile
的指挥权必须是ext4
系统上已经存在且可用的东西,它将用作持久文件系统的后备存储(即使您将该后备存储放在实际易失的文件系统中,例如tmpfs
,mkfs.ext4
命令和ext4fs
驱动程序也不知道/关心那)。ext4
但是,还要注意,由于古老的 v2.4 linux 内核,只要将它们挂载到不同的挂载点(即不在与您的示例相同的目录上),就可以安全地挂载多次文件系统)。基本上这样的多个安装的行为就像一个mount --bind
. 但是,值得注意的是,如果块设备是从不同编号loop
的相同支持文件创建的,则无法为块设备获得此行为,这是直到其版本 2.28.x 才有的行为。从 v2.29 开始,它会检测是否要重用相同的支持文件,并将默默地将其转换为等效文件。/dev/loopX
mount -o loop
mount --bind
为了安全起见,不要在同一个备份文件上多次使用 2.28.x 或更低版本
mount
(-o loop
除非您在两者之间卸载它)。可能的结果包括内核崩溃,从而丢失任意数据。