RAID объединяет диски на уровне блоков — один упавший диск может утянуть за собой весь массив, в зависимости от уровня. mergerfs работает иначе: это FUSE-файловая система, которая просто логически сливает несколько независимых путей в одну точку монтирования, каждый диск остаётся отдельной файловой системой сам по себе.

Запуск — обычный синтаксис mount, диски через двоеточие:

mergerfs -o cache.files=off,category.create=mfs,func.getattr=newest,dropcacheonclose=false /mnt/hdd/disk0:/mnt/hdd/disk1:/mnt/hdd/disk2 /media

/etc/fstab — то же самое одной строкой:

/mnt/hdd/disk0:/mnt/hdd/disk1:/mnt/hdd/disk2 /media mergerfs cache.files=off,category.create=mfs,func.getattr=newest,dropcacheonclose=false 0 0

Главная настройка — category.create, политика выбора диска для новых файлов:

  • mfs (most free space) — класть на диск с максимумом свободного места, самый интуитивный вариант
  • lfs (least free space) — обратное, добивать диски по одному
  • pfrd (proportional fill random distribution) — распределяет пропорционально свободному месту случайным образом, текущая рекомендация проекта по умолчанию — не создаёт паттерна “все новые файлы на одном диске”, который может провоцировать проблемы с mmap на новых ядрах

При удалении файла или изменении атрибутов mergerfs применяет операцию ко всем копиям файла, если он почему-то существует на нескольких дисках сразу — но само создание нового файла всегда идёт только на один диск, выбранный политикой category.create. Никакой репликации данных между дисками mergerfs не делает — это не замена RAID/бэкапа, а именно объединение свободного места и путей в одно дерево каталогов.

Отключение одного диска из массива не роняет остальные — файлы, физически лежавшие на упавшем диске, становятся недоступны, но mergerfs продолжает отдавать всё, что осталось на живых дисках, без падения точки монтирования целиком.

#linux #fuse #mergerfs