← На главную

Сдохла microSD на Raspberry Pi 4B — пересобрал с zram, btrfs и restic

19.07.2026 10:44 · hackernews

На Raspberry Pi 4B, который годами работал почти 24/7, умерла microSD-карта — видимо, добил её перепад напряжения после отключения света. fsck.ext4 находил и чинил ошибки, но после переподключения карты они появлялись снова. Пришлось констатировать смерть носителя.

Автор почти ничего не потерял: важные данные лежали на внешних HDD, конфиги хранились в NixOS, а .torrent-файлы и кэши Navidrome, Jellyfin и slskd легко восстановить. Инстанс Immich был забекаплен. Но инцидент серьёзно напугал, поэтому новую систему собрали с жёсткими мерами предосторожности.

Первым делом — минимизировать записи на свежую microSD. Включили zram для swap (сжатый блок в RAM), /tmp перевели на RAM-диск через boot.tmp.useTmpfs, а journald настроили на хранение логов в памяти (storage = "volatile"). Корневую файловую систему оставили на карте, но отключили atime опцией noatime — незачем писать на носитель при каждом чтении файла.

Внешние диски решили объединить в btrfs-пул с raid1 для данных и метаданных. Взяли старый 500-гигабайтный HDD из ноутбука и 320-гигабайтный Hitachi с логотипом Apple. Назвали пул «ポンコツ». Под каждый сервис завели отдельный subvolume — для чистоты и удобства бэкапов. Автор написал модуль autosubvol, который при помощи systemd.mount-юнитов автоматом создаёт и монтирует подтома. Для каждого сервиса в конфиге NixOS указывается mountPoint и requiredBy, и система сама поднимает нужные точки.

Для бэкапов сделали Nix-модуль-мост между sops-nix и restic. Резервируется /var/lib/immich, исключая уже закодированные видео и превьюхи. Прунинг — ежедневные копии за неделю, еженедельные за месяц, ежемесячные за три.

Группа media с setgid-битом (downloadDirPermissions = "2775") дала Transmission, Jellyfin и Navidrome общий доступ к ISO, наследуя права группы. Мониторинг пока ограничен btrfs scrub, но автор думает насчёт Prometheus и Grafana, хотя считает это оверкиллом.

В пул добавили 1-терабайтник, разметив первую половину и скопировав данные. Текущий состав: 1TB + 500GB + 320GB. Планируется ещё один 500-гигабайтный диск. Рядом лежит 10-терабайтник с ext4, который просто добекапят и будут пользоваться до смерти.

Новую microSD купили на 64 ГБ вместо 128, взяли «high endurance». Доставка подвела, пришлось идти в магазин пешком — заодно прикупили дискаунтный UPS. Систему развернули через кастомный NixOS-образ: модуль sd-image-aarch64.nix и nix build. Всё заработало за секунды после подключения к UPS, а Navidrome уже играла музыку в дорогу.

Читать оригинал →