pimenov.ai

База знаний

Правило 3-2-1: рабочая схема резервного копирования

Правило 3-2-1 для резервного копирования: три копии, два носителя, одна вне площадки. Схема, расширения 3-2-1-1-0 и 4-3-2, конфиг restic и чеклист.

Опубликовано

Правило 3-2-1 — минимальный стандарт резервного копирования: три копии данных, на двух разных устройствах, одна копия вне площадки. Такой набор переживает отказ диска, кражу техники и аварию в серверной. Против шифровальщика базовой схемы уже мало: нужна копия, которую нельзя удалить с рабочей машины, — об этом отдельный раздел ниже.

📌
Для кого: владельцы сайтов и небольших инфраструктур, системные администраторы, а также все, кто хранит рабочие файлы на одном ноутбуке. Уровень: базовый и средний. Проверка актуальности схем и команд: 4 августа 2026 года.

Целевая архитектура: как выглядит рабочий контур

Сначала общая картина, к которой нужно прийти. Продуктивные данные лежат на рабочей машине или сервере. Рядом работает локальная копия для быстрого восстановления. Отдельно живёт удалённая копия для случаев, когда площадка недоступна физически.

flowchart LR
	A["Продуктив: ноутбук или сервер"] --> B["Копия 2: внешний диск или NAS"]
	A --> C["Копия 3: облако вне площадки"]
	B --> D["Проверка целостности и тест восстановления"]
	C --> D

Локальная копия отвечает за скорость: файл или база возвращаются за минуты. Удалённая копия отвечает за выживание данных, когда офис или дата-центр недоступны.


Что означает каждая цифра

ЦифраТребованиеКак выполняется на практике
3Три копии данных: продуктив плюс два бэкапаРабочие файлы, локальная копия, удалённая копия
2Хранение на двух независимых устройствахВнутренний диск и внешний диск или NAS; облако добавляет третье устройство
1Одна копия вне площадкиОбъектное хранилище, облачный бэкап или диск, который физически лежит в другом здании

Правило описывает не количество кнопок в интерфейсе, а количество независимых точек отказа. Если две копии лежат на одном компьютере, у вас одна копия.


Два носителя или два устройства

Формулировку приписывают фотографу Питеру Крогу: он описал схему в книге «The DAM Book: Digital Asset Management for Photographers» (2005), а в широкий оборот её вывела публикация US-CERT «Data Backup Options» 2012 года. Тогда под «двумя носителями» понимали разные типы: жёсткий диск, оптический диск, лента, флеш-накопитель — защита от устаревания формата и от одновременного отказа однотипного оборудования.

Backblaze до сих пор формулирует пункт как «two different media», но прямо оговаривает: сегодня это значит не то же, что в конце 2000-х. Практический смысл сместился к двум разным устройствам — локальный диск и облако считаются двумя носителями, даже если под капотом у обоих те же HDD или SSD. Ноутбук, внешний SSD и объектное хранилище условию соответствуют.

⚖️
Компромисс: одинаковые диски из одной партии могут выйти из строя почти одновременно. Для NAS и RAID-массивов берите накопители разных партий или моделей, а RAID считайте защитой от простоя, а не резервной копией.

Чеклист быстрой проверки

Пройдите за пять минут и найдите слабое место контура.

Известен точный список данных, потеря которых остановит работу
Для каждого набора данных есть три копии
Копии лежат минимум на двух независимых устройствах
Одна копия физически или логически вне основной площадки
Резервное копирование выполняется по расписанию, а не вручную
Есть уведомление об ошибке задания, а не только запись в логе
Известен возраст последней успешной копии
Настроена политика хранения: сколько дневных, недельных и месячных копий остаётся
Удалённая копия защищена отдельным ключом доступа, который недоступен с рабочей машины
Есть хотя бы одна копия, которую нельзя удалить или перезаписать сразу
Пароль или ключ шифрования бэкапа хранится отдельно от самих копий
Тестовое восстановление выполнялось за последние три месяца
Зафиксировано время полного восстановления сервиса

Расширения: 3-2-1-1-0 и 4-3-2

Правило 3-2-1 остаётся точкой входа. Атаки шифровальщиков нацелены на сетевые каталоги и подключённые бэкапы, поэтому появились более строгие схемы.

