- Цель
- Унифицированный инструмент резервного копирования и восстановления Fedora-подобных систем (tar-архивы: efi, boot, rootfs, home, var).
- Поддержка живой (live) и оффлайн (rescue) работы.
- Простая разметка диска (MAKE_PART), проверка и автоматическое приведение /etc/fstab при восстановлении.
- Ключевые переменные
- SYS_DEV — устройство «системного» диска (по умолчанию /dev/nvme0n1 в текущей конфигурации).
- SYS_DIR — точка монтирования для оффлайн-восстановления (по умолчанию /mnt/fedora).
- BACKUP_ROOT / BACKUP_PATH — корень и каталог конкретного бэкапа.
- TYPEFS — опция типа при монтировании (например -t xfs).
- COMPRESSOR — выбранный компрессор (zstd/xz) исходя из типа носителя.
- Основные функции
- CHECK_BACKUP_ENV — проверяет BACKUP_ROOT, SYS_DEV, и предотвращает «самобэкап».
- SELECT_COMPRESSOR — выбирает компрессор по устройству (rota -> HDD/SSD).
- DETECT_PARTS_LABELS (best-effort) — ищет разделы по ярлыкам (LABEL/PARTLABEL).
- MOUNT_SYS / UMOUNT_SYS — логика монтирования корня и вспомогательных точек; учитывает live/rescue.
- SET_PARTS — формирует карту PARTS и порядок PARTS_ORDER (efi, boot, rootfs, home, var).
- CREATE_TAR — создание архивов в гарантированном порядке. Поддерживает компрессоры, контроль сумм, очистку старых бэкапов.
- RECOVERY_TAR — восстановление: распаковка архивов в целевые точки, обновление /etc/fstab, подготовка chroot, установка загрузчика (EFI: не используем grub2-install; ставим пакеты + efibootmgr запись).
- MAKE_PART — разбивка и форматирование диска (parted + mkfs/mkswap).
- Логирование: _log и обёртки log_info, log_warn, log_error, log_ok с записью в LOG_FILE и syslog.
- Ключевая логика действий
- При backup: CHECK_BACKUP_ENV → MOUNT_SYS → SELECT_COMPRESSOR → SET_PARTS → CREATE_TAR → UMOUNT_SYS (если не live).
- При recovery: CHECK_BACKUP_ENV → подтверждение → монтирование целевой root в SYS_DIR → монтирование boot/efi/home/var в правильном порядке → распаковка архивов (в порядке: root, boot, efi, home, var или как в коде) → обновление /etc/fstab по UUID → bind mounts (proc/sys/dev/run) и временный resolv.conf → установка пакетов grub в chroot (EFI: пакеты + efibootmgr; BIOS: grub2-install) → восстановление resolv.conf и корректное размонтирование.
- Особенности/решения, принятые в процессе
- Грубая замена resolv.conf в chroot: если в ${SYS_DIR}/etc/resolv.conf была символьная ссылка, она перемещается в бэкап, создаётся простой текстовый файл с DNS-серверами — это гарантирует работу dnf в chroot.
- grub2-install не применяется для EFI — вместо этого: dnf install/reinstall grub2-efi-x64 grub2-efi-x64-modules shim-x64 и создание записи через efibootmgr.
- Предотвращение дублей монтирования: монтирование boot выполняется до создания boot/efi и до монтирования efi (исправлено).
- Подавление ACL ошибок при распаковке: используем --no-acls при создании/распаковке, чтобы избежать ошибок на VFAT и т.п.
- Гарантированный порядок архивирования: efi → boot → rootfs → home → var (важно для прав/атрибутов).
- Создание /var/lib/os-prober/mount в chroot, чтобы grub2-mkconfig не ругался.
- TODO-list (кратко, приоритеты)
- Критично (сделать/проверить перед переносом):
- Верифицировать финальный CREATE_TAR (версия по типу FS или единая) — ты выбрал вариант по фактическому типу ФС, убедиться, что TAR_CREATE_OPTS корректно применяются для каждого типа.
- Добавить защиту на случай неполного BACKUP_PATH (если один архив отсутствует — продолжать и явно пометить).
- Дополнительно логировать время работы по каждому архиву (начало/конец) — это поможет в анализе долгих rootfs запусков.
- Проверить восстановление /etc/fstab на edge-cases (пустые UUID, отсутствующие разделы) — не перезаписывать «пустыми» значениями.
- Обработать поведение efibootmgr: дубли-entries (возможность пометить и удалять старые записи с таким же Label при желании).
Высокий приоритет (улучшения):
- Реализовать режим «быстрой» архивации (исключить var/home при необходимости).
- Поддержка мультисжатия: возможность задавать компрессор per-part (например: efi — xz маленький, rootfs — zstd -9).
- Добавить опцию —dry-run для CREATE_TAR/RECOVERY_TAR (что будет сделано, без выполнения).
- Повысить устойчивость к SIGINT: завершение операции должно аккуратно убирать tmp-файлы ${ARC}.tmp.
Средний/низкий:
- Интеграция с systemd timer / unit для автоматических бэкапов.
- Поддержка LUKS — detect + временное открытие в recovery.
- Поддержка btrfs snapshots (альтернативная ветка).
