Журналирование, RAID и вопросы собеседований

Как файловые системы переживают сбои, как диски защищают от поломок, и что любят спрашивать про ОС на интервью.

Журналирование сначала записывает намерение об изменении в журнал, чтобы после сбоя файловая система осталась согласованной; RAID объединяет несколько дисков ради надёжности и/или скорости.

Зачем журналирование

Представьте: ОС обновляет файл — нужно изменить и данные, и метаданные (размер, блоки). Если питание пропадёт между этими операциями, файловая система окажется в противоречивом состоянии: метаданные говорят одно, данные — другое. После такого диск может «развалиться».

Журналируемая файловая система (ext4, NTFS, XFS) решает это так: прежде чем менять сам диск, она записывает в специальный журнал план изменений. Дальше выполняет их. Если сбой случился посреди — после перезагрузки ОС читает журнал и либо доводит операцию до конца, либо откатывает. Файловая система всегда остаётся согласованной.

Аналогия: бухгалтер сначала пишет в черновик «перевести 100 со счёта A на счёт B», и только потом проводит. Если его прервали, по черновику видно, что хотели сделать, и можно завершить корректно.

RAID: много дисков как один

RAID (Redundant Array of Independent Disks) объединяет несколько физических дисков в один логический. Цель — надёжность (пережить поломку диска) и/или скорость. Основные уровни:

УровеньИдеяЧто даёт
RAID 0чередование (striping) без избыточностискорость, но нет защиты
RAID 1зеркалирование (одинаковые копии)защита: пережить отказ диска
RAID 5чередование + распределённая чётностьзащита и скорость, экономно
RAID 10зеркало + чередованиескорость и защита, но дороже

Важный нюанс: RAID — не замена резервным копиям. Он защищает от поломки железа, но не от случайного удаления файла или вируса — это удаление просто продублируется на все диски.

Частые вопросы на собеседованиях

Темы ОС обожают на интервью. Вот типичные вопросы и краткая суть ответа:

  • Процесс или поток? Процесс — изолированное адресное пространство; потоки внутри процесса делят память. Потоки дешевле, но опаснее (гонки).
  • Что такое deadlock и его условия? Вечное взаимное ожидание; четыре условия Коффмана; устранить любое — нет deadlock.
  • Чем мьютекс отличается от семафора? Мьютекс — один владелец (взаимное исключение); семафор — счётчик на N доступов.
  • Как работает виртуальная память? Своё адресное пространство у процесса, трансляция через таблицу страниц и MMU, недостающее — на диске.
  • Что такое context switch и почему он дорогой? Сохранение/восстановление состояния; страдают кэш и таблица страниц.
  • FCFS, SJF, Round Robin — в чём разница? Порядок прихода; короткие первыми; квант времени по кругу.
  • Что происходит при page fault? Страницы нет в памяти, ОС грузит её с диска, при нехватке кадров выбирает жертву по алгоритму замещения.
  • Что такое race condition? Зависимость результата от порядка выполнения потоков над общими данными; лечится синхронизацией.

Мини-симуляция: применяем журнал после сбоя

Покажем идею журналирования: незавершённые операции из журнала доводятся до конца при восстановлении.

# Журнал: каждая запись — намерение (committed=True значит можно применять)
journal = [
    {"op": "write", "file": "a.txt", "committed": True},
    {"op": "write", "file": "b.txt", "committed": True},
    {"op": "write", "file": "c.txt", "committed": False},  # прервано сбоем
]

print("Восстановление после сбоя:")
applied = 0
for entry in journal:
    if entry["committed"]:
        print(f"  применяем: {entry['op']} {entry['file']}")
        applied += 1
    else:
        print(f"  откатываем (не зафиксировано): {entry['op']} {entry['file']}")

print(f"Применено операций: {applied}, откачено: {len(journal) - applied}")
print("Файловая система согласована")

Вывод:

Восстановление после сбоя:
  применяем: write a.txt
  применяем: write b.txt
  откатываем (не зафиксировано): write c.txt
Применено операций: 2, откачено: 1
Файловая система согласована

Итог

  • Журналирование пишет план изменений в журнал, чтобы пережить сбой без потери согласованности.
  • После сбоя ОС по журналу доводит операции до конца или откатывает их.
  • RAID объединяет диски ради скорости (striping) и/или надёжности (зеркало, чётность).
  • RAID защищает от поломки железа, но не заменяет резервные копии.
  • На собеседованиях по ОС спрашивают про процессы/потоки, deadlock, синхронизацию, виртуальную память и планирование.
Проверьте себя
1. Зачем нужна журналируемая файловая система?
AЧтобы ускорить чтение файлов
BЧтобы после сбоя питания файловая система осталась в согласованном состоянии
CЧтобы шифровать данные на диске
DЧтобы экономить место на диске
2. Что обеспечивает RAID 1 (зеркалирование)?
AМаксимальную скорость без защиты данных
BЗащиту: данные дублируются, поэтому отказ одного диска не теряет их
CСжатие данных
DЗамену резервным копиям
3. Почему RAID не заменяет резервные копии?
ARAID работает медленнее бэкапа
BRAID защищает от поломки железа, но случайное удаление файла продублируется на все диски
CRAID нельзя использовать с журналированием
DRAID хранит только метаданные
Поддержать проект