Table of Contents
MergerFS - Combine multiple hard drives into a single mountpoint
Objective
To have all media held across various disks under a single mountpoint.
/srv/media |- movies |- music |- photos |- tv
NOTE: /srv/media is the unified mount point.
Download MergerFS
Get the latest release from the MergerFS GitHub page.
wget https://github.com/trapexit/mergerfs/releases/download/2.40.2/mergerfs_2.40.2.debian-bookworm_amd64.deb
NOTE: It is preferred to use the GitHub, rather than from APT repository, as the APT one may not be the most up-to-date version.
sudo apt install mergerfs
- /srv/media: The unified mount point.
Install MergerFS
dpkg -i mergerfs_2.40.2.debian-bookworm_amd64.deb
Try to Manually Mount
mergerfs -o defaults,allow_other,use_ino,category.create=mfs,moveonenospc=true /drive1:/drive2:/drive3 /srv/media
NOTE: The mount point is /srv/media
If after mounting, there are problems with the permissions, Set user_allow_other in /etc/fuse.conf
Try to Access the Mount
cd /srv /srv$ ls -l ls: cannot access 'virt': No such file or directory total 0 d????????? ? ? ? ? ? virt
NOTE: If after mounting, there are problems with the permissions:
- Set user_allow_other in /etc/fuse.conf
Configure fstab
Edit /etc/fstab.
- /etc/fstab
... UUID=b8548ed6-a3e9-44b2-845c-648892491c2d /mnt/media1 ext4 errors=remount-ro 0 0 UUID=c09544b8-0dc3-4532-a1c7-31fd63c8c97e /mnt/media2 ext4 errors=remount-ro 0 0 UUID=347f34a3-b4b1-47c9-bec9-3ea0c4aa3715 /mnt/media3 ext4 errors=remount-ro 0 0 /mnt/media* /srv/media fuse.mergerfs defaults,allow_other,nonempty,moveonenospc=true,dropcacheonclose=true,category.create=epmfs,fsname=mergerfs 0 0 #OLD /mnt/media* /srv/media fuse.mergerfs defaults,allow_other,nonempty,use_ino,moveonenospc=true,dropcacheonclose=true,category.create=mspmfs,fsname=mergerfs 0 0
NOTE: It is recommended to have the mount points for each drive to be /mnt/media1, /mnt/media2, and /mnt/media3, and so on.
- This way by using /mnt/media* for the new mergerfs entry in fstab, it will pick up all the drives and any future ones added that uses the same naming scheme.
- The new unified single mount point will be in /srv/media.
- To get the UUID values for the disks, use
lsblk -d -o NAME,PATH,SIZE,SERIAL,UUID
NOTE: The options used against the bottom line shown in the config are:
- defaults: Use default options.
- The default depends on the kernel and the filesystem.
- allow_other: To make the drive available to regular users.
- nonempty: Mount the filesystem on to an existing (non-empty) directory.
- moveonenospc=true: If a write fails with ENOSPC (no space left on device) or EDQUOT (disk quota exceeded) the policy selected will run to find a new location for the file.
- An attempt to move the file to that branch will occur (keeping all metadata possible) and if successful the original is unlinked and the write retried. (default: pfrd).
- dropcacheonclose=true: When a file is requested to be closed call posix_fadvise on it first to instruct the kernel that we no longer need the data and it can drop its cache.
- Recommended when cache.files=partial|full|auto-full|per-process to limit double caching. (default: false).
- category.create=epmfs: Existing path, most free space.
- OLD category.create=mspmfs: Most shared path, most free space.
- fsname=mergerfs:
Obsolete option:
- use_ino: Causes mergerfs to supply file/directory inodes rather than libfuse.
- While not a default it is recommended it be enabled so that linked files share the same inode value.
- Effectively replaced with inodecalc.
- inodecalc=passthrough|path-hash|devino-hash|hybrid-hash: Selects the inode calculation algorithm. (default: hybrid-hash).
See https://trapexit.github.io/mergerfs/config/options/#types
See https://trapexit.github.io/mergerfs/config/functions_categories_policies/
Created the new mount points
sudo umount /mnt/media1 /mnt/media2 /mnt/media3 mkdir /srv/media
Reboot
sudo reboot
NOTE: The fstab config should take effect and mount the drives to the new mount point.
Check
Check if everything shows up:
ls /srv/media
returns:
movies music photos tvshows
NOTE: The nified mount point should show all the data.