--- title: "Balance files across multiple disks using MergerFS" date: 2020-01-14T23:10:17-05:00 draft: false tags: [ "Linux", "Storage" ] medium_enabled: true --- [MergerFS](https://github.com/trapexit/mergerfs) is a great filesystem for an expandable storage system in a homelab. Mostly since it allows you to add disks one at a time without having to, for example, resilver a ZFS pool. MergerFS won't be as efficient as a filesystem that stripes your data across disks, but in the case of a disk failure the disks unaffected will still have the files assigned to them. [Plenty](https://blog.linuxserver.io/2017/06/24/the-perfect-media-server-2017/) of other [people](https://web.archive.org/web/20200130103849/https://www.teknophiles.com/2018/02/19/disk-pooling-in-linux-with-mergerfs/) described MergerFS, so I'll keep this post simple. First install MergerFS, ```bash sudo apt install mergerfs ``` The way I have my drives in my homelab setup is to have `/mnt/data/N` where `N` is the number of the drive. Examples: `/mnt/data/1`, `/mnt/data/2`, `/mnt/data/3` This is mainly so that I can use wildcards to capture all the drives at once. Temporary mounting solution: ```bash sudo mergerfs -o defaults,allow_other,use_ino,fsname=data /mnt/data/\* $HOME/data ``` Permanent solution (Edit `/etc/fstab`) ```bash /mnt/data/* /home/user/data fuse.mergerfs defaults,allow_other,use_ino,fsname=data 0 0 ``` Quick summary of options passed | Option | Description | | ----------- | ------------------------------------------------------------ | | defaults | Shortcut for atomic_o_trunc, auto_cache, big_writes, default_permissions, splice_move, splice_read, splice_write | | allow_other | Allows users beside the mergerfs owner to view the filesystem. | | use_ino | MergerFS supplies inodes instead of libfuse | | fsname | Name of the mount as shown in `df` and other tools |