RAID в домашней и офисной практике давно перестал быть экзотикой из серверных залов. Любой, кто собирает машину под видеомонтаж, игровую библиотеку или сетевое хранилище, рано или поздно упирается в вопрос: как разложить данные по нескольким дискам, чтобы было быстрее, безопаснее или дешевле на гигабайт. Аббревиатура расшифровывается как избыточный массив независимых дисков, но слово "избыточный" верно не для всех уровней: RAID 0 не хранит ничего лишнего и наоборот ускоряет отказ. Понимание того, где каждый уровень забирает надёжность и где возвращает её, отличает продуманную конфигурацию от набора дисков, который красиво выглядит в диспетчере устройств. Эта статья разбирает механику уровней 0, 1, 5 и 10, считает полезную ёмкость на примере трёх дисков по 4 ТБ, объясняет ловушку URE при перестроении массива и сравнивает два встроенных механизма Windows: динамические диски и Storage Spaces.
Страйпинг RAID 0 как обмен надёжности на скорость
Страйпинг разрезает поток данных на блоки фиксированного размера, обычно от 64 КБ до 256 КБ, и раскладывает их по всем дискам массива по кругу. Файл пишется одновременно на несколько шпинделей, поэтому линейное чтение и запись масштабируются почти линейно: четыре диска выдают примерно учетверённую пропускную способность на последовательных операциях. Полезная ёмкость равна сумме ёмкостей всех участников.
Плата за это жёсткая. Массив жив, пока жив каждый диск, а вероятность отказа хотя бы одного накопителя растёт с их числом. Если годовая вероятность отказа одного диска составляет p, то для N дисков шанс потерять массив за тот же период приближается к N вариантам p. Два диска в страйпе удваивают ожидаемую частоту потери данных, восемь повышают её в восемь раз. Скорость умножается на N, надёжность делится примерно на N, и это самая короткая формула RAID 0.
На практике такой массив имеет смысл там, где данные временны или легко восстановимы: скретч-диски для превью видео, кэши, временные папки компиляции. Произвольный доступ на мелких операциях почти не выигрывает, потому что маленький запрос всё равно обслуживается одним диском, а выигрыш приходит только на длинных последовательных потоках. Важно и то, что размеры дисков в страйпе желательно держать одинаковыми: при смешении объёмов массив обычно ограничивается меньшим участником.
Зеркало RAID 1 как самая простая избыточность
RAID 1 пишет каждый блок сразу на два диска. Полезная ёмкость равна ёмкости одного участника, то есть ровно половине суммарной, и это главная цена уровня. Зато массив переживает отказ любого одного диска, перестроение после замены выполняется тривиальным поблочным копированием без вычислений, а логика настолько проста, что ошибиться в ней сложно.
Чтение из зеркала потенциально быстрее одиночного диска: грамотный драйвер распределяет запросы между копиями и получает почти удвоенную скорость случайного чтения. Запись же чуть медленнее одиночного диска, потому что операция завершается, когда отработал самый медленный участник пары. Для системных томов, домашних фотоархивов и любых наборов данных, где ценность файлов давно превысила стоимость второго диска, зеркало остаётся самым предсказуемым выбором.
Общий принцип неизменен и в расширениях вроде RAID 1E: каждый блок существует минимум в двух физических экземплярах, восстановление сводится к копированию, а ёмкость резко ограничена долей избыточности.
RAID 5 с XOR паритетом и плата за короткую запись
RAID 5 распределяет по дискам не только данные, но и паритет, вычисленный операцией XOR над блоками одного страйпа. Если страйп лежит на N дисках, то N-1 дисков несут полезные данные, а один несёт XOR от остальных. Диск с паритетом для каждого следующего страйпа меняется по кругу, чтобы не превращать один накопитель в узкое место. Массив переживает отказ ровно одного диска: содержимое потерянного в страйпе восстанавливается как XOR всех оставшихся.
Экономия ёмкости драматична по сравнению с зеркалом: минимальный массив из трёх дисков отдаёт данным две трети объёма, массив из восьми почти восемь девятых. Линейное чтение почти не уступает страйпу из N-1 дисков. Но короткая запись стоит дорого, и этот эффект называется small-write penalty. Чтобы записать один блок, меньший полного страйпа, контроллер делает четыре обращения к дискам: читает старые данные, читает старый паритет, вычисляет новый паритет как XOR старого паритета со старыми и новыми данными, затем пишет новые данные и новый паритет.
Полнострайповая запись обходится без чтений: если приложение пишет весь страйп целиком, контроллер считает паритет из полных данных и льёт их на все диски одним проходом. Поэтому скорость записи RAID 5 критично зависит от размера страйпа и характера нагрузки. Базы данных и виртуальные машины с мелкими случайными записями на RAID 5 традиционно страдают, а архивные и медианагрузки чувствуют себя отлично.
Деградированный массив, потерявший один диск, читается медленно: каждый запрос к пропавшим блокам требует чтения всех остальных дисков страйпа и вычисления XOR. Именно поэтому перестроение после замены диска выполняют немедленно, а не "когда появится время".
RAID 10 как компромисс без вычислений паритета
RAID 10 строится как страйп поверх зеркал: диски разбиваются на зеркальные пары, а данные раскладываются по парам чередованием. Такой массив переживает отказ одного диска в каждой паре и даже нескольких дисков, если отказы не придутся на половины одного зеркала. Полезная ёмкость всегда равна половине суммарной, сколько бы дисков ни стояло.
Сильная сторона RAID 10 в производительности записи. Здесь нет XOR, нет цикла чтение-модификация-запись, короткая запись удваивает работу ровно вдвое и не больше. Для нагрузок с интенсивной малой записью RAID 10 остаётся классическим ответом. Перестроение после отказа копирует одно зеркало, трогая только два диска пары, поэтому восстановление не грузит весь массив и не длится сутками при тех же объёмах, что в RAID 5.
Слабая сторона очевидна: половина купленных гигабайт уходит на избыточность, и с ростом числа дисков этот налог не тает. Выбор между 10 и 5 обычно сводится к характеру нагрузки: писать много и мелко или нести архивы и видео.
Динамические диски против Storage Spaces
Windows предлагает два встроенных механизма программного RAID. Первый, динамические диски, восходит ещё к Windows 2000: страйп и зеркало доступны через оснастку "Управление дисками". Механизм прост и поддерживает загрузочные тома, но считается устаревшим. Массив на динамических дисках привязан к конкретной системе, перенос между машинами требует импорта чужих дисков, а новых возможностей Windows уже не добавляет.
Второй механизм, Storage Spaces, пришёл с Windows 8 и Server 2012 и реализует пулы хранения: физические диски складываются в пул, поверх которого нарезаются виртуальные пространства с простой разметкой, зеркалом и паритетом. Паритет в Storage Spaces соответствует логике RAID 5, зеркала соответствуют RAID 1. Пулы переносятся между машинами одним подключением дисков, поддерживается постепенное наращивание пула дисками разных размеров, тонкая подготовка позволяет создать том логически больше физического места и доукомплектовать железо позже.
На практике есть оговорки: скорость записи в паритетных пространствах консервативна, загрузку системы с пространства Windows не разрешает. Динамические диски годятся, когда нужен простой способ объединить два диска внутри одной машины. Storage Spaces выигрывает там, где планируется рост и перенос массива.
Существует и третий путь: аппаратный контроллер. Адаптер с батареей и кэшем снимает нагрузку с процессора и ускоряет XOR-вычисления, но вносит зависимость: при отказе контроллера массив без совместимой платы той же логики может не собраться. Программный RAID Windows переносим и дёшев, но накладные расходы на процессор и ограничения загрузки остаются платой за универсальность.
URE ловушка при rebuild и реальные объёмы
Производители жёстких дисков указывают частоту невосстановимых ошибок чтения порядка одной на 10^14 бит. Это число выглядит астрономически, пока его не перевести в терабайты: 10^14 бит примерно равны 12,5 ТБ прочитанного. При перестроении RAID 5 контроллер обязан прочесть все диски целиком. Массив из нескольких дисков по 4 ТБ на rebuild читает по 4 ТБ с каждого оставшегося, и суммарный объём чтения приближается к номиналу одной URE. Шанс наткнуться на битый сектор в процессе восстановления становится значимым. Одна URE во время деградированного rebuild ломает соответствующий страйп, и в худшем случае весь rebuild останавливается.
Ёмкости растут быстрее, чем падает интенсивность ошибок, и риск усугубляется. Практических выводов три: большие массивы предпочтительно строить на RAID 6 или двойном зеркале, где rebuild переживёт одну ошибку чтения, держать актуальную резервную копию независимо от уровня RAID и не затягивать замену отказавшего диска.
Конкретный пример с тремя дисками по 4 ТБ. В RAID 0 полезная ёмкость составит 12 ТБ: все участники отданы данным, скорость утроена, отказ любого диска теряет всё. В RAID 1 из трёх дисков зеркалируются два по 4 ТБ, третий остаётся резервом, полезная часть равна 4 ТБ. В RAID 5 один эквивалент диска уходит под паритет, и полезный объём равен (N-1) умножить на 4 ТБ, то есть 8 ТБ. Те же три диска, три принципиально разных результата: 12, 4 и 8 ТБ.
RAID это не резервная копия
Самое распространённое заблуждение звучит как "у меня зеркало, зачем бэкап". RAID защищает от одного класса событий: физического отказа диска. От всего остального он не защищает и множит ущерб. Удалённый файл исчезает с обеих половин зеркала, шифровальщик равно искажает обе копии, сбой файловой системы портит массив целиком.
Отдельно стоит общий источник питания, общий корпус и общая партия дисков: два накопителя из одной коробки в одну розетку имеют коррелированный риск, и зеркальная защита тает. Настоящая копия живёт на независимом носителе, желательно в отдельном месте, а RAID рассматривается как средство непрерывности работы: он даёт время, он не даёт прошлого.
- Выбрать цель: скорость, избыточность или баланс, и только потом уровень.
- Посчитать полезную ёмкость и сценарий отказа.
- Проверить размер страйпа под профиль нагрузки.
- Запланировать копирование на независимый носитель.
- Проверить процедуру rebuild до первого реального отказа.
Выравнивание страйпов и мелочи которые решают всё
Выравнивание страйпов это согласование границ файловой системы с границами страйпов массива. Кластер NTFS по умолчанию 4 КБ, размер страйпа варьируется, и если начало раздела смещено относительно начала страйпа, одна запись кластера может задеть два смежных блока разных дисков. Результатом становятся дополнительные операции, что на RAID 5 превращает малую запись в каскад.
Современные редакции Windows выравнивают разделы по границе 1 МБ автоматически, и при типовом страйпе в 64, 128 или 256 КБ этого достаточно. Проблема всплывает при старых утилитах нарезки, при клонировании разделов и при нестандартных размерах страйпа. Практическая проверка проста: смещение раздела делится на размер страйпа без остатка. Для архивных массивов под видео 128 или 256 КБ работают лучше коротких, а для баз данных короткий страйп облегчает участь кэша.
Второй слой выравнивания касается SSD: страйп по твердотельникам выигрывает от согласования с размером страницы и блока стирания, TRIM через программный RAID работает не везде, и контроллерный массив на SSD без аппаратного TRIM со временем проседает по записи. Взвешенный выбор уровня, выровненная разметка и отдельно стоящая резервная копия образуют ту связку, при которой цифры из спецификаций начинают совпадать с цифрами в измерениях, а rebuild заканчивается успехом, а не сюрпризом в отдельно взятую пятницу вечером. Проверка на практике делается бенчмарками последовательного и случайного доступа до ввода массива в эксплуатацию: если измеренные цифры далеки от расчётных, почти всегда виноваты размер блока приложения, смещение раздела или отключённый кэш записи. Систематическая проверка этих трёх пунктов экономит недели отладки на живых данных и позволяет обнаружить кривое выравнивание до того, как массив окажется под реальной нагрузкой с деградированным накопителем.