介绍

mergerfs 能在逻辑上将多个路径合并在同一个路径下,类似于对集合取并集的操作。所有在统一路径下进行的文件操作,会自动被分散到各个下层的文件系统中执行

下载并安装

centos

wget https://github.com/trapexit/mergerfs/releases/download/2.40.2/mergerfs-2.40.2-1.el9.x86_64.rpm
rpm -i mergerfs-2.40.2-1.el9.x86_64.rpm
rm mergerfs-2.40.2-1.el9.x86_64.rpm

debian12

wget https://github.com/trapexit/mergerfs/releases/download/2.40.2/mergerfs_2.40.2.debian-bookworm_amd64.deb
dpkg -i mergerfs_2.40.2.debian-bookworm_amd64.deb

使用

这里我将创建三个目录: /mnt/disk1/mnt/disk2/mnt/storage ;并将 两块硬盘 /dev/sdd/dev/sdc 分别挂载到 /mnt/disk1/mnt/disk2;再将 /mnt/disk1/mnt/disk2 用 mergerfs 合并到 /mnt/storage ,之后操作文件就在 /mnt/storage 里就可以了

mkdir /mnt/disk1 /mnt/disk2 /mnt/storage

接着查看一下硬盘的 uuid

blkid

image-20230708141854809

将硬盘挂载信息写入 /etc/fstab


echo UUID=06095daa-4084-0549-b573-498a718a0826 /mnt/disk1 ext4 defaults 0 0 >> /etc/fstab
echo UUID=d6136aa7-8f51-4e88-863f-d2f55faa61b9 /mnt/disk2 ext4 defaults 0 0 >> /etc/fstab

再将 mergerfs 也写入 /etc/fstab

echo /mnt/disk1:/mnt/disk2 /mnt/storage fuse.mergerfs defaults,allow_other,minfreespace=10G,fsname=mergerfs,ignorepponrename=true 0 0 >> /etc/fstab

mergerfs 参数

defaults:开启以下 FUSE 参数以提升性能:atomic_o_trunc, auto_cache, big_writes, default_permissions, splice_move, splice_read, splice_write;
allow_other:允许挂载者以外的用户访问 FUSE。你可能需要编辑 /etc/fuse.conf来允许这一选项;
use_ino:使用 mergerfs 而不是 libfuse 提供的 inode,使硬链接的文件 inode 一致;
minfreespace=10G:选择往哪个下层文件系统写文件时,跳过剩余空间低于 10G 的文件系统;
fsname=mergerfs:设置文件系统的名称为 mergerfs,特可以自定义其他名字如mount,df等 。
ignorepponrename=true:重命名文件时,不再遵守路径保留原则,保持原来的存储路径。

更新挂载

mount -a

查看一下挂载情况

image-20230708143940982

已经能看到 mergerfs 挂载情况,mergerfs 容量 = disk1 容量 + disk2 容量,共计 5.4 T

image-20230708144219412

使用 samba 将 /mnt/storage 挂载到 window 上也正确显示容量

×