如何将两个单独的文件夹位置安装到一个?

Vla*_*vić 6 mount bind centos-7

我正在尝试将两个不同位置的两个文件夹连接到无线电软件播放音乐的一个文件夹。

这是我到目前为止所做的:

  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
    
    Run Code Online (Sandbox Code Playgroud)
  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
    
    Run Code Online (Sandbox Code Playgroud)

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

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

我想达到的目标有可能吗?如果是这样,有人可以帮助我吗?

Kam*_*ski 4

有可能的。

注意:我在这方面的经验非常有限;以下答案主要基于网络研究,我自己尚未在实践中验证这一点。

一般来说,无论您挂载到 a /foo/bar/mountpoint,它都会完全覆盖 a 之前的内容mountpoint(尽管程序将其已获得的句柄保留为现在的“隐藏”文件,但它们仍然有效)。你的第二个绑定安装就是这样做的。

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

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

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

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

  • 当您直接更改组合目录之一时会发生什么?(示例问题)。

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

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

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

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