将ubuntu设置为NAS——14.尝试mergerfs合并多个物理硬

2021-10-18 15:35:41 30点赞 90收藏 19评论

创作立场声明:本人小白,只是想通过本平台记录一些折腾以Ubuntu系统为主的NAS过程,同时方便自己查阅,还能赚点金币,于是就有了这个小系列。

前言

之前发文简单介绍了在Ubuntu下的新增硬盘挂载方案,评论区有大佬提到了mergerfs,简单百度了一下,发现是个神器,于是就有了这篇文章。利用这个软件,我实现了多块物理硬盘(可以是不同格式)合并到一个分区文件夹中进行管理,后面又利用此软件实现外接USB3.0的移动硬盘与内部硬盘合并为一个分区文件夹。

1、mergefs介绍

mergerfs是一个联合文件系统,旨在简化众多存储设备中文件的存储和管理。它类似于mhddfs,unionfs和aufs。

如果你想在一个媒体项目中用到了多个磁盘或分区,不想丢失任何现有数据,但又想将所有文件都存放在一个驱动器下,该怎么办?这时,mergerfs 就能派上用场!

从我的感受就是mergerfs+snapraid能实现类似unRAID的硬盘管理方式,我个人不喜欢采用冗余盘来做数据校验保证数据的安全性,一般我是重要数据冷备份方式,或是多处硬盘数据同步,不重要的数据也没有备份的必要。比如重要照片在NAS系统存储,再同步到私人PC电脑上,隔段时间冷备份到移动硬盘。所以我就直接采用mergerfs,不需要snapraid校验保证数据。如果你需要数据校验等功能,需要再安装snapraid校验保证数据。

通过mergerfs,能将多个物理硬盘组成一个分区文件夹,可以是不同格式,比如ext4ntfs混合为一个分区文件夹,当我需要拆出其中硬盘时,也能保证不破坏硬盘数据,还能在其他电脑里把数据拷贝出来。新买硬盘或是想把现有数据的硬盘加到NAS,还能在不清除数据的情况,不需要格式化为ext4,挂载到同一分区文件夹中利用Ubuntu进行管理,这对管理媒体文件,是很方便的。

2、mergerfs安装

mergerfs 官网,里面安装方法很仔细,还有详细的设置,不过确实看着很复杂。试试安装看吧

方法一:直接安装(本人推荐)

当然最简单的安装方法是

sudo apt install mergerfs

方法二:新建mergefs文件夹,并进入此文件夹

mkdir mergerfs
cd ./mergerfs

下载最新版mergefs,目前这次尝试我用的是我的超级蜗牛,安装了 Ubuntu 20.04,找到合适版本如下,其他系统请下载其他版本(比如 Ubuntu 18.04 用mergerfs_2.32.6.ubuntu-bionic_amd64.deb)

wget https://github.com/trapexit/mergerfs/releases/download/2.32.6/mergerfs_2.32.6.ubuntu-focal_amd64.deb

安装

sudo dpkg -i ../mergerfs_2.32.6.ubuntu-focal_amd64.deb

图上是2.31.0版本(之前安装截图的),最新是2.32.6图上是2.31.0版本(之前安装截图的),最新是2.32.6

3、mergerfs挂载硬盘

首先查看NAS服务器下的硬盘情况

sudo fdisk -l

本机硬盘挂载情况本机硬盘挂载情况

目前我的硬盘主要是1块64G固态做系统,2块500G机械硬盘主做存储。

查看硬盘的UUID

sudo blkid

查看硬盘的UUID查看硬盘的UUID

64G固态硬盘为sda2, UUID="add73d6a-c780-4922-854e-0007631dc53e" TYPE="ext4" PARTUUID="b2b48c97-e412-479d-8b91-56820d093018"

其中一块500G机械硬盘为 sdb1, UUID="32F057E6F057AF3B" TYPE="ntfs" PARTUUID="e80b2b83-01"

另外一块500G机械硬盘为sdc1,UUID="5E1578FC2B456847" TYPE="ntfs" PARTLABEL="Basic data partition" PARTUUID="6515ebc5-76ee-4c93-a629-431ff7aabdfa"

准备硬盘挂载点,计划挂载载/mnt目录下面

sudo mkdir /mnt/disk{1,2}
sudo mkdir /mnt/all

其中disk1和disk2用于挂载2个机械硬盘,all用来mergerfs合并分区。

编辑fstab将分区信息写到/etc/fstab 文件中让它永久挂载。

sudo nano /etc/fstab

添加如下内容:

# /mnt new harddisk
UUID=32F057E6F057AF3B /mnt/disk1 ntfs defaults
UUID=D61DFC12BB32EDB9 /mnt/disk2 ntfs defaults

# mergerfs storage combine data harddrives into single storage
/mnt/disk* /mnt/all fuse.mergerfs defaults,allow_other,minfreespace=10G,fsname=mergerfs,ignorepponrename=true 0 0

添加内容添加内容

其中最重要的是mergerfs相关命令

fuse.mergerfs defaults,allow_other,minfreespace=10G,fsname=mergerfs,ignorepponrename=true 0 0

