Домашний NAS часто собирают из дисков разного размера, купленных в разное время. Классический RAID в такой ситуации неудобен: он требует одинаковых дисков, перестраивается часами и не спасает от тихой порчи данных. SnapRAID предлагает другой компромисс — защиту на основе снимков и чётности, без RAID-контроллера и без переформатирования уже заполненных дисков.
Чем SnapRAID отличается от RAID
RAID работает в реальном времени: каждый блок данных сразу дублируется или защищается чётностью. SnapRAID считает чётность по расписанию, по снимку состояния файлов. Это значит, что новые файлы защищены только после snapraid sync, а не в момент записи. Зато массив не «сыпется» целиком, диски могут быть разного размера, а данные остаются обычными файлами на обычных файловых системах.
SnapRAID — не замена резервному копированию. Он защищает от отказа диска и частично от битых секторов, но не от пожара, кражи, шифровальщика или ошибочного rm -rf, если изменение уже попало в чётность. Правильная схема: SnapRAID на основном массиве плюс отдельная копия важных данных на другом носителе или в другом месте.
Что понадобится
- Один или несколько дисков чётности не меньше самого большого диска данных.
- Диски данных с обычной ФС (ext4, XFS, Btrfs) и постоянными точками монтирования.
- Контроль питания: при отключении электричества синхронизация может прерваться.
- Мониторинг SMART и свободного места.
Чётность можно хранить на нескольких дисках: один защищает от одного отказа, два — от двух. Больше трёх уровней в домашней системе нужно редко, но SnapRAID поддерживает до шести. Главное правило: диск чётности не должен быть меньше самого большого диска с данными.
Разметка и монтирование
Сначала наведите порядок в именах: /dev/sdb может поменяться после перезагрузки. Используйте UUID в /etc/fstab и отдельные каталоги вида /srv/disk1, /srv/disk2, /srv/parity. Проверьте, что каждый диск действительно смонтирован, а не просто существует пустая точка монтирования.
lsblk -f
sudo blkid
sudo mkdir -p /srv/disk1 /srv/disk2 /srv/parity
for d in /srv/disk1 /srv/disk2 /srv/parity; do findmnt --target "$d"; done
Пример строки fstab для ext4: UUID=... /srv/disk1 ext4 defaults,noatime 0 2. После правки выполните sudo systemctl daemon-reload и sudo mount -a, затем ещё раз проверьте findmnt. Ошибка в fstab, из-за которой диск не поднялся, — самая частая причина «внезапной потери» данных при синхронизации.
Установка и конфигурация
В Debian и Ubuntu SnapRAID есть в репозитории. Дополнительно поставьте smartmontools, чтобы видеть здоровье дисков.
sudo apt update
sudo apt install -y snapraid smartmontools
snapraid --version
sudo systemctl enable --now smartd
Конфигурация хранится в /etc/snapraid.conf. Минимальный пример с двумя дисками данных и одним диском чётности:
parity /srv/parity/snapraid.parity
content /var/snapraid/snapraid.content
content /srv/disk1/snapraid.content
content /srv/disk2/snapraid.content
data d1 /srv/disk1
data d2 /srv/disk2
exclude *.tmp
exclude *.unrecoverable
exclude /lost+found/
autosave 500
Файлы content — это индекс. Держите несколько копий: на диске чётности и на каждом диске данных. Если один индекс повреждён, SnapRAID возьмёт другой. Строка autosave управляет сохранением состояния во время длинных операций; значение можно оставить по умолчанию.
Первый снимок и синхронизация
Сначала посмотрите, что изменилось. diff показывает добавленные, изменённые и удалённые файлы и ничего не пишет на диск. Это безопасная операция, с которой стоит начинать каждую проверку.
sudo snapraid diff
sudo snapraid sync
sudo snapraid status
sudo snapraid smart
Первый sync читает все данные и создаёт чётность — на массиве в несколько терабайт это может занять ночь. Не прерывайте процесс без необходимости. После завершения status покажет покрытие, количество файлов и последнюю синхронизацию, а smart — температуру и переназначенные сектора.
Проверка целостности
Чётность бесполезна, если она сама повреждена. scrub читает блоки, сверяет хэши и при необходимости исправляет данные по чётности. Запускайте его небольшими порциями, чтобы не изнашивать диски и не мешать работе.
sudo snapraid scrub -p 10 -o 30
sudo snapraid check
sudo snapraid status -v
-p 10 означает проверить около 10% массива, -o 30 — брать блоки, не проверявшиеся 30 дней. Полный check полезен перед важным обновлением, но он читает весь массив и занимает много времени. Результаты сохраняйте в журнал.
Восстановление после отказа
Если диск данных вышел из строя, не меняйте конфигурацию сразу. Установите новый диск, создайте на нём файловую систему, смонтируйте в ту же точку и убедитесь, что запись ведётся именно туда. Затем выполните восстановление отсутствующих файлов.
sudo snapraid fix -m
sudo snapraid fix -f /srv/disk1/photo/2025/album.raw
sudo snapraid status
-m восстанавливает все отсутствующие файлы, -f — один конкретный. Если диск не отказал полностью, а лишь имеет плохие сектора, сначала снимите с него всё читаемое, и только потом запускайте восстановление. После восстановления обязательно сделайте sync, иначе чётность останется в старом состоянии.
Автоматизация и защита от ошибок
Ручной запуск легко забыть. Сделайте скрипт с блокировкой, чтобы два процесса не работали одновременно, и запускайте его по таймеру systemd. Перед синхронизацией проверяйте, что диски смонтированы: если точка монтирования пуста, sync может решить, что файлы удалены.
#!/bin/sh
set -eu
mountpoint -q /srv/disk1 && mountpoint -q /srv/disk2 && mountpoint -q /srv/parity
snapraid diff
snapraid sync
snapraid scrub -p 5 -o 30
В таймере задайте ночное время и Persistent=true, чтобы пропущенный запуск выполнился после включения. Логи складывайте в /var/log/snapraid/ и настройте ротацию. Если diff показывает слишком много удалений, остановитесь и разберитесь: возможно, диск не смонтировался или приложение пишет не туда.
Типичные ошибки
- Хранить чётность на том же физическом диске, что и данные.
- Запускать
syncпри несмонтированном диске данных. - Считать SnapRAID резервной копией и не иметь второй копии.
- Игнорировать SMART и перегрев дисков.
- Менять размер или порядок дисков в конфигурации без пересоздания чётности.
Итог
SnapRAID даёт домашнему массиву защиту от отказа диска без RAID-контроллера, без переформатирования и без жёсткой привязки к одинаковым накопителям. Он требует дисциплины: аккуратного fstab, регулярного sync, периодического scrub и отдельной резервной копии. Если относиться к нему как к инструменту защиты от сбоя железа, а не как к волшебной замене backup, он годами работает предсказуемо и без сюрпризов.