Как восстановить удаленные данные на Linux-сервере?

«Как восстановить удаленные данные на Linux-сервере?» — вопрос из категории Linux, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Восстановление удаленных данных — сложная и ненадежная операция. Основной и единственный гарантированный метод — восстановление из резервной копии. Файловые системы не предназначены для удобного "undelete".

Экстренные действия при случайном удалении:

  1. Немедленно остановите запись на соответствующий диск/раздел. Если это база данных или приложение — остановите сервис.
  2. По возможности, размонтируйте (umount) раздел, с которого были удалены данные, чтобы минимизировать перезапись блоков.

Попытки восстановления (если бэкапа нет): Эти методы работают только если данные не были перезаписаны и зависят от ФС.

  • Для ext3/ext4: Используйте extundelete. Смонтируйте диск в режиме только для чтения на другой системе.
    sudo apt-get install extundelete  # Debian/Ubuntu
    sudo extundelete /dev/sdb1 --restore-all --output-dir /recovery/
  • Для XFS: Возможности крайне ограничены. Можно попробовать xfs_undelete, но он работает только если включено журналирование операций с метаданными (metadump).
  • Универсальные инструменты (сканирование по сигнатурам): testdisk/photorec могут найти остатки файлов (картинки, PDF, архивы) по их заголовкам, но имена и пути будут потеряны.
    sudo photorec /dev/sdb1

Практика DevOps: Предотвращение, а не восстановление

  • Регулярные бэкапы: Используйте rsync, borgbackup, restic или duplicity. Храните бэкапы на отдельном сервере или в облаке (S3).
  • Снапшоты ФС: Используйте возможности LVM (lvcreate --snapshot) или снапшоты на уровне облачного провайдера/СХД.
  • Защита от человеческого фактора: Настройка alias rm='rm -i' или использование trash-cli. Внедрение процедур для критичных операций.
  • Версионирование конфигурации: Весь важный конфиг (например, в /etc) должен храниться в Git.