RAID: что он правда даёт
Зеркало, чётность и полосы простыми словами. Деградация, ребилд, риск второго отказа и почему RAID стоит в треке про бэкапы.
Одна задача: пережить смерть диска
RAID собирает несколько физических дисков в один логический том так, чтобы отказ диска не остановил работу и не потерял данные. Всё остальное, что ему приписывают, к делу не относится.
Диски умирают предсказуемо часто: в парке из сотни штук пара в год уходит всегда. RAID превращает это событие из аварии в задачу «заменить железку».
Уровни, которые встречаются
RAID 0 (striping) режет данные на полосы и раскладывает по дискам. Быстро, объём суммируется, избыточности нет вообще. Смерть любого диска уносит весь том. Это не защита, а ускорение, и в проде его берут только под данные, которые не жалко.
RAID 1 (зеркало) пишет одно и то же на два диска. Половина объёма уходит в избыточность, зато переживает смерть одного диска. Чтение ускоряется на параллельной нагрузке: запросы раскидываются между копиями, а один последовательный поток быстрее не станет.
RAID 5 — полосы плюс блок чётности, размазанный по дискам. Из N дисков доступно N-1, переживает смерть одного. Долгое время был стандартом для объёмных массивов.
RAID 6 — то же самое с двумя блоками чётности: переживает смерть двух дисков одновременно. Медленнее на запись, но спокойнее.
RAID 10 — зеркала, объединённые в полосы. Дорого по объёму (половина), зато быстро и предсказуемо восстанавливается.
Деградация и ребилд
Пока все диски целы, массив работает штатно. После смерти диска массив переходит в деградированное состояние: данные доступны, избыточности больше нет. Любой следующий отказ в этот момент означает потерю тома.
Вы вставляете новый диск, и начинается ребилд: массив пересчитывает недостающие данные и записывает их на замену. В программном RAID этим занимается md-драйвер ядра, в аппаратном контроллер. Это самый опасный отрезок в жизни массива, и вот почему.
В RAID 5 и 6 ребилд читает все остальные диски целиком: недостающий блок считается из чётности по выжившим. Диски одного возраста, из одной партии, с одинаковым пробегом, и именно под этой нагрузкой второй часто и умирает. В RAID 1 и 10 всё мягче, там читается только зеркальный партнёр отказавшего диска.
На дисках в десятки терабайт ребилд RAID 5 идёт сутки и дольше. Всё это время массив без избыточности, под максимальной нагрузкой чтения. Отсюда практика: на больших дисках берут RAID 6 или RAID 10, а RAID 5 оставляют для небольших и быстрых томов.
Вторая причина того же выбора — нечитаемые сектора. Чем больше данных прочитано за один ребилд, тем выше шанс наткнуться на сбойный сектор, и на потребительских дисках это уже не теория. Для RAID 5 такая находка оборачивается либо оборванным ребилдом, либо потерей данных в задетых блоках: восстановить их не из чего, избыточности больше нет.
Встречается и более резкий аргумент, что RAID 5 «математически обречён» из-за паспортной частоты нечитаемых секторов. Считать так буквально не стоит: паспортное значение это гарантированный минимум производителя, а не наблюдаемая частота. Но вывод про большие диски от этого не меняется.
Мониторинг важнее уровня
Массив, который деградировал полгода назад и никого не уведомил, это уже не защита. Практика простая: следите за состоянием массива и за здоровьем дисков.
cat /proc/mdstat # состояние программных массивов Linux
smartctl -a /dev/sda # здоровье конкретного диска
В /proc/mdstat рабочий массив показывает [UU], деградированный
[U_]. Эту строку и стоит завести в мониторинг вместе с показателями
SMART. По статистике Backblaze на отказы указывают пять атрибутов:
переназначенные секторы (5), неисправимые ошибки (187), таймауты команд
(188), секторы в очереди на переназначение (197) и нечитаемые при офлайн
проверке (198).
Важная оговорка: примерно четверть дисков умирает с чистым SMART. Пустые атрибуты это не справка о здоровье, а отсутствие плохих новостей.
И держите запасной диск: холодный на полке или горячий в корзине как spare. Ребилд, начатый через неделю после отказа, слишком часто начинается уже после второго отказа.
Почему этот урок в треке про бэкапы
Потому что RAID регулярно принимают за бэкап, и это самая дорогая ошибка в теме.
RAID не защищает от rm -rf, от DROP TABLE, от шифровальщика, от бага в
приложении и от пожара в серверной. Все эти события он аккуратно
продублирует на все диски сразу, потому что для него это обычная запись.
RAID это про доступность: сервис продолжает работать, пока вы меняете железку. Бэкап это про сохранность: данные существуют, даже когда исчезло всё остальное. Вещи разные и заменять друг друга не могут.
Что важно запомнить
RAID закрывает ровно один сценарий: отказ диска.
RAID 0 избыточности не даёт вообще; 1 и 10 переживают отказ, 5 один диск, 6 два.
Деградированный массив работает без запаса прочности, а ребилд нагружает оставшиеся диски и часто убивает второй.
На больших дисках выбирают RAID 6 или 10, потому что ребилд RAID 5 идёт сутками.
Массив без мониторинга и запасного диска защищает только на бумаге.
Дальше самое ответственное: бэкапы баз данных, где копия файла и копия данных это разные вещи.
Прошли материал до конца? Отметьте урок пройденным.
Прогресс сохранён в этом браузере
Почистишь историю или откроешь с телефона, и отметки пропадут. Оставь почту, они переедут в аккаунт. Пароль придумывать не нужно.
Готово. теперь в аккаунте: прогресс виден с любого устройства. Мой прогресс