Спор о том, собирать массив на выделенном контроллере или средствами операционной системы, почти никогда не решается сравнением пиковой скорости. На последовательном чтении оба подхода упираются в одни и те же диски и дают близкий результат. Разница видна в другом: как система ведёт себя в момент отказа накопителя, что происходит при внезапном пропадании питания и сколько времени занимает перестроение. Эти три сценария и определяют выбор.
Что физически делает выделенный контроллер
Аппаратный контроллер — это отдельный вычислитель на плате расширения: собственный процессор, собственная память, собственная прошивка. Он занимает линии PCIe, забирает диски себе и отдаёт хосту логические тома так, как если бы это были обычные одиночные накопители. Расчёт чётности для уровней с избыточностью выполняется на его процессоре, а не на центральном. Операционная система при этом не знает, что за томом стоит группа дисков; для неё это одно устройство.
Из такой изоляции следует главное свойство: описание массива хранится в метаданных на самих дисках и в энергонезависимой памяти платы. Массив собирается до старта ОС, поэтому с него можно грузиться, и он переживает переустановку системы без плясок с загрузчиком. Обратная сторона — привязка к семейству контроллеров: диски с чужими метаданными другая плата обычно не подхватит, и запасной контроллер той же серии становится частью плана восстановления.
Кеш записи и то, чем он оплачен
Основная причина, по которой аппаратные решения долго держались в серверах, — кеш записи. Контроллер подтверждает операцию хосту сразу, как только данные попали в его память, не дожидаясь, пока они лягут на пластины. Для нагрузок с большим числом мелких синхронных записей — журналы баз данных, метаданные файловых систем — это меняет отклик в разы, потому что убирает ожидание оборота шпинделя из критического пути.
Риск при этом очевиден: пропадание питания с непустым кешем означает потерю данных, которые уже подтверждены приложению. Поэтому кеш записи включают только вместе с батареей или суперконденсатором и флеш-модулем — при отключении содержимое переносится в энергонезависимую память и дописывается на диски при следующем старте. Когда модуль защиты разряжен или деградировал, прошивка сама переводит том в режим сквозной записи. Производительность на синхронных операциях падает до уровня голых дисков, и это штатное поведение, а не поломка. Администратор, не знающий о таком переключении, обычно начинает искать проблему в накопителях; подробности по конкретным семействам плат удобно смотреть в разделе про RAID-контроллеры.
Где программный массив объективно сильнее
Программная реализация работает на центральном процессоре и видит диски напрямую. Первое следствие — прозрачность: показатели самодиагностики каждого накопителя доступны без прослойки, ошибки видно поимённо, а не как обобщённый статус тома. Второе — независимость от железа: набор дисков переносится на другую машину без совпадения по модели контроллера, достаточно совместимой версии программного слоя.
Третье и самое существенное — контроль целостности. Современные программные тома умеют хранить контрольные суммы данных, а не только чётность, и при чтении отличают правильный блок от испорченного. Классический контроллер этого не делает: он знает, что диск ответил, но не знает, что диск ответил неверно. Тихая порча данных на длинной дистанции ловится именно контрольными суммами. Затраты на расчёт чётности для современных ядер несущественны, и аргумент про разгрузку процессора давно потерял вес.
Отказ диска и часы перестроения
Различие проявляется резче всего при замене накопителя. Аппаратный контроллер начинает перестроение по всей ёмкости диска независимо от того, сколько на томе реальных данных: он оперирует блоками, а не файлами. На больших дисках это десятки часов, в течение которых оставшиеся накопители читаются целиком под повышенной нагрузкой, а массив не имеет избыточности.
Программный слой, интегрированный с файловой системой, восстанавливает только занятые блоки. На полупустом томе разница во времени получается кратной, и окно уязвимости сокращается соответственно. Плюс к этому программная реализация обычно даёт удобное регулирование приоритета: перестроение можно замедлить в рабочие часы и ускорить ночью, не заходя в отдельную утилиту управления платой.
Как выбирать под задачу
Выделенный контроллер оправдан там, где нужен загрузочный отказоустойчивый том, где нагрузка состоит из мелких синхронных записей и где важна горячая замена дисков через корзину с индикацией. Программный массив предпочтителен для хранилищ данных, где ценится проверяемая целостность, переносимость и быстрое восстановление, а загрузка вынесена на отдельную пару накопителей.
Комбинированная схема встречается чаще всего: небольшой аппаратный том под систему и программный пул под данные. Проектировать эту связку стоит вместе с остальными узлами — типом дисков, корзинами и питанием, как это описано в порядке подбора узлов. Ошибка обычно не в выборе подхода, а в том, что режим кеша, состояние батареи и время перестроения не проверяются до аварии, а выясняются во время неё.