В чём разница между журналируемой и нежурналируемой файловой системой в Linux?

«В чём разница между журналируемой и нежурналируемой файловой системой в Linux?» — вопрос из категории Linux, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Выбор ФС напрямую влияет на отказоустойчивость серверов и скорость восстановления после сбоев, что является ключевой задачей DevOps.

Журналируемая файловая система (ext4, XFS, Btrfs) использует механизм журналирования (journaling). Перед тем как записать изменения в основные структуры данных (метаданные, а иногда и данные), она записывает план этих изменений в специальную область — журнал. При внезапном отключении питания или крахе системы ФС при следующем монтировании может быстро проверить журнал и завершить прерванные операции или откатить их, обеспечивая целостность. Это минимизирует время проверки fsck.

  • ext4 (ordered/journal data mode): Стандартный выбор для большинства системных и рабочих разделов.
  • XFS: Отлично подходит для больших файлов и высоких нагрузок, имеет надежное журналирование.

Нежурналируемая файловая система (ext2) не имеет журнала. Запись происходит напрямую. Это может дать небольшой прирост производительности на операциях записи, но при сбое высок риск повреждения структур данных. Полная проверка целостности (fsck) может занимать очень долгое время на больших томах.

DevOps-практика:

  • Корневой (/) и /var, /home — всегда журналируемые ФС (ext4/XFS) для надежности.
  • Временные данные (/tmp) — часто монтируются как tmpfs (в оперативной памяти) или можно использовать нежурналируемую ФС, так как данные не критичны.
  • Высоконагруженные БД (например, PostgreSQL): иногда для максимальной производительности данных размещают на XFS или ext4 с отключенным журналом данных (data=writeback), но это требует отдельной настройки отказоустойчивости на уровне приложения/репликации.
# Проверить тип и параметры ФС для раздела
sudo blkid /dev/sda1

# Просмотреть параметры монтирования, включая опции журналирования
mount | grep /dev/sda1
# или
cat /proc/mounts | grep /dev/sda1

# Создать ФС XFS (журналируемая) на диске
sudo mkfs.xfs -f /dev/sdb1