← Linux: файловая система вглубь
12 мин · средне · Урок 6 из 7

RAID: 0, 1, 5, 10

RAID 0, 1, 5, 10: отказоустойчивость и ёмкость.

Зачем объединять диски

RAID (Redundant Array of Independent Disks) — способ собрать несколько физических дисков в один логический том. Цели две: получить скорость выше, чем у одного диска, или пережить отказ диска без потери данных. Разные уровни RAID решают эти задачи по-разному, и у каждого своя цена в ёмкости.

Собрать программный RAID в Linux можно через mdadm. Готовый массив виден в /proc/mdstat:

$ cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sdb1[1] sda1[0]
      976630464 blocks super 1.2 [2/2] [UU]

[UU] означает, что оба диска в строю. Если один выпадет, там окажется [U_].

RAID 0 — striping

RAID 0 разрезает данные на блоки и раскладывает их по дискам по очереди. Это striping (чередование). Запись и чтение идут параллельно на все диски, поэтому скорость растёт. Минимум для сборки — 2 диска.

Отказоустойчивости здесь нет вообще. Половина каждого файла лежит на одном диске, половина на другом. Отказ любого диска теряет весь том целиком.

# два диска в stripe, кусок 512 КБ
mdadm --create /dev/md0 --level=0 --raid-devices=2 /dev/sdb /dev/sdc

Полезная ёмкость равна сумме дисков. Два диска по 1 ТБ дают 2 ТБ. RAID 0 берут там, где нужна скорость, а данные не жалко или они есть где-то ещё.

RAID 1 — зеркало

RAID 1 пишет одинаковые копии на все диски массива. Это зеркало (mirror). Том остаётся живым, пока жив хотя бы один диск из пары. Минимум — 2 диска.

Плата за надёжность — ёмкость. Из двух дисков по 1 ТБ доступен 1 ТБ: полезная ёмкость 50%, вторая половина ушла на копию.

mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb /dev/sdc

Чтение может идти с обоих дисков сразу, так что скорость чтения выше. Запись идёт на оба, поэтому быстрее одиночного диска она не становится.

RAID 5 — striping с чётностью

RAID 5 тоже раскладывает данные полосами, но добавляет блок чётности (parity), посчитанный операцией XOR по остальным блокам полосы. Чётность распределена по всем дискам, не лежит на одном. Минимум — 3 диска.

Массив переживает отказ одного диска: по оставшимся данным и чётности недостающий блок восстанавливается. Полезная ёмкость равна (n-1)/n от суммы. Три диска по 1 ТБ дают 2 ТБ, четыре дают 3 ТБ.

mdadm --create /dev/md0 --level=5 --raid-devices=3 /dev/sdb /dev/sdc /dev/sdd

Опасный момент здесь — это окно восстановления. Пока массив в состоянии degraded (один диск уже выпал) заменяют диск и пересобирают полосы. Отказ второго диска до конца восстановления теряет весь том. RAID 5 держит только один отказ за раз.

RAID 10 — зеркало плюс stripe

RAID 10 сначала собирает диски в зеркальные пары, а поверх пар делает striping. Минимум — 4 диска. Полезная ёмкость 50%, как у зеркала.

Массив переживает несколько отказов сразу, при одном условии: ни одна зеркальная пара не должна потерять оба своих диска. Выпал по одному диску из разных пар, и том остаётся жив. Если выпали оба диска одной пары, том потерян.

mdadm --create /dev/md0 --level=10 --raid-devices=4 \
  /dev/sdb /dev/sdc /dev/sdd /dev/sde

Такой массив берут под нагруженные базы данных: скорость от striping и устойчивость от зеркал одновременно, ценой половины ёмкости.

RAID — это не бэкап

Вот сравнение уровней на одинаковом железе:

УровеньМинимум дисковПолезная ёмкостьПереживает отказ
RAID 02100%0 дисков
RAID 1250%1 диск (из пары)
RAID 53(n-1)/n1 диск
RAID 10450%по 1 диску из разных пар

Главная ловушка новичка: считать RAID заменой резервному копированию. RAID защищает от одного класса аварий: от смерти диска. Против случайного rm -rf, ошибки в скрипте или шифровальщика он бесполезен: массив честно зеркалит или размазывает по дискам уже испорченные данные.

# зеркало исправно продублирует эту команду на оба диска
rm -rf /var/data/*

Отдельный бэкап на другой носитель или в другое место остаётся обязательным. RAID и бэкап решают разные задачи и не заменяют друг друга.

Что важно запомнить

RAID объединяет диски ради скорости или устойчивости к отказу диска.

RAID 0 — striping, максимум скорости и ёмкости, ноль отказоустойчивости, минимум 2 диска.

RAID 1 — зеркало, 50% ёмкости, живёт пока жив один диск из пары, минимум 2.

RAID 5 — striping плюс чётность, переживает один отказ, минимум 3 диска, ёмкость (n-1)/n; второй отказ до конца восстановления теряет всё.

RAID 10 — зеркала под striping, минимум 4 диска, 50% ёмкости, держит несколько отказов, пока цела каждая пара.

RAID — не бэкап и не спасёт от rm или шифровальщика.

Дальше — короткий квиз по треку файловой системы.

Дрилл · вопросы как на собесе

Проверь себя без подсказок

Сформулируй ответ вслух или письменно, потом раскрой и честно отметь: знал или нет.

01

Что такое RAID? Опиши основные уровни.

LIN-006

Прошли материал до конца? Отметьте урок пройденным.