Какая файловая система лучше подходит для веб‑нагрузки на VDS — ext4 или XFS? Спойлер: универсального ответа нет. Но если аккуратно разложить типы нагрузки, особенности журналирования и параметры монтирования, можно получить конфигурацию, которая даёт предсказуемую производительность и не бьёт по надёжности. Если вы только планируете инфраструктуру, посмотрите также, как выбрать конфигурацию VDS по CPU/RAM/диску.
Веб‑нагрузка: что именно мы ускоряем
Под «веб‑нагрузкой» на практике обычно скрываются такие шаблоны:
- Множество мелких файлов (PHP, шаблоны, ассеты, кэш фреймворков), преимущественно чтение.
- Последовательная запись логов (nginx, PHP‑FPM, приложений), ротация.
- Смешанная активность в каталогах с большим количеством объектов (uploads, thumbnails).
- Контейнеры/оркестрация (Docker/Podman) с требованиями к атрибутам каталога и копированию слоёв.
- Бэкапы, развёртывания, атомарные обновления (много операций rename, fsync, массовые метаданные).
Базы данных лучше держать отдельно и настраивать исходя из их профиля. Здесь фокус именно на файловой системе для кода, статики, логов и контейнеров.
ext4 и XFS: сильные стороны
Когда ext4 проще и надёжнее выбора
- Стабильность и предсказуемость под смешанную нагрузку, невысокий накладной расход на метаданные.
- Отлично справляется с множеством мелких файлов и умеренным уровнем параллелизма.
- Широкая экосистема инструментов (e2fsck, tune2fs), привычные политики восстановления.
- На небольших VDS (мало RAM и CPU) часто показывает себя более «экономно».
Когда XFS раскрывается лучше
- Высокий параллелизм и крупные каталоги: развитая аллокация по группам, масштабируемые метаданные.
- Удобные проектные квоты и управление ими, зрелые инструменты.
- Поддержка reflink (копирование‑на‑запись) — быстрое клонирование больших деревьев (стейджинг, бэкапы).
- Хорошая производительность на NVMe под потоковую запись и интенсивные операции с каталогами.
В реальности на одном и том же NVMe‑VDS разница между ext4 и XFS в «средних» кейсах может быть невелика. Выбор заметнее с ростом параллелизма, размеров каталогов и требований к операциям с метаданными.
Журналирование и безопасность данных
Обе файловые системы ведут журнал метаданных. У ext4 режим по умолчанию data=ordered: перед фиксацией метаданных на диск гарантируется запись связанных с ними данных, что снижает риск «мусора» в файлах после сбоев. Режим data=writeback быстрее, но менее безопасен (обычно не рекомендуется для веб‑корней).
У XFS журнал метаданных всегда включён. На современных ядрах управление барьерами и flush‑операциями делается автоматически; отключать защитные механизмы (исторические nobarrier) без аппаратной гарантии (BBU/PLP) не стоит.
Для PROD окружений сохраняйте безопасные настройки журналирования. Экономия на «барьерах» часто заканчивается потерей данных после внезапной перезагрузки.
Опции монтирования для веб‑нагрузки
Опции, которые почти всегда уместны
noatime— отключает обновление времени доступа, снижает лишние записи. На современных системах по умолчаниюrelatime, но для веб обычно смело используемnoatime.lazytime— откладывает запись временных меток на диск, объединяя обновления. Хороший компромисс между корректностью и I/O.- TRIM/Discard — вместо постоянного
discardиспользуйте периодическийfstrimтаймер, чтобы не добавлять латентность каждому удалению.
systemctl enable fstrim.timer
systemctl start fstrim.timer
- Квоты — если есть мультиарендность (несколько проектов/сайтов), включайте проектные квоты (
prjquota) для изоляции диска по каталогам.

