Почему RAID 5 на больших дисках считают опасным
«RAID 5 давно не защита» — фраза, которую вы наверняка слышали, но редко видели с цифрами. Дело не в том, что RAID 5 «устарел» как технология: дело в конкретном числе из паспорта каждого жёсткого диска, которое почти не улучшается, пока сами диски растут в объёме в разы каждые несколько лет. Разберём эту математику по шагам — и станет понятно, почему массив из дисков на 250 ГБ пятнадцать лет назад вёл себя иначе, чем такой же по логике массив из дисков на 8-16 ТБ сегодня.
Содержание
- Что такое URE и почему это не мелкий шрифт
- Что физически происходит при ребилде RAID 5
- Считаем вероятность: формула и что она показывает
- Таблица: старые маленькие диски против современных больших
- Почему объём дисков растёт быстрее, чем надёжность URE
- Что делать вместо классического RAID 5 на больших дисках
Что такое URE и почему это не мелкий шрифт
У любого жёсткого диска (и у SSD, хотя там механизм другой) в спецификации есть параметр, который редко попадает в маркетинговые материалы, но есть в полном даташите производителя: URE (Unrecoverable Read Error rate), иногда его называют UBER (Unrecoverable Bit Error Rate). Он описывает, как часто при чтении диска встречается сектор, который контроллер не может восстановить собственными средствами коррекции ошибок (ECC) — то есть чтение конкретного бита данных гарантированно проваливается.
Параметр записывается как «одна неисправимая ошибка на N прочитанных бит». Типичные порядки величины, которые фигурируют в спецификациях производителей:
- потребительские SATA-диски и часть nearline-моделей — порядка 1 ошибки на 10^14 бит;
- диски корпоративного класса (enterprise SATA/SAS) — порядка 1 ошибки на 10^15 бит, то есть примерно на порядок лучше.
Важная оговорка: это не измеренная нами величина, а типовой порядок из публичных спецификаций — конкретное число отличается у разных производителей и моделей и меняется от ревизии к ревизии. Прежде чем опираться на цифру в реальных расчётах, проверьте датащит именно вашей модели диска. Но для понимания механизма проблемы достаточно порядка величины — а он почти не изменился за последние 10-15 лет, в отличие от объёма дисков.
Что физически происходит при ребилде RAID 5
RAID 5 хранит чётность, распределённую по всем дискам массива, и переживает отказ одного диска: данные с любого места на «упавшем» диске можно восстановить, зная содержимое соответствующих блоков на всех остальных дисках и применив XOR. Подробно про этот механизм и про то, что происходит в первые минуты после сбоя — в статье как RAID-контроллер ведёт себя при отказе диска.
Здесь важен один факт: чтобы восстановить содержимое заменённого диска, контроллеру (программному или аппаратному) нужно прочитать целиком данные со всех оставшихся дисков массива — от первого до последнего сектора, без исключений. Это не выборочное чтение «только занятых блоков» в упрощённом понимании — по сути это последовательный проход по всему адресному пространству каждого выжившего диска, поблочно, чтобы для каждой полосы (stripe) вычислить недостающий блок через чётность и записать его на новый диск.
Практический процесс замены диска описан в статье замена диска без простоя на RAID — там же видно, что весь этот период массив работает в degraded-режиме: без диска-«соседа», содержащего чётность или данные, у вас нет резерва избыточности. Если что-то пойдёт не так именно сейчас — восстанавливать данные будет не из чего.
И вот здесь в игру вступает URE: чем больше данных нужно прочитать за один ребилд, тем выше шанс встретить хотя бы одну неисправимую ошибку чтения на одном из оставшихся дисков — именно в тот момент, когда возможности исправить её через избыточность уже нет.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать серверСчитаем вероятность: формула и что она показывает
Возьмём упрощённую, но содержательную модель. Пусть у нас k оставшихся исправных дисков, каждый ёмкостью C бит, и паспортная вероятность неисправимой ошибки на бит чтения p = 1/URE. Общее число бит, которое нужно прочитать за ребилд:
N = k × C
Вероятность того, что при чтении N бит НЕ встретится ни одной неисправимой ошибки:
P(без ошибок) ≈ (1 - p)^N ≈ e^(-N × p)
И, соответственно, вероятность встретить хотя бы одну ошибку за ребилд:
P(хотя бы одна URE) ≈ 1 - e^(-N × p)
Смысл формулы простой и интуитивный: вероятность растёт с объёмом прочитанных данных N почти линейно, пока она мала, и стремится к 100%, когда N × p приближается к единице или превышает её. А N — это произведение количества дисков на их ёмкость. Увеличиваете ёмкость каждого диска в массиве в 8 раз (например, переходите с дисков на 1 ТБ на диски на 8 ТБ) — при том же уровне URE риск встретить ошибку за один ребилд растёт примерно во столько же раз.
Дальше — не абстракция, а конкретные цифры на этой формуле.
Таблица: старые маленькие диски против современных больших
Возьмём массив RAID 5 из 8 дисков (после отказа одного — 7 дисков читаются полностью для ребилда) и посчитаем вероятность встретить хотя бы одну URE при разных ёмкостях дисков и двух типовых уровнях URE из спецификаций:
| Ёмкость диска | Прочитано за ребилд (7 дисков) | P(URE) при 1 на 10^14 бит | P(URE) при 1 на 10^15 бит |
|---|---|---|---|
| 250 ГБ (типичный диск 2008-2010 гг.) | ~1,75 ТБ | ~13% | ~1,4% |
| 1 ТБ | ~7 ТБ | ~43% | ~5,5% |
| 4 ТБ | ~28 ТБ | ~89% | ~20% |
| 8 ТБ | ~56 ТБ | ~99% | ~36% |
| 16 ТБ (типичный диск 2025-2026 гг.) | ~112 ТБ | >99,9% | ~59% |
Это иллюстративный расчёт по приведённой формуле с типовыми порядками URE из публичных спецификаций, а не измерение конкретных дисков — реальная цифра для вашей модели и вашего контроллера может отличаться, и часть неисправимых ошибок современные диски и контроллеры дополнительно отрабатывают через переназначение секторов заранее, до того как это станет заметно при ребилде. Но порядок изменения принципиален: на дисках 250 ГБ даже при консервативном (для той эпохи) значении URE риск был в районе 10-15%, а на дисках 16 ТБ при том же классе диска он приближается к гарантированному событию. Даже переход на диски корпоративного класса с URE на порядок лучше не возвращает нас к безопасным 1-2%, а лишь отодвигает проблему — на больших ёмкостях риск всё равно измеряется десятками процентов.
Почему объём дисков растёт быстрее, чем надёжность URE
За последние полтора десятка лет ёмкость одного диска в массовом сегменте выросла примерно в 30-60 раз (от условных 250-500 ГБ до 12-20 ТБ), а типовой порядок URE в спецификациях сдвинулся в лучшем случае с 10^14 до 10^15 для части моделей — то есть в 10 раз, и то не для всех линеек. Ёмкость растёт быстрее, чем надёжность чтения на бит, и разрыв между ними — это и есть источник роста риска.
Есть и второй эффект, который усиливает первый: время ребилда тоже растёт вместе с ёмкостью диска. Диск на 250 ГБ можно было полностью прочитать за десятки минут; диск на 16 ТБ на реальной последовательной скорости чтения читается уже много часов, а с учётом того, что массив в degraded-режиме часто продолжает обслуживать боевую нагрузку параллельно с ребилдом, это время растягивается ещё сильнее. Чем дольше массив находится в состоянии без резерва избыточности, тем дольше открыто окно, в которое может «прилететь» и второй отказ — уже не URE на секторе, а полный отказ ещё одного физического диска. Для RAID 5 второй такой отказ (любого рода) в течение окна ребилда означает потерю массива целиком.
Что делать вместо классического RAID 5 на больших дисках
Прямое следствие из математики выше — на больших современных дисках одинарная чётность перестаёт быть комфортным запасом прочности, особенно при малом числе дисков в массиве или при интенсивном использовании. Практические альтернативы:
- RAID 6 — двойная чётность, массив переживает отказ двух дисков одновременно. Для отказа с потерей данных здесь нужно, чтобы во время ребилда произошёл ещё один полный отказ диска ИЛИ чтобы неисправимая ошибка встретилась уже после того, как избыточность снизилась до нуля (после второго события) — то есть требуется практически два независимых неблагоприятных события подряд вместо одного. Хорошее сравнение с альтернативным уровнем — в статье RAID 10 или RAID 6: что выбрать.
- RAID 10 — зеркалирование пар с чередованием. Ребилд восстанавливает диск копированием с его зеркальной пары, а не чтением всего массива — объём операции на порядок меньше, и она не зависит от количества дисков в массиве. Расплата — полезная ёмкость всего 50% от суммарной, а не N-1 дисков, как в RAID 5.
- Регулярный scrubbing (patrol read) — периодическая фоновая проверка всех секторов массива в исправном состоянии, когда есть резерв избыточности и найденную URE можно тихо исправить, а не наткнуться на неё в самый неподходящий момент во время ребилда. Это не заменяет смену уровня RAID, но снижает вероятность «накопленных» нечитаемых секторов к моменту реального отказа.
- Файловые системы с контрольными суммами (ZFS, Btrfs) — они проверяют контрольную сумму на каждом чтении и умеют самостоятельно восстанавливать повреждённый блок из избыточности на уровне файловой системы, что даёт дополнительный уровень защиты поверх аппаратного RAID или вместо него (например, ZFS RAID-Z2 — прямой аналог RAID 6 с проверкой целостности данных).
- Резервные копии отдельно от RAID — RAID не заменяет бэкап ни при каком уровне избыточности: он защищает от отказа диска, а не от случайного удаления, шифровальщика или ошибки в приложении. Про это отдельно и подробно — в статье миф «RAID — это резервная копия».
Практическое правило, которое можно использовать как ориентир при выборе конфигурации: чем больше ёмкость одного диска в массиве и чем больше дисков в самом массиве (то есть больше данных приходится читать за один ребилд), тем меньше оснований оставаться на одинарной чётности. Для дисков в пределах 1-2 ТБ в небольшом массиве RAID 5 всё ещё может быть разумным компромиссом; для современных 8-16 ТБ дисков и массивов от 6-8 дисков разумнее закладывать RAID 6 или RAID 10 сразу, а не после первого неприятного инцидента.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать серверНужны сами нейросети для контента?
Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.
Частые вопросы
Если у меня аппаратный RAID-контроллер с кэшем и BBU, снижает ли это риск URE при ребилде?
Кэш и защита от потери питания (BBU/flash-backed cache) защищают от потери данных при внезапном отключении питания во время записи, но не отменяют физическую вероятность неисправимой ошибки чтения на конкретном секторе — это разные механизмы отказа. Контроллер лишь может по-разному на неё реагировать (пометить сектор как bad, попробовать переназначение), но сам факт нечитаемого сектора кэш не устраняет.
Можно ли снизить риск, просто увеличив число дисков в массиве вместо ёмкости каждого?
Нет, это ухудшает ситуацию с другой стороны: при том же суммарном объёме данных больше дисков в RAID 5 означает больше независимых источников отказа (выше вероятность, что откажет какой-то диск вообще) и не уменьшает объём чтения на ребилд, если ёмкость отдельного диска не меняется. Формула выше зависит именно от произведения количества оставшихся дисков на их ёмкость.
SSD в RAID 5 подвержены той же проблеме?
У SSD своя паспортная характеристика неисправимых ошибок (обычно она отличается от HDD и часто указывается как отдельная величина или связана с UBER для флеш-памяти), и в целом современные SSD часто имеют более высокий порядок надёжности чтения, чем HDD того же класса. Но принцип тот же: чем больше ёмкость накопителя и чем больше данных читается за ребилд, тем выше совокупная вероятность встретить ошибку — проверяйте датащит конкретной модели, а не переносите цифры HDD на SSD.
Как узнать URE именно моего диска?
Определите точную модель командой smartctl -i /dev/sdX (пакет smartmontools) и найдите полный даташит производителя по этой модели — параметр может называться URE, UBER, Non-recoverable Read Errors per Bits Read или похоже. В маркетинговых карточках на сайте продавца этого параметра обычно нет, он есть только в PDF-спецификации.
Если ребилд уже идёт и я боюсь второй ошибки — что делать прямо сейчас?
Не создавайте на массиве дополнительную нагрузку сверх необходимой, дайте ребилду закончиться при минимальном параллельном I/O — это сократит время нахождения в degraded-режиме. Если в этот момент есть возможность снять свежий бэкап критичных данных с других, ещё не участвующих в ребилде источников — сделайте это, не дожидаясь завершения ребилда.
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →