# RAID - software-raid через mdadm _Файловая система · LinuxLab Knowledge Base_ **TL;DR:** RAID объединяет несколько [[block-devices]] в один логический с избыточностью или скоростью. На Linux - `mdadm`. Hardware-RAID - отдельная история. ## Уровни RAID | Уровень | Что делает | Пример из 4 дисков по 1 TB | Защита | |---|---|---|---| | **0 (stripe)** | Распараллелить I/O | 4 TB | НЕТ; падение 1 диска = потеря всего | | **1 (mirror)** | Полные копии | 1 TB (зеркало) | Падение N-1 дисков | | **5** | Чередование + parity | 3 TB | Падение 1 диска | | **6** | Чередование + 2 parity | 2 TB | Падение 2 дисков | | **10** | Stripe из mirror'ов | 2 TB | Падение 1 на каждое зеркало | RAID 0 - не RAID в смысле reliability, это просто stripe для скорости. ## Создание ```bash # RAID 1 (mirror) из двух дисков sudo mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb1 /dev/sdc1 cat /proc/mdstat # прогресс собрки sudo mdadm --detail /dev/md0 # подробно # Создать ФС sudo mkfs.ext4 /dev/md0 sudo mount /dev/md0 /mnt/raid # Сохранить конфиг чтобы массив собрался при ребуте sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf sudo update-initramfs -u # debian/ubuntu ``` ## Состояние массива ```bash cat /proc/mdstat # → обычно вида: # md0 : active raid1 sdb1[0] sdc1[1] # 976630464 blocks super 1.2 [2/2] [UU] # → [UU] = оба диска "Up"; [U_] = один диск выпал # → "resync" / "recovery" с прогрессом - идёт перестроение sudo mdadm --detail /dev/md0 # → State: clean / degraded / resyncing ``` Spec файл `/proc/mdstat` - главный источник правды. Healthcheck просто парсит его на наличие `[U_]`. ## Падение диска ```bash # Симулировать падение sudo mdadm /dev/md0 --fail /dev/sdc1 # Удалить из массива sudo mdadm /dev/md0 --remove /dev/sdc1 # Заменить новым диском (тот же размер!) sudo mdadm /dev/md0 --add /dev/sdd1 # Массив автоматически начнёт rebuild - следить: watch -n 1 cat /proc/mdstat ``` Пока идёт rebuild - массив deg degraded, ещё одна потеря = всё. На больших RAID 5/6 rebuild может занимать **дни** - отсюда репутация RAID 5 как «опасного» для дисков >2 TB. ## Spare-диск ```bash sudo mdadm --create /dev/md0 --level=5 --raid-devices=3 \ --spare-devices=1 /dev/sd{b,c,d}1 /dev/sde1 ``` Spare ждёт в пуле; при падении любого active диска mdadm **автоматически** запустит rebuild на него. Сильно сокращает окно уязвимости. ## Стек: RAID + LVM + ФС Стандартный server-setup: ``` /dev/sd[bcd]1 ← RAID 5 → /dev/md0 ← LVM PV → vg-data → lv-web → ext4 → /mnt/web ``` Каждый слой добавляет своё: - RAID - reliability - LVM - гибкость размеров и снапшоты - ФС - собственно файлы ## Hardware vs software - **Hardware RAID** (контроллер на PCI): ОС видит готовый «диск». Плюсы: write-cache с батарейкой, prozessor разгружен. Минусы: vendor lock - упал контроллер → нужен такой же; firmware-bugs. - **Software RAID** (mdadm): на любом железе, переносим, ОС видит и контролирует. Минусы: использует CPU и RAM; нет нативного battery-backed cache. Для большинства случаев **software RAID + UPS** - лучше: переносимо, отлаживаемо, нет vendor lock'а. ## ZFS и btrfs как альтернатива У `zfs` и `btrfs` есть **встроенный RAID** (RAID-Z, btrfs raid). Они умеют чексуммы данных и поэтому лучше детектят bit rot на чтении (md-RAID доверяет «диск сказал OK»). Минус - сложнее, btrfs RAID 5/6 исторически багованный. ## Команды ```bash cat /proc/mdstat ``` Состояние всех md-массивов - основной мониторинг ```bash sudo mdadm --detail /dev/md0 ``` Подробно: state, devices, last sync, errors ```bash sudo mdadm --create /dev/md0 -l 1 -n 2 /dev/sdb1 /dev/sdc1 ``` Создать RAID 1 (mirror) из двух дисков ```bash sudo mdadm /dev/md0 --add /dev/sde1 ``` Добавить новый диск в массив (для replacement или rebuild) ```bash echo check | sudo tee /sys/block/md0/md/sync_action ``` Запустить scrubbing - пройти все блоки, проверить consistency ## См. также - [Block devices - диски в Linux](/kb/block-devices.md) - [LVM - Logical Volume Manager](/kb/lvm.md) - [btrfs - copy-on-write, subvolumes и снапшоты](/kb/btrfs.md) - [Файловые системы: ext4, xfs, btrfs, zfs](/kb/filesystems.md)