我们只能将挂载目录绑定到目录、文件绑定到文件吗?

我们只能将挂载目录绑定到目录、文件绑定到文件吗?

http://man7.org/linux/man-pages/man2/mount.2.html

mount() 附加由 source 指定的文件系统(通常是指设备的路径名,但也可以是目录或文件的路径名,或者是虚拟字符串) 到目标中路径名指定的位置(目录或文件)。

我测试了一下,其中 test.ext4 是一个 ext4 图像文件,mnt 只是一个普通的普通文件。

在任何事情发生之前

 xtricman@archlinux  ~  ls mnt test.ext4 -ali
1093586 -rw-r--r-- 1 xtricman users        0 2月  27 10:13 mnt
1085615 -rw-r--r-- 1 xtricman users 16777216 2月  24 19:35 test.ext4

将挂载目录绑定到文件,失败

 xtricman@archlinux  ~  sudo mount --bind /var mnt
mount: /home/xtricman/mnt: mount point is not a directory.

mount创建一个循环设备并(不是绑定)将设备安装到文件,失败

 xtricman@archlinux  ~  sudo mount test.ext4 mnt
mount: /home/xtricman/mnt: mount point is not a directory.

将挂载文件绑定到目录,失败

 xtricman@archlinux  ~  sudo mount --bind test.ext4 /mnt
mount: /mnt: mount(2) system call failed: 不是目录.

将挂载文件绑定到文件,成功!

 xtricman@archlinux  ~  sudo mount --bind test.ext4 mnt
 xtricman@archlinux  ~  ls -ali mnt test.ext4
1085615 -rw-r--r-- 1 xtricman users 16777216 2月  27 10:16 mnt
1085615 -rw-r--r-- 1 xtricman users 16777216 2月  27 10:16 test.ext4
 xtricman@archlinux  ~  sudo umount mnt
 xtricman@archlinux  ~  echo "Trash" >  new_file
 xtricman@archlinux  ~  ls -ali new_file mnt test.ext4 
1093586 -rw-r--r-- 1 xtricman users        0 2月  27 10:13 mnt
1093810 -rw-r--r-- 1 xtricman users        6 2月  27 10:58 new_file
1085615 -rw-r--r-- 1 xtricman users 16777216 2月  27 10:16 test.ext4
 xtricman@archlinux  ~  sudo mount --bind new_file mnt
 xtricman@archlinux  ~  ls -ali new_file mnt test.ext4
1093810 -rw-r--r-- 1 xtricman users        6 2月  27 10:58 mnt
1093810 -rw-r--r-- 1 xtricman users        6 2月  27 10:58 new_file
1085615 -rw-r--r-- 1 xtricman users 16777216 2月  27 10:16 test.ext4

那么,我们真的只能绑定挂载目录到目录、文件到文件吗? “虚拟字符串”是什么意思?作为源或目标的不存在的路径不会简单地失败吗?

相关内容