СхемаЧто добавляетКому подходит
3-2-1Базовая избыточность и географическое разнесениеЛичные данные, небольшие сайты, домашние NAS
3-2-1-1-0Одна копия офлайн или в неизменяемом хранилище, плюс ноль ошибок при регулярной проверке восстановленияБизнес с реальным риском шифровальщика и требованиями к непрерывности
4-3-2Четыре копии в трёх локациях, две из которых вне основной площадкиКритичные данные, сервис-провайдеры, инфраструктура клиентов

Неизменяемые копии и защита от шифровальщика

Основной сценарий потери данных сегодня выглядит так: злоумышленник получает доступ к машине, находит подключённое хранилище бэкапов и удаляет копии перед шифрованием.

Что закрывает этот сценарий:

  • Отдельные учётные данные. Ключ, которым пишет бэкап-агент, не должен позволять удаление старых объектов. Практическое ограничение: restic forget --prune физически удаляет данные, поэтому ротацию выносят в отдельное задание с привилегированным ключом или держат репозиторий за rest-server --append-only.
  • Неизменяемость на стороне хранилища. В S3-совместимых хранилищах это Object Lock в режимах Governance или Compliance с фиксированным сроком удержания. Режим Governance снимается пользователем с правом s3:BypassGovernanceRetention, поэтому от злоумышленника с админским ключом защищает только Compliance. Поддержка Object Lock есть не у всех S3-совместимых провайдеров — проверяйте до переноса бэкапов.
  • Офлайн-копия. Внешний диск, который подключается только на время копирования.
  • Шифрование на стороне клиента. Данные уезжают в облако уже зашифрованными, ключ хранится отдельно.
⚠️
Внимание: режим Compliance в S3 Object Lock не позволяет снять блокировку или сократить срок удержания никому, включая root-пользователя аккаунта; по документации AWS единственный способ удалить объект раньше срока — закрыть сам аккаунт. Сначала проверьте политику на тестовом бакете с коротким сроком.

Эталонный сценарий на restic

Схема: локальная копия на внешнем диске, удалённая копия через restic в S3-совместимое хранилище с шифрованием на стороне клиента. Ниже встречаются две утилиты — коротко о каждой, чтобы разница между ними была понятна до команд.

📦
restic — консольная программа резервного копирования с открытым кодом. Хранит данные снимками: при каждом запуске в репозиторий доезжают только изменившиеся блоки, но каждый снимок остаётся полной картиной каталога на момент запуска. Шифрование происходит на вашей стороне до отправки, поэтому владелец хранилища видит только зашифрованные пакеты. Работает с локальным диском, SFTP, S3-совместимыми хранилищами и Backblaze B2. Умеет ротацию снимков и проверку целостности репозитория штатными командами.
🔁
rsync — стандартная утилита синхронизации файлов и каталогов, есть практически в любом Linux и macOS. Передаёт только изменившиеся части файлов, поэтому повторный запуск быстрый. Делает зеркало, а не историю: с флагом --delete копия повторяет источник, включая удаления. Это инструмент доставки и синхронизации данных, а не система версионных бэкапов.

1. Локальная копия

Зеркало через rsync даёт быстрый доступ к текущему состоянию, но не хранит версий: удаление или шифрование файла уедет в копию при следующем запуске. Считайте его ускорителем восстановления, а полноценной второй копией — локальный репозиторий restic.

# быстрый доступ к текущему состоянию
rsync -aH --delete /srv/data/ /mnt/backup/mirror/

# версионная локальная копия с историей снимков
restic -r /mnt/backup/restic-repo backup /srv/data --tag local
🗄️
База данных: копирование файлов работающей СУБД даёт нецелостный снимок. Сначала снимайте дамп (pg_dump, mysqldump --single-transaction) или используйте штатный механизм СУБД, и в бэкап кладите уже дамп.

2. Удалённая копия

# параметры подключения храните в защищённом файле, а не в истории команд
export RESTIC_REPOSITORY="s3:https://s3.example.com/my-backup-bucket"
export RESTIC_PASSWORD_FILE="/root/.restic-password"   # ключ шифрования репозитория
export AWS_ACCESS_KEY_ID="<access-key-id>"             # ключ с правами на запись
export AWS_SECRET_ACCESS_KEY="<secret-access-key>"

