Файловая система mergerfs
Файловая система mergerfs.
Содержание
1 Общая информация
- Репозиторий: https://github.com/trapexit/mergerfs
- FUSE-модуль
mergerfs
позволяет логически объединить несколько файловых систем в одну. - В отличие от
aufs
иoverlayfs
вmergerfs
не создаётся отдельного слоя для записи и данная ФС не может применяться поверх разделов, доступных в режиме только для чтения. mergerfs
даёт возможность прямой записи в примонтированный раздел в соответствии с заданной политикой.- Можно включить в один сводный раздел ФС, доступную на запись, и ФС только для чтения.
- В такой конфигурации операции записи будут производиться в разделе, который допускает запись.
2 Установка
- Gentoo:
1emerge 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
, чтобы они выглядели как один большой диск:1mergerfs -o defaults,category.create=mfs,moveonenospc=true,minfreespace=100M /mnt/hdd1:/mnt/hdd2 /mnt/data
Запишем в виде
fstab
:1/mnt/hdd1:/mnt/hdd2 /mnt/data fuse.mergerfs defaults,category.create=mfs,moveonenospc=true,minfreespace=100M 0 0
Можно добавить параметры монтируемым дискам:
1/mnt/hdd1=RW,1G:/mnt/hdd2=RW,5G:/mnt/ssd1=RO,1G
- RW: (read/write): поведение по умолчанию;
- RO: (read-only): смонтированная файловая система доступна только для чтения;
- NC: (no-create): нельзя создать файлы в этой ветви, но можно изменить или удалить.