Файловую систему выбирают по профилю нагрузки. Для простого файлового сервера с Linux обычно начинают сравнение с ext4 и XFS. Для NAS, где нужны снапшоты, компрессия и контроль целостности, в список кандидатов добавляют Btrfs и ZFS. Для виртуализации решающими становятся случайный ввод-вывод, хвостовые задержки и поведение CoW при работе с образами виртуальных машин. Для базы данных нужно отдельно измерять fsync, синхронную запись и latency журнала транзакций.
Универсального победителя среди ext4, XFS, Btrfs и ZFS нет. ext4 подходит как предсказуемая базовая точка, XFS часто рассматривают для крупных файлов и параллельного доступа, Btrfs выбирают ради CoW, снапшотов и компрессии, а ZFS оценивают вместе с пулом, кэшем, защитой данных и функциями хранения. Итог зависит от накопителей, RAID или конфигурации пула, объема памяти, параметров монтирования и самого приложения.
Корректный выбор дает тест на сопоставимом стенде. Сравнивать нужно throughput, IOPS, среднюю и хвостовую latency, операции с метаданными, синхронную запись, работу после заполнения хранилища и влияние снапшотов. Линейная скорость чтения сама по себе не отвечает на вопрос, какая файловая система лучше для NAS, виртуализации или базы данных.
Краткий вывод: какую файловую систему выбрать под вашу нагрузку
Быстрый выбор: ext4, XFS, Btrfs или ZFS
Используйте следующую карту выбора как стартовую гипотезу для теста:
| Файловая система | Сильные стороны | Ограничения | Что проверить |
|---|---|---|---|
| ext4 | Понятная эксплуатация, широкое применение в Linux, удобная базовая точка сравнения | Меньше встроенных функций хранения, чем у CoW-систем | Случайную запись, fsync, метаданные и работу при высокой параллельности |
| XFS | Крупные файлы, параллельный доступ, файловые серверы и хранилища с большими объемами | Итог сильно зависит от размера файлов, числа клиентов и настроек окружения | Последовательную запись, операции с каталогами, смешанный ввод-вывод и latency |
| Btrfs | Copy-on-write, снапшоты, компрессия и удобная работа с изменяемыми наборами данных | Перезапись, фрагментация и образы виртуальных машин требуют отдельных тестов | Сценарии с CoW, снапшотами, компрессией и большим числом мелких файлов |
| ZFS | Пулы, контроль целостности, снапшоты, компрессия и комплексное управление хранением | Больше параметров для настройки, а результат зависит от памяти, пула и кэшей | Геометрию пула, ARC, тип дисков, recordsize, синхронную запись и восстановление |
Для простого файлового сервера начните с ext4 или XFS и сравните их на реальных профилях SMB или NFS. Для NAS со снапшотами и проверкой целостности тестируйте Btrfs и ZFS вместе с конкретной схемой пула. Для виртуализации измеряйте работу образов дисков под параллельной случайной нагрузкой. Для базы данных сравнивайте ext4 и XFS на одинаковой СУБД, а Btrfs и ZFS проверяйте только с учетом CoW, снапшотов, компрессии и требований к fsync.
Почему результаты бенчмарка нельзя переносить на любую систему
Одинаковая файловая система может показывать разные результаты на HDD, SATA SSD и NVMe. На итог влияют следующие параметры:
- тип накопителя, его контроллер, кэш и ресурс записи;
- один диск, аппаратный RAID, программный RAID или пул ZFS;
- объем оперативной памяти и состояние page cache;
- размер блока, глубина очереди и количество рабочих потоков;
- доля чтения и записи в смешанном профиле;
- синхронные операции, fsync и требования к подтверждению записи;
- размер файлов, количество каталогов и частота операций с метаданными;
- SMB, NFS, локальный доступ, гипервизор или драйвер СУБД;
- свободное место, фрагментация и число накопленных снапшотов;
- версия ядра, файловой системы и утилит пользовательского пространства.
Публикация с одной цифрой throughput не описывает поведение системы под рабочей нагрузкой. Для сетевого NAS локальный тест может оказаться быстрее канала: на линии 1 Гбит/с теоретический предел передачи составляет около 125 МБ/с до учета протокольных расходов. Для базы данных важнее latency fsync и стабильность p99, чем максимальная скорость последовательной записи.
Как сравнивать производительность файловых систем корректно
Какие операции измерять: последовательное и случайное чтение и запись
Тестовую матрицу разделите на несколько независимых профилей. Каждый профиль отвечает на отдельный вопрос.
| Профиль | Пример параметров | Практический сценарий |
|---|---|---|
| Последовательное чтение | Большой блок, один или несколько потоков | Медиафайлы, архивы, резервные копии |
| Последовательная запись | Большой блок, отдельный чистый набор данных | Создание образов, экспорт, потоковая запись |
| Случайное чтение | Мелкий блок, несколько потоков, разные глубины очереди | Индексы, каталоги, активные образы ВМ |
| Случайная запись | Мелкий блок, смешанная параллельная нагрузка | Транзакционные данные, виртуальные диски |
| Смешанный ввод-вывод | Например, 70% чтения и 30% записи | Общий сервер с конкурирующими клиентами |
| Синхронная запись | fsync или fdatasync после операций | Журнал транзакций и гарантированная доставка данных |
| Метаданные | Создание, удаление, stat, rename, поиск | Проекты с большим числом мелких файлов |
Большие блоки помогают оценить пропускную способность. Мелкие блоки показывают IOPS и задержки. Смешанный профиль выявляет конкуренцию между потоками. Метаданные нужно проверять отдельно, поскольку тест последовательной записи файла не показывает стоимость создания и удаления тысяч объектов.
Для базы данных разделяйте тест набора данных и журнала транзакций. Для NAS добавляйте прогон через SMB и NFS. Для виртуализации запускайте нагрузку внутри нескольких ВМ и сравнивайте ее с локальным тестом на хосте.
Параметры fio и контроль условий эксперимента
fio позволяет зафиксировать размер блока, глубину очереди, количество потоков, длительность и режим кэширования. Тестовую директорию размещайте на отдельном томе. Команды записи нельзя запускать на каталоге с рабочими данными.
fio --name=seq-write --filename=/mnt/test/fio.bin --size=20G --rw=write --bs=1M --iodepth=16 --numjobs=1 --direct=1 --runtime=60 --time_based --group_reporting
fio --name=seq-read --filename=/mnt/test/fio.bin --size=20G --rw=read --bs=1M --iodepth=16 --numjobs=1 --direct=1 --runtime=60 --time_based --group_reporting
fio --name=rand-mix --filename=/mnt/test/fio-rand.bin --size=20G --rw=randrw --rwmixread=70 --bs=4k --iodepth=32 --numjobs=4 --direct=1 --runtime=120 --time_based --group_reporting
fio --name=sync-write --filename=/mnt/test/fio-sync.bin --size=4G --rw=write --bs=4k --iodepth=1 --numjobs=1 --direct=1 --fsync=1 --runtime=60 --time_based --group_reporting
Эти команды дают каркас теста, а не готовый рейтинг. Для каждой файловой системы зафиксируйте версию ядра, параметры монтирования, размер тестового набора, схему RAID или пула и состояние кэша. Профиль с direct=1 уменьшает влияние page cache, но его нужно дополнить отдельным тестом обычного buffered I/O, если приложение использует системный кэш.
Размер набора для измерения накопителя должен превышать доступный page cache, например в 2-4 раза. Отдельно запускайте тест на свежем томе и после заполнения хранилища до 70-80%. Для Btrfs и ZFS указывайте состояние снапшотов, компрессии и фоновых задач. Для RAID фиксируйте число дисков, уровень массива и размер stripe.
Методику подбора тестов можно дополнить материалом об инструментах нагрузочного тестирования серверов и инфраструктуры. Практические примеры fio и сравнение дисковых конфигураций собраны в руководстве по производительности дисковых подсистем.
Какие показатели важнее максимальной скорости
Throughput показывает объем данных в секунду. Он полезен для больших файлов, архивов и резервных копий. IOPS отражает число операций ввода-вывода в секунду и нужен для мелких блоков. Latency показывает, сколько занимает отдельная операция.
Средняя latency скрывает редкие, но болезненные задержки. Смотрите p95, p99 и p99.9, если нагрузка чувствительна к остановкам. Для СУБД скачок p99 при fsync может быть важнее высокой средней пропускной способности. Для виртуализации стабильность задержек под несколькими ВМ обычно полезнее результата одного потока.
- Сравнивайте медиану, среднее значение и хвостовые перцентили.
- Фиксируйте IOPS и throughput одновременно.
- Записывайте загрузку CPU, особенно при включенной компрессии.
- Измеряйте просадку после прогрева и при заполнении хранилища.
- Повторяйте каждый профиль минимум 3 раза и сравнивайте разброс.
- Проверяйте восстановление после аварийной остановки на копии тестового стенда.
Метрики IOPS, пропускной способности и задержек полезно связать с расчетом требуемой СХД в практическом руководстве по производительности хранилищ.
Что именно влияет на скорость: журналирование, CoW, снапшоты и метаданные
Журналирование и стоимость надежной записи
Последовательная запись и синхронная запись создают разные условия. При последовательной записи приложение может передавать крупные блоки, а файловая система и накопитель объединяют операции. При fsync приложение ждет подтверждения, что данные или изменения метаданных достигли требуемого уровня надежности.
Журналирование добавляет служебные операции. Их стоимость особенно заметна при мелких изменениях, создании файлов и транзакционной записи. Результат зависит от режима журнала, кэша накопителя, параметров монтирования и того, какие гарантии дает устройство при потере питания.
Тестируйте минимум два режима:
- асинхронную последовательную и случайную запись для throughput и IOPS;
- синхронную мелкоблочную запись для latency и fsync.
Если сервер базы данных показывает высокую скорость buffered I/O, это не подтверждает надежную запись транзакций. Проверяйте путь журнала отдельно и учитывайте восстановление после остановки.
Copy-on-write и влияние фрагментации
Модель copy-on-write записывает измененный блок в новое место, сохраняя старую версию, пока на нее ссылается снапшот или другая структура. Такой подход упрощает создание согласованных снимков, но меняет характер перезаписи.
При активном изменении образов виртуальных машин CoW может увеличить объем физической записи и создать фрагментацию. Короткий тест на пустом томе этого не покажет. Добавьте длительный цикл записи, удаления, повторной записи и создания снапшотов.
Для Btrfs и ZFS отдельно сравнивайте:
- новую последовательную запись;
- перезапись существующего файла;
- случайную запись образа ВМ;
- работу при наличии снапшотов;
- результат после заполнения и продолжительной эксплуатации.
Отключение CoW для отдельного каталога или файла меняет свойства защиты данных. Такое решение нужно считать отдельным профилем и проверять на восстановление, снапшоты и фактическую нагрузку.
Снапшоты: удобство восстановления и дополнительная нагрузка
Снапшот фиксирует состояние набора данных на определенный момент. Быстрое создание снимка не означает нулевую стоимость: при изменении блоков старые версии нужно сохранять, пока снимок существует.
Нагрузка проявляется в трех местах:
- запись может потребовать сохранить старую версию измененного блока;
- удаление большого числа объектов может конкурировать с пользовательским I/O;
- накопленные снимки уменьшают свободное место и усложняют оценку заполнения.
Для NAS снапшоты удобны при ошибочном удалении или изменении документов. Для виртуализации они помогают быстро откатить состояние ВМ, но длинные цепочки снимков и активная запись требуют отдельного контроля latency. Снапшот не заменяет резервную копию: отказ пула, повреждение хранилища или ошибка администратора может затронуть исходные данные и снимки одновременно.
Компрессия: когда снижение записи помогает производительности
Компрессия сокращает объем физических данных, если набор хорошо сжимается. Это может уменьшить нагрузку на накопитель и объем занятого пространства. Цена зависит от алгоритма, уровня сжатия и свободных ресурсов CPU.
На уже сжатых файлах выигрыш обычно ограничен, а процессорная нагрузка сохраняется. Поэтому тестируйте минимум два набора:
- текст, логи и структурированные данные с высокой сжимаемостью;
- JPEG, видео, архивы и другие данные, которые уже прошли сжатие.
Сравнивайте реальный объем физической записи, throughput, latency и загрузку CPU. Для базы данных компрессия должна проверяться вместе с fsync и случайной записью. Для NAS добавьте измерение времени передачи по SMB и NFS.
Метаданные и большое количество мелких файлов
Операции с метаданными включают создание, удаление, переименование, проверку атрибутов, поиск и обход каталогов. Нагрузка из миллиона файлов может вести себя иначе, чем один файл размером 1 ТБ.
Для проверки создайте одинаковое дерево каталогов на каждой файловой системе. Зафиксируйте:
- время создания и удаления объектов;
- скорость параллельной записи в несколько каталогов;
- latency операций
stat,renameиunlink; - поведение при одновременной работе нескольких клиентов;
- результат после заполнения и массового удаления данных.
fio хорошо измеряет блочный ввод-вывод, но не заменяет тест метаданных. Для NAS этот профиль нужно запускать через тот же протокол, который использует приложение: SMB или NFS.
Сравнение ext4, XFS, Btrfs и ZFS по ключевым характеристикам
ext4: базовая точка сравнения для Linux-серверов
ext4 удобно использовать как базовую точку, когда нужна понятная файловая система с умеренной сложностью эксплуатации. Ее результаты полезно сравнивать с XFS на одинаковом ядре, одинаковом накопителе и одинаковом тестовом наборе.
В тестах ext4 разделяйте крупные последовательные операции и мелкоблочный случайный ввод-вывод. Для файлового сервера добавляйте операции с каталогами. Для СУБД измеряйте fsync, журнал транзакций и восстановление после остановки.
Главное ограничение при выборе ext4 связано с требованиями к функциям хранения. Если нужны встроенные снапшоты, компрессия или контроль целостности на уровне комплексного storage stack, одного теста ext4 недостаточно для принятия решения. Нужно сравнивать всю архитектуру, включая отдельный слой хранения, резервное копирование и мониторинг.
- Подходит для проверки: обычный Linux-файловый сервер, база данных, сервисные каталоги, предсказуемая нагрузка.
- Проверяйте: fsync, метаданные, случайную запись и восстановление.
- Риск ошибки: выбрать ext4 по простоте, хотя системе требуются встроенные снапшоты или контроль целостности.
XFS: производительность на крупных объемах и параллельной нагрузке
XFS стоит включать в сравнение для файловых серверов и хранилищ, где работают крупные файлы и несколько клиентов одновременно. Отдельно измеряйте параллельную запись, смешанный профиль и операции с каталогами.
Тест одного потока может скрыть поведение XFS под конкурентной нагрузкой. Запускайте профили с разным числом потоков и глубиной очереди. Для NAS повторяйте их через SMB и NFS, поскольку серверный протокол меняет latency и количество одновременно выполняемых операций.
Для базы данных XFS сравнивайте с ext4 на одинаковых параметрах СУБД. Зафиксируйте размер блока, число соединений, размер журнала транзакций, режим синхронной записи и длительность теста. Универсальный вывод по одному результату последовательной записи будет неполным.
- Подходит для проверки: крупные файлы, параллельная запись, файловые серверы и хранилища.
- Проверяйте: метаданные, смешанный I/O, fsync и работу при заполнении.
- Риск ошибки: переносить результат локального теста на сетевой NAS без проверки SMB и NFS.
Btrfs: CoW, снапшоты и компрессия в обмен на особенности записи
Btrfs меняет профиль производительности за счет copy-on-write, снапшотов и компрессии. Эти функции нужно включать в тестовую матрицу, если они будут использоваться в рабочей системе.
Для обычных файлов проверьте последовательное чтение, последовательную запись и перезапись. Для большого числа мелких файлов измерьте метаданные. Для образов виртуальных машин добавьте случайную запись, длительный прогон и работу при наличии снапшотов.
Компрессию тестируйте на сжимаемом и несжимаемом наборе. Записывайте не только throughput, но и загрузку CPU, фактический объем физической записи и свободное место. Если CoW отключается для отдельного набора данных, сравнивайте такой режим отдельно и фиксируйте, какие функции защиты при этом меняются.
- Подходит для проверки: NAS со снапшотами, данные с хорошей сжимаемостью, рабочие каталоги с частыми снимками.
- Проверяйте: перезапись, фрагментацию, заполнение, компрессию и операции с метаданными.
- Риск ошибки: оценить Btrfs по линейному чтению на чистом томе и проигнорировать длительную случайную запись.
ZFS: управление данными, целостность и нагрузка на storage stack
ZFS нужно сравнивать как комплексную систему хранения. Результат зависит от конфигурации пула, числа и типа дисков, схемы отказоустойчивости, объема памяти, ARC, параметров recordsize, компрессии и режима синхронной записи.
Тест одного файла на одном устройстве не описывает производительность ZFS-пула. Зафиксируйте геометрию пула и повторите измерения для крупных файлов, мелких блоков, смешанной нагрузки и fsync. Если используется отдельный журнал или кэш, укажите его тип, объем и назначение.
Снапшоты и проверка целостности повышают эксплуатационную ценность ZFS, но требуют контроля свободного места, фоновых операций и времени восстановления. При сравнении с ext4 или XFS сопоставляйте одинаковый уровень защиты данных. Иначе результат будет отражать разницу между архитектурами хранения, а не между файловыми системами.
Практическое сравнение ZFS, XFS и Btrfs с акцентом на СХД собрано в отдельном руководстве по выбору файловой системы для хранилища.
- Подходит для проверки: NAS, пулы с требованиями к целостности, снапшоты, компрессия и репликация.
- Проверяйте: ARC, геометрию пула, синхронную запись, свободное место и восстановление.
- Риск ошибки: сравнить ZFS с обычным разделом ext4 без учета уровня защиты и состава storage stack.
Файловая система для файлового сервера и NAS
Большие файлы и последовательная передача по сети
Для медиаданных, образов, резервных копий и архивов основная метрика, throughput. Сначала измерьте локальную файловую систему, затем повторите тот же сценарий через SMB и NFS.
Если локальное хранилище передает данные быстрее сети, дальнейшее увеличение throughput файловой системы не даст прироста на клиенте. При этом latency операций открытия файла, каталогов и подтверждения записи все равно может влиять на пользовательский опыт.
Практическая последовательность теста:
- Создайте одинаковый набор крупных файлов.
- Измерьте локальное чтение и запись с очищенным и прогретым кэшем.
- Повторите тест через SMB.
- Повторите тест через NFS с теми же правами и набором данных.
- Запустите параллельный доступ двух, четырех и большего числа клиентов.
- Сравните throughput, latency и загрузку CPU сервера.
Для простого файлового сервера ext4 и XFS дают понятную базу сравнения. Btrfs и ZFS добавляют функции снапшотов, компрессии и контроля целостности, поэтому их оценивают по общей стоимости эксплуатации.
Мелкие файлы, каталоги и параллельный доступ
Документы, исходный код, конфигурации и каталоги пользователей создают большое число операций с метаданными. Здесь линейная скорость диска может почти не отражать реальную работу NAS.
Проверьте создание 100 000 или 1 000 000 файлов в одинаковой структуре, если такой объем соответствует вашей среде. Измерьте время удаления, массового переименования, поиска и параллельного доступа. Отдельно отметьте p95 и p99 latency, поскольку один медленный каталог может замедлить клиентское приложение.
Через SMB и NFS результаты могут различаться. Протокол, блокировки, права доступа и сетевые задержки добавляются поверх файловой системы. Для нескольких клиентов тестируйте смешанную нагрузку, где один поток читает данные, второй создает файлы, третий удаляет старые объекты.
Снапшоты и восстановление файлов на NAS
Снапшоты полезны для быстрого возврата удаленного или измененного файла. При выборе Btrfs или ZFS оцените расписание снимков, срок их хранения и объем изменений между ними.
Проверьте три операции:
- создание снапшота во время активной записи;
- удаление старого снапшота при параллельной пользовательской нагрузке;
- восстановление одного файла и большого каталога.
Сравнивайте время восстановления и изменение свободного места. Резервная копия должна находиться на независимом носителе или в отдельном хранилище. Снапшот внутри того же пула решает задачу оперативного отката, но не заменяет копию после отказа пула.
Файловая система для виртуализации
Образы виртуальных машин и случайный ввод-вывод
Образы виртуальных машин создают большое количество случайных операций и работают параллельно. Поэтому для гипервизора важны IOPS, latency и стабильность хвостовых задержек.
Тестируйте не один образ, а несколько одновременно. Запустите одинаковую нагрузку внутри двух, четырех и большего числа ВМ, если такая плотность соответствует планируемой конфигурации. Сравните:
- случайное чтение блоками 4 КБ;
- случайную запись блоками 4 КБ;
- смешанный профиль 70% чтения и 30% записи;
- последовательную запись при фоновой случайной нагрузке;
- p95 и p99 latency при заполнении хранилища.
Измеряйте нагрузку внутри гостевой системы и на хосте. Кэш гипервизора, формат образа, thin provisioning и настройки контроллера могут изменить результат сильнее, чем выбор между двумя файловыми системами.
Снапшоты, thin provisioning и copy-on-write
Thin provisioning экономит физическое место на старте, но объем записи растет по мере заполнения блоков. Снапшоты сохраняют старые версии измененных данных. CoW может увеличить число операций при активной перезаписи образов.
В тесте зафиксируйте длину цепочки снапшотов, процент заполнения thin-пула и порядок удаления снимков. Проверяйте откат одной ВМ, массовое удаление снапшотов и продолжение работы нескольких гостей во время фоновой очистки.
Для временного тестового стенда можно использовать облачную инфраструктуру с VDS или выделенными дисками, например Timeweb Cloud. Результаты такого теста нельзя напрямую переносить на локальный RAID или продуктивный SAN: нужно повторить ключевые профили на целевом оборудовании.
Какая файловая система лучше для базы данных
Что измерять для СУБД: latency, fsync и случайную запись
СУБД предъявляет особые требования к надежной записи. Набор данных и журнал транзакций создают разные профили I/O, поэтому их нельзя оценивать одной командой.
В тест включите:
- случайную запись мелкими блоками;
- смешанное чтение и запись при нескольких потоках;
- синхронную запись с fsync или fdatasync;
- последовательную запись журнала транзакций;
- операции с индексами и временными файлами;
- восстановление после корректной и аварийной остановки.
Смотрите среднюю latency и p99. Быстрый средний результат при редких задержках может ухудшать время ответа транзакций. Фиксируйте размер данных, число соединений, объем памяти СУБД, настройки кэша и режим подтверждения записи накопителем.
Отдельные требования к журналу транзакций
Журнал транзакций обычно записывается последовательно, но операции подтверждения могут быть синхронными. Для него важны порядок записи, надежная доставка данных и предсказуемая latency.
Тестируйте журнал на отдельном профиле. Измерьте скорость последовательной записи, время fsync, p95 и p99 задержки при параллельной нагрузке основного набора данных. Если журнал и данные используют один пул, повторите тест с конкурирующим случайным чтением.
Кэш накопителя нельзя считать гарантией сохранности без проверки его поведения при потере питания. В отчете укажите, какие гарантии дает устройство и какие настройки СУБД используются. Это связывает измеренную скорость с реальным риском потери последних транзакций.
ext4 и XFS для СУБД: что сравнивать на практике
ext4 и XFS сравнивайте на одинаковой версии СУБД, одном ядре, одинаковом накопителе и одном наборе данных. Смените только файловую систему и связанные с ней параметры, которые нужно заранее зафиксировать.
| Область | Что измерять | Почему это нужно |
|---|---|---|
| Данные | Случайное чтение и запись, IOPS, p99 latency | Показывает работу таблиц и индексов |
| Журнал | Последовательная запись и fsync | Показывает задержку подтверждения транзакции |
| Метаданные | Создание временных файлов, rename, unlink | Выявляет стоимость служебных операций |
| Отказ | Восстановление после остановки | Проверяет время возврата сервиса и целостность |
| Длительность | Разброс результатов и просадка после заполнения | Отделяет краткий пик от стабильной работы |
Для многих Linux-развертываний ext4 и XFS логично использовать как первые кандидаты для СУБД благодаря сравнительно простой модели эксплуатации. Итог выбирают по конкретной базе, дискам, режиму fsync и профилю запросов. Btrfs и ZFS требуют отдельной проверки CoW, снапшотов, компрессии, контрольных сумм и влияния storage stack на задержки.
Как читать результаты тестов и не ошибиться с выбором
Почему быстрый линейный тест не гарантирует низкую latency
Последовательный тест крупными блоками показывает пропускную способность канала хранения. СУБД, виртуальные машины и каталоги пользователей создают мелкие и смешанные операции.
Файловая система может показать высокий throughput при одном потоке и при этом давать большой p99 на случайной записи. Другая конфигурация может иметь меньшую максимальную скорость, но более стабильную latency при четырех или восьми параллельных клиентах.
Читайте отчет по связке показателей:
- throughput отвечает за объем данных в секунду;
- IOPS отвечает за количество операций;
- средняя latency показывает типичное время ответа;
- p95 и p99 показывают редкие задержки;
- CPU и физический объем записи показывают цену компрессии и CoW.
Как учитывать заполнение хранилища и длительность нагрузки
Чистый том и том после месяцев работы, удаления файлов и накопления снапшотов, разные тестовые состояния. Свободное место, фрагментация и фоновые операции меняют задержки.
Минимальная практическая схема включает прогон на пустом томе, прогон при заполнении 70-80% и длительный смешанный тест с записью, удалением и повторным чтением. Для Btrfs и ZFS добавьте состояние с активными снапшотами. Для RAID или пула измерьте восстановление после отказа одного компонента, если это допускает тестовая инфраструктура.
Повторяйте тесты после очистки кэша и отдельно в прогретом состоянии. В отчете храните исходные параметры, а не только итоговые цифры. Иначе сравнение невозможно воспроизвести после обновления ядра или замены накопителя.
Какие вопросы задать перед выбором
- Какая основная нагрузка: большие файлы, мелкие файлы, база данных, образы ВМ или смешанный доступ?
- Какова доля чтения и записи в обычный и пиковый периоды?
- Какой размер блока преобладает?
- Требуются ли низкие p99 latency и надежный fsync?
- Нужны ли встроенные снапшоты, компрессия и контроль целостности?
- Сколько памяти доступно для кэша и служебных операций?
- Как устроены RAID или пул, сколько дисков участвует в записи?
- Как выполняются резервное копирование, репликация и восстановление?
- Кто будет обслуживать файловую систему и контролировать заполнение?
- Есть ли план отката при проблемах после миграции?
Итоговая матрица выбора ext4, XFS, Btrfs и ZFS
Файловый сервер и NAS: критерии итогового выбора
| Сценарий | Кандидаты для первого теста | Критерии решения |
|---|---|---|
| Простой Linux-файловый сервер | ext4, XFS | SMB или NFS, пропускная способность, метаданные, права доступа, простота восстановления |
| NAS с большими файлами | XFS, ZFS, Btrfs | Последовательный throughput, сеть, компрессия, свободное место, резервное копирование |
| NAS со снапшотами | Btrfs, ZFS | Стоимость записи, хранение изменившихся блоков, откат, удаление снимков, контроль заполнения |
| NAS с большим числом мелких файлов | ext4, XFS, Btrfs, ZFS | Создание, удаление, поиск, rename, параллельные клиенты и p99 latency |
| Хранилище с повышенными требованиями к целостности | ZFS, Btrfs | Проверка данных, восстановление, снапшоты, репликация и обслуживание пула |
Для простого файлового сервера выбирайте между ext4 и XFS по результатам SMB или NFS-теста. Для NAS со снапшотами и контролем целостности сравнивайте Btrfs и ZFS как полноценные модели хранения. Решение принимайте после проверки восстановления и заполнения, поскольку эти операции влияют на долгосрочную эксплуатацию.
Виртуализация и базы данных: критерии итогового выбора
| Сценарий | Что важно | Что проверить |
|---|---|---|
| Образы виртуальных машин | IOPS, случайная запись, p99 latency | Параллельные ВМ, thin provisioning, CoW, снапшоты и удаление цепочек |
| База данных | fsync, случайная запись, журнал транзакций | Одинаковую СУБД, набор данных, кэш, восстановление и длительную нагрузку |
| Журнал транзакций | Последовательная запись и подтверждение на диске | Latency fsync, конкуренцию с данными и поведение после сбоя |
| Смешанное хранилище | Стабильность под конкурирующими потоками | Параллельные клиенты, фоновые задачи, заполнение и мониторинг |
Для виртуализации проверяйте конкретный гипервизор и формат образа. Для базы данных проверяйте конкретную СУБД и ее настройки журналирования. ext4 или XFS могут стать базовыми кандидатами для транзакционной нагрузки, а Btrfs или ZFS оправданы при наличии функций, которые вы готовы измерять и обслуживать.
Чек-лист перед внедрением или миграцией
- Опишите рабочий профиль: файлы, блоки, чтение, запись, параллельность и пик.
- Подготовьте одинаковый тестовый набор и отдельный безопасный том.
- Зафиксируйте версии ядра, файловых систем, драйверов, СУБД и гипервизора.
- Повторите тесты для throughput, IOPS, latency, fsync и метаданных.
- Проверьте чистое хранилище, заполнение 70-80% и длительный смешанный прогон.
- Отдельно измерьте работу снапшотов, компрессии, CoW и фоновых задач.
- Проверьте резервную копию и восстановление отдельных файлов, ВМ и базы.
- Подготовьте план отката и сохраните конфигурацию исходной системы.
- Настройте мониторинг latency, IOPS, свободного места, ошибок и состояния пула.
- Повторите контрольный тест после перехода на рабочую нагрузку.
Часто задаваемые вопросы о производительности файловых систем
Какая файловая система быстрее: ext4 или XFS?
Ответ зависит от размера файлов, доли чтения и записи, параллельности, метаданных и настроек дисковой подсистемы. Для крупных файлов и многопоточной нагрузки проверяйте последовательный throughput и параллельную запись. Для базы данных сравнивайте случайный ввод-вывод, fsync, p99 latency и восстановление.
Какая файловая система лучше для NAS?
Для простого NAS начните с ext4 или XFS и тестируйте реальные SMB или NFS-сценарии. Если нужны снапшоты, компрессия и контроль целостности, добавьте Btrfs и ZFS. Выбор зависит от числа клиентов, размера файлов, требований к восстановлению и готовности обслуживать пул или CoW-функции.
Можно ли использовать Btrfs или ZFS для базы данных?
Да, но пригодность нужно проверять на конкретной СУБД. Измерьте случайную запись, fsync, p99 latency, журнал транзакций, CoW, снапшоты и компрессию. Учитывайте влияние фоновых операций и заполнения хранилища.
Нужно ли включать компрессию и снапшоты ради производительности?
Компрессия может уменьшить объем физической записи на сжимаемых данных, но повышает нагрузку на CPU. Снапшоты упрощают откат, однако при изменении блоков занимают дополнительное место и могут влиять на запись. Сравнивайте включенный и выключенный режим на реальном наборе данных.
Почему мой результат отличается от опубликованного бенчмарка?
Причиной могут быть другие накопители, ядро, параметры монтирования, RAID или пул, объем памяти, кэш, размер тестового набора, заполнение и профиль fio. Сравните все параметры стенда и повторите тест с одинаковыми условиями. Без этого различие цифр не доказывает преимущество одной файловой системы.