ext4: рекомендуемые опции
noatime,lazytime— базовая экономия I/O.commit=30илиcommit=60— увеличивает интервал коммита журнала (секунды), немного снижая накладные расходы. Чуть повышает риск потери последних секунд метаданных при аварии.errors=remount-ro— предсказуемое поведение в авариях.prjquota— для проектных квот (по каталогам).
# /etc/fstab (пример)
UUID=xxxx-xxxx /var/www ext4 noatime,lazytime,commit=60,errors=remount-ro,prjquota 0 2
Дополнительно: на новых ядрах ext4 поддерживает fast_commit (ускорение fsync/rename паттернов). Если ФС создавалась недавно современными утилитами, фича, как правило, включена автоматически.
XFS: рекомендуемые опции
noatime,lazytime— базовые оптимизации.inode64— обычно включён по умолчанию; разрешает размещать иноды по всему адресному пространству, помогает фрагментации.prjquota— проектные квоты с удобными инструментами.
# /etc/fstab (пример)
UUID=yyyy-yyyy /var/www xfs noatime,lazytime,inode64,prjquota 0 0
Исторические параметры вроде logbufs/logbsize на современных ядрах часто игнорируются или подбираются автоматически. Настраивайте их точечно после профилирования.
Создание ФС (mkfs) под веб
ext4: практичные пресеты
- Включаем современные фичи: контрольные суммы метаданных, 64‑битные группы, dir_index уже по умолчанию.
- Уменьшаем резерв под root до 0–1% на больших разделах.
- Под мелкие файлы увеличиваем плотность инодов.
# Создание ext4 под www
mkfs.ext4 -L www -O metadata_csum,64bit -T small -i 16384 -m 1 /dev/vdb1
# Увеличить журнал, если ожидается метаданные‑heavy (ротация логов, массовые rename)
tune2fs -J size=1024 /dev/vdb1
-T small и -i 16384 дают больше инодов, что полезно для директорий с тысячами миниатюр и кэшей. Увеличенный журнал снижает частоту блокировок на метаданных под пиковую активность.
XFS: акценты при создании
- Включаем контрольные суммы и индекс свободных инодов (обычно по умолчанию).
- Активируем reflink для быстрых клонов деревьев (стейджинг/релизы).
- Для Docker обязателен
ftype=1(иначе overlay2 не работает).
# Создание XFS под www
mkfs.xfs -L www -m crc=1,finobt=1,reflink=1 -n ftype=1 -i size=256 /dev/vdb1
# Если много метаданных и высокая конкуренция — больше внутренний лог
mkfs.xfs -L www -m crc=1,finobt=1,reflink=1 -n ftype=1 -l size=1024m -i size=256 /dev/vdb1
На RAID/NVMe с полосами стоит задавать выравнивание (-d su=...,sw=...) для лучшей последовательной записи. Для одиночного виртуального диска это обычно не требуется.
Проектные квоты: изоляция диска по сайтам
Проектные квоты позволяют задать лимиты на каталог и все его подкаталоги — идеально для хостинга нескольких сайтов или окружений на одном сервере.
# Монтируем с prjquota (fstab пример был выше)
mount -o remount /var/www
# Описываем проекты
# /etc/projects
1001:/var/www/site1
1002:/var/www/site2
# /etc/projid
site1:1001
site2:1002
# Инициализация атрибутов проекта (на XFS и ext4 можно использовать xfs_quota)
xfs_quota -x -c "project -s site1" /var/www
xfs_quota -x -c "project -s site2" /var/www
# Лимиты (мягкий/жёсткий для блока и инодов)
xfs_quota -x -c "limit -p bsoft=5g bhard=6g isoft=200k ihard=220k site1" /var/www
xfs_quota -x -c "limit -p bsoft=10g bhard=12g isoft=400k ihard=450k site2" /var/www
# Проверка
xfs_quota -x -c "report -p" /var/www
Несмотря на название, утилита xfs_quota умеет работать и с ext4, если ядро и утилиты поддерживают проектные квоты. Это упрощает единый operational‑подход на разных ФС.

Docker/CI и развёртывания
Если на сервере активно используются контейнеры, XFS с ftype=1 и reflink=1 даёт ощутимые плюсы при копировании слоёв и сборках. Для ext4 критично, чтобы ФС поддерживала d_type (на современных системах это обычно так по умолчанию). В обоих случаях проверяйте требования вашего контейнерного рантайма.
Деплой через атомарные rsync --link-dest или копирование деревьев выигрывает на XFS благодаря reflink‑клонам, которые создаются почти мгновенно и не потребляют место до изменений. На ext4 такую экономию места не получить, но производительности чтения кода это не мешает.
Логи, кэш и большие каталоги
Логи — последовательная запись с периодической ротацией и компрессией. Обе ФС справляются хорошо, но XFS иногда показывает меньшую латентность под массовую ротацию при высокой конкуренции. Для каталогов с десятками-сотнями тысяч файлов XFS устойчивее по временам операций readdir/unlink под нагрузкой.
Кеши фреймворков (Symfony, Laravel, Magento) активно работают с метаданными. На малых VDS ext4 может давать более стабильную задержку из‑за меньшего накладного расхода, особенно при ограниченной памяти. На более «толстых» VDS с NVMe разница сглаживается или уходит в пользу XFS при параллельной записи.
Память и кеши ядра
Производительность веб‑сервера часто упирается не во «возможности ФС», а в эффективность page cache и dentry/inode cache. Если RAM мало, отдача статики будет одинаково упираться в диск, и преимущества той или иной ФС нивелируются. В таких случаях логично выбирать более «лёгкую» конфигурацию (часто ext4) и инвестировать в оптимизацию приложения и HTTP‑стека. Для повышения общей безопасности сервисов полезно посмотреть на усиление системных сервисов через sandboxing systemd.
Чек‑лист выбора
- Небольшой VDS с ограниченной RAM/CPU, сайты на PHP, много мелких файлов, без контейнеров — ext4 с
noatime,lazytime,commit=60. - Много параллельных деплоев, контейнеры, крупные каталоги, нужны быстрые клоны — XFS с
inode64,prjquota,noatime,lazytime, создана сreflink=1иftype=1. - Мультиарендность — в обеих ФС включайте
prjquotaи ведите лимиты черезxfs_quota. - TRIM — не
discardна монтировании, аfstrim.timer. - Журнал — оставляем безопасные режимы; увеличиваем размер журнала при «метаданные‑heavy» сценариях.
Профилирование и валидация
Перед миграцией продакшена проверьте конфигурацию на стейджинге, замерьте реальные метрики: медиану и хвосты задержек (p95/p99) операций чтения/записи, время ротации логов, длительность деплоя. Используйте fio для синтетики и свои же скрипты деплоя/билда для репликатора нагрузки. Смотрите на системные метрики (iostat, vmstat, pidstat) и на отражение в пользовательских метриках (время ответа веб‑приложения, таймауты PHP‑FPM, скорость генерации кэша). Если нужен чистый сервер под эксперименты — поднимите VDS и тестируйте конфигурации из статьи.
Итог
Для типичной веб‑нагрузки на VDS обе системы подходят. Если у вас небольшой сервер и преобладает чтение множества мелких файлов — ext4 даст простую и предсказуемую конфигурацию. Если нагрузка параллельная, каталоги крупные, используются контейнеры и нужны быстрые клоны деревьев — XFS окажется практичнее за счёт масштабируемых метаданных и reflink. В обоих случаях не забывайте про noatime, lazytime, проектные квоты и периодический fstrim, а также подбирайте размер журнала под ваши пики метаданных. Главный критерий — ваши реальные метрики под вашей нагрузкой.


