如何将两个独立的文件夹位置挂载到一个?

如何将两个独立的文件夹位置挂载到一个?

我正在尝试将来自两个不同位置的两个文件夹连接到一个文件夹,广播软件从该文件夹播放音乐。

这是我目前所做的:

  1. /etc/fstab输入了以下两行:

    /usr/local/centovacast/var/vhosts/adminaw/var/spool/media   /mnt/mounted-drive/awmusic_songs/   none   bind
    /usr/local/centovacast/var/vhosts/adminaw/var/spool/media   /home/centos/awmusic_songs_1/   none   bind
    
  2. 然后我运行了以下两个命令:

    mount --bind /mnt/mounted-drive/awmusic_songs/ /usr/local/centovacast/var/vhosts/adminaw/var/spool/media
    mount --bind /home/centos/awmusic_songs_1/ /usr/local/centovacast/var/vhosts/adminaw/var/spool/media
    

所以基本上,广播软件从 读取音乐/usr/local/centovacast/var/vhosts/adminaw/var/spool/media,歌曲位于文件夹awmusic_songs和中awmusic_songs_1

完成上述操作后,我只看到第二个文件夹(awmusic_songs_1)中的文件(歌曲)。

我所尝试实现的目标有可能实现吗?如果可以,有人能帮助我吗?

答案1

有可能的。

注意:我在这个主题上的经验非常有限;以下答案主要基于网络研究,我自己还没有在实践中验证过这一点。

一般而言,无论您将什么挂载到/foo/bar/mountpoint,它都会完全覆盖 的先前内容mountpoint(尽管程序保留了它们已经获得的现在“隐藏”文件的句柄,但它们仍然有效)。您的第二个绑定挂载就是这样做的。

诀窍是使用将两个或多个目录合并为一个的挂载类型。一般概念称为联合山.有以下几种实现方式:

一般来说,联合可以挂载在组合目录之一上,也可以挂载到完全不同的(最好是空的)挂载点。在我看来,后者是更优雅的解决方案。

在选择适合您需要的联合安装类型时,您可能需要考虑以下一些方面:

  • 其中一些仅作为保险丝,有些已合并到 Linux 内核(在这种情况下,它们可能也有 FUSE 实现)。检查这些安全问题关于FUSE。

  • 当您直接改变其中一个组合目录时会发生什么情况?(示例问题)。

  • 将新文件添加到联合时会发生什么。Mhddfs 似乎有望合并包含媒体文件的目录。检查本文, 它说:

    当您在虚拟文件系统中创建新文件时,mhddfs将查看每个驱动器上剩余的可用空间。如果第一个驱动器有足够的可用空间,则将在第一个驱动器上创建文件。否则,如果该驱动器空间不足(小于选项指定的空间mlimitmhddfs默认为 4 GB),则将使用第二个驱动器。如果该驱动器的空间也不足,则将使用第三个驱动器。如果每个驱动器的可用空间都不足mlimit,则将选择具有最多可用空间的驱动器来存储新文件。

    甚至不止如此;如果某个驱动器在写入过程中用尽了可用空间(假设您尝试在该驱动器上创建一个非常大的文件),写入过程不会失败;mhddfs只会将已写入的数据传输到另一个驱动器(具有更多可用空间)并继续写入。所有这些对于写入文件的应用程序来说都是完全透明的(它甚至不知道发生了什么)。

    我不知道其他实现如何处理这个问题。我猜测它们最初是为了将可写的文件系统与只读的文件系统结合起来而创建的(比如这个问题),因此在 (重新) 分发文件时,它们中的任何一个可能都不如 mhddfs 灵活。不过我不确定,你可能想自己测试一下。

相关内容