简单介绍一下上述参数的意义。

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:重命名文件时,不再遵守路径保留原则,保持原来的存储路径。

填好上面内容后,ctrl+O保存(输入Y确认),ctrl+X退出。

对磁盘挂载分区进行更新挂载

sudo mount -a

再查看挂载情况

df -TH

再查看挂载情况再查看挂载情况

已经能看到挂载各个硬盘,以及mergerfs挂载情况,mergerfs容量 = disk1容量 + disk2容量,共计 995 G 。

4、合并移动硬盘

购入移动12T西数硬盘,准备也合并起来,考虑USB3.0传输速度问题也不大,并且对蜗牛的NAS的供电不是太信任,直接接USB3.0,而不是拆出来使用,还是用原来的西数硬盘盒,再将移动硬盘挂载合并使用。

准备硬盘挂载点,还是挂载/mnt目录下面

sudo mkdir /mnt/disk3

查看移动硬盘信息

sudo blkid

查看移动硬盘信息查看移动硬盘信息

重点记住UUIDTYPE

编辑fstab将分区信息写到/etc/fstab 文件中让它永久挂载。

sudo nano /etc/fstab

编辑fstab将分区信息编辑fstab将分区信息

保存退出后,对磁盘挂载分区进行更新挂载

sudo mount -a

如果出现问题,可能是USB已经自动挂载了,再挂载后出现重复挂载的情况,那就重启一下NAS服务器。

fuse: mountpoint is not empty
fuse: if you are sure this is safe, use the 'nonempty' mount option

重启ubuntu服务器后,查看mnt/all容量,已经有12.7T了,挂载成功。

查看mnt/all容量查看mnt/all容量

局域网测试移动文件

局域网测试移动文件局域网测试移动文件

基本达到了局域网千兆网速要求,这样的分区设置,基本对硬盘速度没有。后期使用过程,这样的分区设置,部分文件移动还是会有些影响,可以微调mergerfs相关命令,不过目前本文使用的这个默认命令,已经可以满足大部分应用场景需求。如要调整请参照官网说明

总结

通过尝试mergerfs管理磁盘,合并多个物理磁盘为同一挂载文件,方便了文件管理。之前有小伙伴提到mergerfs影响磁盘性能,经过简单测试,并没有这个问题。我理解本软件实现的只是不同物理硬盘的映射方式,对硬盘本身是没有影响的,即不能加速,也不会减速。

参考

mergerfs官网:https://github.com/trapexit/mergerfs

https://forums.serverbuilds.net/t/setting-up-media-server-using-ubuntu-and-snapraid/239/2

WZYBOY'S BLOG

展开 收起
19评论

  • 精彩
  • 最新
  • 这个跟raid1有什么区别么? 不是很懂, 如果其中一个硬盘坏了, 数据会怎样?

    校验提示文案

    提交
    不一样的,这个数据之间没有影响,坏了就是坏那块硬盘上的数据

    校验提示文案

    提交
    这是存储池,其实硬盘还是分开的,只是统一管理了

    校验提示文案

    提交
    收起所有回复
  • 好东西,不过这样子是不是只能在ubuntu下面管理文件了?威联通里面还能管理文件吗

    校验提示文案

    提交
    威联通里面没试过,但挂载的原理上讲,只要选择路径是合并后,还是能管理的

    校验提示文案

    提交
    好家伙,我一直以为你的文章是基于威联通的,原来我看错标题了 [皱眉]

    校验提示文案

    提交
    收起所有回复
  • 这个如果坏一块硬盘其他的硬盘还能读么?

    校验提示文案

    提交
    可以用的,其他不受影响

    校验提示文案

    提交
    收起所有回复
  • 我是用lvm给三块硬盘创建了一个卷组,挂载后也可以像一块硬盘一样管理,而且还可以给卷组增加ssd缓存,不知道和你这个有什么区别。

    校验提示文案

    提交
    lz应该是不知道lvm这么好的东西吧

    校验提示文案

    提交
    收回刚刚的发言 这个mergerfs还是有很意思的!

    校验提示文案

    提交
    还有1条回复
    收起所有回复
  • 支持一下。很不错

    校验提示文案

    提交
  • 和lvm有啥区别?

    校验提示文案

    提交
    lvm 是无法直接将物理驱动器移出 存储池的。用这个可以把驱动器直接拔下来,插到别的设备上,里面的数据照常使用

    校验提示文案

    提交
    收起所有回复
  • 好东西,早知道这个我就不花钱买Windows的StableBit DrivePool了

    校验提示文案

    提交
    StableBit DrivePool有学习版 [邪恶]

    校验提示文案

    提交
    早就不用啦,十年前买的,现在换truenas已经快3年了 [喜极而泣]

    校验提示文案

    提交
    收起所有回复
  • mount --bind original_path new_path,也可以在/etc/fstab加 original_path new_path none rw,bind 0 0 直接开机自动挂载

    校验提示文案

    提交
提示信息

取消
确认
评论举报

相关文章推荐

更多精彩文章
更多精彩文章
最新文章 热门文章
90
扫一下,分享更方便,购买更轻松