Система не загружается, падая в emergency mode, или при попытке работы выдаёт ошибку:
Structure needs cleaning
Это критическое повреждение метаданных файловой системы (суперблока, таблицы inode или журнала). Ядро принудительно переводит корень (/) в режим Read-Only для защиты данных.
⚠️ Ограничения восстановления изнутри системы
Попытка починить корневую ФС из-под самой этой системы ведёт в тупик:
mount -o remount,ro /выдаётtarget is busy, так как фоновые процессы (Telegram, systemd, shell) держат файлы открытыми.- Массовое убийство процессов (
killall5,fuser) часто приводит к зависанию или перезапуску сессии. - Использование
umount -l /(lazy unmount) отвязывает корень, но мгновенно делает недоступными все бинарные файлы (sudo,e2fsck,mount), так как они находятся в/nix/store, который теперь отмонтирован.
💡 Вывод: Восстановление корневой ФС из-под работающей на ней системы невозможно. Единственный надёжный путь - внешнее вмешательство.
🛠 Решение: Внешнее восстановление
Для безопасного ремонта диск должен быть подключён к другой системе (второй ПК или LiveUSB), где он не является корневым.
Шаг 1: Принудительная проверка и ремонт
Подключить диск к другому ПК или загрузиться с Live-носителя (GParted Live, Ubuntu, Arch).
Определить повреждённый раздел:
lsblk -fНайти раздел с нужным UUID (например,
/dev/sda2или/dev/nvme0n1p2).Запустить агрессивную проверку (для ext4):
sudo e2fsck -y -f /dev/sdXn-y: автоматически отвечать “yes” на все исправления.-f: принудительная проверка, даже если ФС помечена как “clean”.
Если проверка падает или не находит суперблок: Восстановить из резервной копии (стандартные резервные блоки:
32768,98304,163840):sudo e2fsck -b 32768 -y /dev/sdXnДля Btrfs:
sudo btrfs check --repair /dev/sdXn
🔧 Шаг 2: Возврат в систему и проверка Nix Store
После успешного e2fsck физическая целостность диска восстановлена. Однако логическая структура /nix/store (особенно таблица хардлинков .links) могла быть повреждена во время сбоя.
Загрузиться в NixOS без параметра fsck.mode=skip.
1. Проверка и восстановление хешей store
Эта команда проверит все пути в store и автоматически перекачает/пересоберёт повреждённые из кэша:
sudo nix-store --verify --check-contents --repair
⚠️ Если команда выдаёт ошибку
Bad messageна файлах в/nix/store/.links/, значит, таблица хардлинков уничтожена. Перейти к шагу 2.
2. Принудительная перестройка store (если шаг 1 не помог)
Если .links повреждены, заставить Nix пересоздать их с нуля:
# Удалить битые хардлинки (использовать find, чтобы избежать "Argument list too long")
sudo find /nix/store/.links -mindepth 1 -delete
# Пересоздать оптимизацию
sudo nix-store --optimise
3. Восстановление системных ссылок
Пересоздать /run/current-system и обновить загрузчик, используя только валидные пути:
sudo nixos-rebuild boot --repair
4. Очистка мусора
Удалить старые поколения и битые ссылки, чтобы освободить место и закрепить результат:
sudo nix-collect-garbage -d
⚠️ Типичные проблемы и решения
| Симптом | Причина | Решение |
|---|---|---|
target is busy при remount,ro | Процессы держат файлы в / | Не бороться с этим. Использовать LiveUSB/другой ПК. |
command not found после umount -l / | Корень отмонтирован, PATH потерян | Это ожидаемо. Жёстко перезагрузиться (reboot -f) и чинить извне. |
Bad message в /nix/store/.links/ | Повреждена таблица хардлинков ext4 | Выполнить find /nix/store/.links -mindepth 1 -delete + nix-store --optimise. |
| Система снова падает в RO при загрузке | e2fsck не был запущен с -f или повреждения критические | Повторить Шаг 1 с флагом -b 32768 (восстановление суперблока). |