Файловая система mergerfs

Файловая система mergerfs.

Содержание

1 Общая информация

  • Репозиторий: https://github.com/trapexit/mergerfs
  • FUSE-модуль mergerfs позволяет логически объединить несколько файловых систем в одну.
  • В отличие от aufs и overlayfs в mergerfs не создаётся отдельного слоя для записи и данная ФС не может применяться поверх разделов, доступных в режиме только для чтения.
  • mergerfs даёт возможность прямой записи в примонтированный раздел в соответствии с заданной политикой.
  • Можно включить в один сводный раздел ФС, доступную на запись, и ФС только для чтения.
    • В такой конфигурации операции записи будут производиться в разделе, который допускает запись.

2 Установка

  • Gentoo:
    emerge mergerfs
    

3 Основные опции монтирования

  • category.create=POLICY : распределение новых файлов в зависимости от доступного свободного пространства (по умолчанию epmfs);
  • moveonenospc=true : в случае сбоя записи искать раздел с большим свободным местом;
  • minfreespace=SIZE : минимальное свободное место для записи (по умолчанию установлено 4G);
  • config : путь к файлу конфигурации;
  • moveonenospc=BOOL|POLICY : если эта опция включена, если запись завершается с ошибкой ENOSPC (на устройстве не осталось места) или EDQUOT (превышена дисковая квота);
    • произойдёт попытка переместить файл в новую ветку (с сохранением всех метаданных), и в случае успеха связь с оригиналом будет отсоединена, и запись будет повторена (по умолчанию: false, true = mfs).
  • inodecalc=passthrough|path-hash|devino-hash|hybrid-hash : выбирает алгоритм вычисления индексного дескриптора. (по умолчанию: гибридный hybrid-hash);
  • xattr=passthrough|noattr|nosys : управление xattrs во время выполнения (по умолчанию xattr=passthrough);
  • posix_acl=BOOL : включить поддержку POSIX ACL (по умолчанию: false).

4 Политики размещения файлов

  • all: для mkdir , mknod и symlink это будет применяться ко всем веткам. create работает как ff;
  • epall (существующий путь, все): для mkdir , mknod и symlink это будет применяться ко всем найденным. create работает как epff (но дороже, потому что не останавливается после обнаружения допустимой ветки);
  • epff (существующий путь, найден впервые): учитывая порядок ветвей, определенный во время монтирования или настроенный во время выполнения, действуйте в соответствии с первой найденной веткой, где существует относительный путь;
  • eplfs (существующий путь, минимум свободного места): из всех ветвей, на которых существует относительный путь, выберите ветку с наименьшим количеством свободного места;
  • eplus (существующий путь, наименее используемое пространство): из всех ветвей, в которых существует относительный путь, выберите ветку с наименьшим количеством используемого пространства;
  • epmfs (существующий путь, большая часть свободного места); из всех ветвей, в которых существует относительный путь, выберите ветку с наибольшим количеством свободного места;
  • eppfrd (существующий путь, случайное распределение без процентов); подобно pfrd , но ограничен существующими путями;
  • eprand (существующий путь, случайный): вызывает epall, а затем рандомизирует;
  • ff (впервые найден): учитывая порядок ветвей, определенный во время монтирования или настроенный во время выполнения, действуйте в соответствии с первым найденным;
  • lfs (наименьшее свободное пространство): выберите ветку с наименьшим количеством свободного места;
  • lus (наименее используемое пространство): выберите ветку с наименее используемым пространством;
  • mfs (большая часть свободного места): выберите ветку с наибольшим количеством свободного места;
  • msplfs (наиболее общий путь, минимум свободного места): как и eplfs, но если ему не удастся найти ветку, он попытается еще раз с родительским каталогом;
  • msplus (наиболее общий путь, наименее используемое пространство): как и eplus, но если ему не удастся найти ветку, он попытается еще раз с родительским каталогом;
  • mspmfs (наиболее общий путь, наибольшее свободное пространство): как и epmfs, но если ему не удастся найти ветку, он попытается еще раз с родительским каталогом;
  • msppfrd (наиболее общий путь, случайное распределение без процентов): как и eppfrd, но если ему не удастся найти ветку, он попытается еще раз с родительским каталогом;
  • newest: выберите файл/каталог с наибольшим значением mtime;
  • pfrd (процентное случайное распределение): выбирает ветку случайным образом с вероятностью выбора, основанной на доступном пространстве ветки относительно общего количества;
  • rand (случайный): вызывает all, а затем рандомизирует.

5 Примеры использования

5.1 Монтирование двух дисков

  • Имеем два смонтированных раздела:

    • /mnt/hdd1 : примонтированный диск 1;
    • /mnt/hdd2 : примонтированный диск 2.
  • Смонтируем эти диски с помощью mergerfs, чтобы они выглядели как один большой диск:

    mergerfs -o defaults,category.create=mfs,moveonenospc=true,minfreespace=100M /mnt/hdd1:/mnt/hdd2 /mnt/data
    
  • Запишем в виде fstab:

    /mnt/hdd1:/mnt/hdd2 /mnt/data fuse.mergerfs defaults,category.create=mfs,moveonenospc=true,minfreespace=100M 0 0
    
  • Можно добавить параметры монтируемым дискам:

    /mnt/hdd1=RW,1G:/mnt/hdd2=RW,5G:/mnt/ssd1=RO,1G
    
    • RW: (read/write): поведение по умолчанию;
    • RO: (read-only): смонтированная файловая система доступна только для чтения;
    • NC: (no-create): нельзя создать файлы в этой ветви, но можно изменить или удалить.

Дмитрий Сергеевич Кулябов
Дмитрий Сергеевич Кулябов
Профессор кафедры теории вероятностей и кибербезопасности

Мои научные интересы включают физику, администрирование Unix и сетей.

Похожие