Уважаемый pon4ik, поднял недавно тут тему как сделать так, чтобы «ФС ... хранила бы метаданные на одном диске, а сами данные на втором. Т.е. пока происходят всякие listdir и fstat не было обращений к харду и он мог сладко спать.»
Я вспомнил, что об XFS слышал подобное, быстро нагуглил пару ссылок про realtime раздел и кинул в коментариях. Но так-как я XFS-boy, то полез смотреть как оно реализовано. Рапортую). Realtime раздел у XFS — это дополнительный раздел на который пишутся только данные (не inode'ы и не лог — первые пишутся на основной раздел, вторые или на него же или на отдельный раздел, если указать). Соответственно можно вынести данные в больших файлах с последовательным доступом на один раздел, а все IOPS'затратные операции на другой раздел на SSD или даже в оперативке (если сохранность данных нужна только до перезагрузки, бывает такое).
Как реализовать:
mkfs.xfs -r rtdev=/dev/sdb /dev/sdc
mkfs.xfs -l logdev=/dev/sdd -r rtdev=/dev/sdb /dev/sdc
Где:
/dev/sdb — realtime раздел (только файлы и только если об этом «попросить», об этом ниже)
/dev/sdc — основной раздел (файлы, inode'ы, log)
/dev/sdd — раздел для log'а ФС
Лог раздел имеет ограничение по размерам. Поэтому легче его не выносить, учитывая что мы и так выносим от «главного» раздела файлы.
Далее монтируем:
mount -o rtdev=/dev/sdb /dev/sdc /mnt
mount -o logdev=/dev/sdd,rtdev=/dev/sdb /dev/sdc /mnt
Как заставить систему писать файлы на realtime раздел? Есть 3 варианта:
- 1. Опция
— это недокументированная опция, которая говорит, что на созданной ФС все файлы будут писаться на Realtime раздел.
mkfs.xfs -d rtinherit=1
- 2. Команда — ставит на директорию атрибут «realtime inheritance». Все файлы созданные после этого в директории будут записаны в rt раздел. Атрибут можно ставить на директорию в которую примантирована ФС (и даже на ней атрибут сохраняется после перемонтирования).
xfs_io -c "chattr +t" /mnt/
- 3. Команда — ставит на файл атрибут «the realtime». Файл должен быть создан пустым для этого (touch /mnt/file_name подходит).
xfs_io -c "chattr +r" /mnt/file_name
Какова стабильность решения? После обсуждения год назад патчей для realtime разделов (подробнее тут: https://patchwork.kernel.org/patch/9933237/ ), началось активное тестирования этого функционала в XFS, были исправлены несколько багов, а в xfstests добавлен функционал по тестированию ФС с realtime разделом.