restic init                       # выполняется один раз
restic backup /srv/data --tag daily

3. Политика хранения

# оставляем 7 дневных, 4 недельных и 12 месячных снимков, остальное удаляем
restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 12 --prune

4. Расписание

# ежедневный запуск в 03:30 с записью лога
30 3 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1

5. Проверка результата

Минимальный сценарий, который подтверждает работоспособность контура:

restic snapshots                       # в списке есть снимок за сегодня
restic check --read-data-subset=5%     # выборочная проверка целостности данных
# в общем репозитории добавьте --host и --path, иначе latest может указать на чужой снимок
restic restore latest --host "$(hostname)" --path /srv/data --target /tmp/restore-test
diff -r /srv/data /tmp/restore-test/srv/data && echo "restore OK"

Признак успеха: команда restic check завершается сообщением no errors were found, а diff не находит расхождений. Если проверка не выполняется, копия существует только на бумаге.

💡
Совет: храните пароль репозитория restic вне сервера, который копируете. Без него зашифрованные данные не восстановит никто, включая вас.

Восстановление важнее копирования

Бэкап оценивают не по факту наличия, а по времени и полноте возврата данных.

💡
RPO (Recovery Point Objective) — допустимый объём потерянных данных, измеряется временем: при суточном копировании вы теряете до 24 часов работы. RTO (Recovery Time Objective) — допустимое время простоя до полного возврата сервиса.

Зафиксируйте оба значения для каждого набора данных и сверяйте их с реальностью на квартальном тесте восстановления. Тест на пустом каталоге ничего не доказывает: восстанавливайте боевой объём и засекайте время.


Антипаттерны

АнтипаттернПочему опасноЧто делать вместо этого
RAID вместо бэкапаМассив защищает от отказа диска, но не от удаления файла, шифровальщика и пожараСчитать RAID способом снизить простой и делать отдельные копии
Синхронизация вместо копированияУдаление или шифрование файла мгновенно уезжает во все синхронизированные копииИспользовать версионные снимки с политикой хранения
Постоянно подключённый диск с бэкапамиДоступен тем же процессам, что и рабочие данныеОтключать диск или использовать неизменяемое хранилище
Копии в том же зданииПожар, залив или изъятие техники уносят все копии сразуДержать удалённую копию в другой локации
Бэкап без проверкиПовреждённый архив обнаруживается в момент аварииРегулярный check и тестовое восстановление
Ключ шифрования рядом с копиейКомпрометация хранилища раскрывает данные целикомХранить ключи в менеджере секретов отдельно от бэкапов

Выбор площадки для удалённой копии

При выборе удалённого хранилища проверьте четыре параметра: стоимость исходящего трафика при восстановлении, поддержку версионирования и Object Lock, лимиты на скорость выгрузки, а также юрисдикцию площадки. Если в копиях есть персональные данные граждан России, базы данных, в которые эти данные записываются и в которых хранятся, должны находиться на территории РФ (ч. 5 ст. 18 152-ФЗ). Требование распространяется и на резервные копии, а не только на продуктив.


Полезные ссылки


Утилиты из материала

Всё, что упоминается в командах выше, с официальными сайтами и исходным кодом.

УтилитаРоль в схемеСайт и документацияИсходный код
resticВерсионные снимки, шифрование, ротация, проверка целостностиrestic.net · restic.readthedocs.iogithub.com/restic/restic
rest-serverСервер для репозиториев restic с режимом --append-onlyдокументация в READMEgithub.com/restic/rest-server
rsyncЗеркало текущего состояния для быстрого восстановленияrsync.samba.org · man rsyncgithub.com/RsyncProject/rsync
pg_dumpЦелостный дамп PostgreSQL перед копированием файловpostgresql.org/docsgithub.com/postgres/postgres
mysqldumpЦелостный дамп MySQL и MariaDBdev.mysql.com/docgithub.com/mysql/mysql-server
cronЗапуск задания бэкапа по расписаниюman crontabgithub.com/cronie-crond/cronie
diffСверка восстановленных файлов с оригиналомgnu.org/software/diffutilssavannah.gnu.org/projects/diffutils

Следующий шаг

Связанные материалы

Если собираете контур резервного копирования для сайта, рабочих файлов или инфраструктуры команды и хотите свериться по схеме и рискам — пишите в Telegram @pimenov