这篇文章上次修改于 1603 天前,可能其部分内容已经发生变化,如有疑问可询问作者。 如果你没有使用zfs或者lvm来管理磁盘分区,当存储增长到一定极限而你又不想做大的迁移来保持存储位置不变时,除了传统的bind方式挂载以外,还有一个可选项,这时,mergefs 就能派上用场! mergerfs 是一个联合文件系统,旨在简化存储和管理众多商业存储设备上的文件。 你需要从他们的 [GitHub](https://github.com/trapexit/mergerfs "GitHub") 页面获取最新的安装包 ### 安装 ``` apt-get install mergerfs ``` ### 使用 现在,你可以将多个磁盘挂载为一个驱动器。如果你有一台媒体服务器,并且希望所有媒体文件都显示在一个地方,这将很方便。如果将新文件上传到系统,那么可以将它们复制到 mergefs 目录,mergefs 会自动将它们复制具有足够可用空间的磁盘上。 ``` $ df -hT | grep disk /dev/sdb1 ext4 23M 386K 21M 2% /disk1 /dev/sdc1 ext4 44M 1.1M 40M 3% /disk2 $ ls -l /disk1/Videos/ total 1 -rw-r--r--. 1 curt curt 0 Mar 8 17:17 Our Wedding.mkv $ ls -l /disk2/Videos/ total 2 -rw-r--r--. 1 curt curt 0 Mar 8 17:17 Baby's first Xmas.mkv -rw-rw-r--. 1 curt curt 0 Mar 8 17:21 Halloween hijinks.mkv ``` 在此例中挂载了两块磁盘,分别为 `disk1` 和 `disk2`。两个驱动器都有一个包含文件的 `Videos` 目录。 现在,我们将使用 mergefs 挂载这些驱动器,使它们看起来像一个更大的驱动器。 ``` $ sudo mergerfs -o defaults,allow_other,use_ino,category.create=mfs,moveonenospc=true,minfreespace=1M /disk1:/disk2 /media ``` mergefs 手册页非常庞杂,因此我们将说明上面提到的选项。 - `defaults`:除非指定,否则将使用默认设置。 - `allow_other`:允许 sudo 或 root 以外的用户查看文件系统。 - `use_ino`:让 mergefs 提供文件/目录 inode 而不是 libfuse。虽然不是默认值,但建议你启用它,以便链接的文件共享相同的 inode 值。 - `category.create=mfs`:根据可用空间在驱动器间传播文件。 - `moveonenospc=true`:如果启用,那么如果写入失败,将进行扫描以查找具有最大可用空间的驱动器。 - `minfreespace=1M`:最小使用空间值。 - `disk1`:第一块硬盘。 - `disk2`:第二块硬盘。 - `/media`:挂载驱动器的目录。 看起来是这样的: ``` $ df -hT | grep disk /dev/sdb1 ext4 23M 386K 21M 2% /disk1 /dev/sdc1 ext4 44M 1.1M 40M 3% /disk2 $ df -hT | grep media 1:2 fuse.mergerfs 66M 1.4M 60M 3% /media ``` 你可以看到现在 mergefs 挂载显示的总容量为 66M,这是两块硬盘的总容量。 ### 测试 有一个叫 Baby's second Xmas.mkv 的 30M 视频。让我们将其复制到用 mergerfs 挂载的 /media 文件夹中。 ``` $ ls -lh "Baby's second Xmas.mkv" -rw-rw-r--. 1 curt curt 30M Apr 20 08:45 Baby's second Xmas.mkv $ cp "Baby's second Xmas.mkv" /media/Videos/ $ df -hT | grep disk /dev/sdb1 ext4 23M 386K 21M 2% /disk1 /dev/sdc1 ext4 44M 31M 9.8M 76% /disk2 $ df -hT | grep media 1:2 fuse.mergerfs 66M 31M 30M 51% /media ``` 从磁盘空间利用率中可以看到,因为 disk1 没有足够的可用空间,所以 mergefs 自动将文件复制到 disk2。 这是所有文件详情: ``` $ ls -l /disk1/Videos/ total 1 -rw-r--r--. 1 curt curt 0 Mar 8 17:17 Our Wedding.mkv $ ls -l /disk2/Videos/ total 30003 -rw-r--r--. 1 curt curt 0 Mar 8 17:17 Baby's first Xmas.mkv -rw-rw-r--. 1 curt curt 30720000 Apr 20 08:47 Baby's second Xmas.mkv -rw-rw-r--. 1 curt curt 0 Mar 8 17:21 Halloween hijinks.mkv $ ls -l /media/Videos/ total 30004 -rw-r--r--. 1 curt curt 0 Mar 8 17:17 Baby's first Xmas.mkv -rw-rw-r--. 1 curt curt 30720000 Apr 20 08:47 Baby's second Xmas.mkv -rw-rw-r--. 1 curt curt 0 Mar 8 17:21 Halloween hijinks.mkv -rw-r--r--. 1 curt curt 0 Mar 8 17:17 Our Wedding.mkv ``` 当你将文件复制到 mergefs 挂载点时,它将始终将文件复制到有足够可用空间的硬盘上。如果池中的所有驱动器都没有足够的可用空间,那么你将无法复制它们。 另外,还能结合snapraid实现用户空间级的数据冗余 via: - https://fedoramagazine.org/using-mergerfs-to-increase-your-virtual-storage/ - https://linux.cn/article-12207-1.html - https://www.snapraid.it/manual
没有评论