# Хранилище для бэкапов в S3: какой класс выбрать и как настроить restic

> Какой класс S3 взять под резервные копии, сколько стоит хранить 200 ГБ и 1 ТБ и как настроить restic: ключ на один бакет, systemd-таймер, проверка копий.

Источник: https://infragid.ru/s3-dlya-bekapov/ · Обновлено: 2026-11-08 · Цены проверены: 2026-11-08 · Раздел: Хранение и бэкапы

**Коротко.** Для ежедневных бэкапов сервера через restic берите холодный класс S3: хранение от 1,25 ₽ за ГБ/мес, то есть 200 ГБ копий ≈ 250 ₽ в месяц (наш расчёт, без запросов и трафика). Ледяной класс дешевле в хранении — от 0,89 ₽ за ГБ/мес, но запросы в нём самые дорогие, а restic при каждом запуске и чистке старых копий делает их много. Ледяной оставьте для архивов, которые кладут один раз и почти не трогают.

**Наш выбор.** Для ночных копий одного-двух серверов — отдельный бакет в холодном классе S3 и restic с ключом, который видит только этот бакет.
- Класс: холодное хранение, отдельный бакет под копии
- Цена от: 1,25 ₽ за ГБ/мес; 200 ГБ ≈ 250 ₽/мес (наш расчёт)
- Бесплатно: входящий трафик, трафик внутри Selectel, запросы DELETE
- Отдельно: запросы GET/HEAD/PUT/POST/COPY и исходящий трафик в интернет — ставки в калькуляторе
- Когда не подходит: нужна копия, которую нельзя удалить даже с ключом сервера, или образ всего диска

## Что нужно понять за минуту

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

В S3 вы платите за три вещи: объём хранения, запросы к API и исходящий трафик. У Selectel три класса хранения, и они по-разному делят эти деньги:

- **Стандартное** — дорогое хранение, дешёвые запросы и трафик. Для данных, которые постоянно читают.
- **Холодное** — всё «средне». Для резервных копий и архивов, которые иногда читают.
- **Ледяное** — самое дешёвое хранение и самые дорогие запросы. Для данных, к которым обращаются очень редко. Минимального срока хранения у ледяного класса, по документации, нет: удалить копию можно в любой момент. Ледяной класс есть только в пуле `ru-3` (Санкт-Петербург).

Бесплатно в любом классе: входящий трафик (заливка копий), трафик внутри Selectel и запросы DELETE. Если сервер тоже в Selectel, восстановление не тратит деньги на трафик, если снаружи — платите за исходящий трафик из хранилища. Подробнее о том, как устроено [холодное хранилище](/glossarij/holodnoe-hranenie/), — в глоссарии.

## Сколько стоит

Хранение 100 ГБ, 200 ГБ и 1 ТБ копий в каждом классе. Объём — то, что реально лежит в бакете после дедупликации. Запросы и исходящий трафик не учтены: Selectel публикует их ставки только в калькуляторе.

| Класс | Для каких копий | Хранение 1 ГБ в месяц | 200 ГБ (наш расчёт) | 1 ТБ (наш расчёт) |
|---|---|---|---|---|
| Ледяное | архив «положил и забыл», ежемесячные снимки без чистки | 0,89 ₽ за ГБ/мес | ≈ 178 ₽ | ≈ 890 ₽ |
| => Холодное | ежедневные копии restic с чисткой старых | 1,25 ₽ за ГБ/мес | ≈ 250 ₽ | ≈ 1 250 ₽ |
| Стандартное | копии, которые постоянно читают и сверяют | 2,56 ₽ за ГБ/мес | ≈ 512 ₽ | ≈ 2 560 ₽ |

проверено 08.11.2026 · [S3 Selectel](https://selectel.ru/services/cloud/storage/) · цены с НДС 22 %, «от»
{: .stamp}

Формула расчёта: объём в ГБ × цена хранения 1 ГБ, 1 ТБ = 1 000 ГБ. Например, 200 × 1,25 ≈ 250 ₽. Посчитать свой объём с запасом на рост удобнее в [калькуляторе S3](/instrumenty/kalkulyator-s3/).

Для сравнения — готовые сервисы копирования у того же провайдера. Они дороже за гигабайт, но не требуют ничего настраивать:

| Способ | Что копирует | Цена |
|---|---|---|
| => restic + S3, холодный класс | файлы и дампы баз, которые вы выбрали | 1,25 ₽ за ГБ/мес + запросы |
| Бэкапы сетевых дисков облачного сервера | сетевой диск сервера целиком | 4,50 ₽ за ГБ/мес |
| Veeam Agent | сервер целиком: Windows, Linux, macOS | 2 010 ₽/мес за сервер + 2,24 ₽ за ГБ/мес |

проверено 08.11.2026 · [бэкапы дисков](https://selectel.ru/services/cloud/backups/) · [Veeam Agent](https://selectel.ru/services/additional/backup-as-a-service/agent/)
{: .stamp}

## Как выбрать класс

Главная ловушка — ледяной класс для ежедневных копий. Restic при каждом запуске читает индекс репозитория, создаёт и снимает файл блокировки, а при чистке старых копий (`prune`) скачивает и переупаковывает часть данных. Всё это запросы, а в ледяном классе они самые дорогие. Сколько именно запросов сделает ваш репозиторий, заранее не скажет никто, поэтому мы советуем простое правило:

- **ежедневные копии с чисткой старых** → холодный класс;
- **отдельный архив раз в месяц или квартал, без чистки** → ледяной класс (бакет в пуле `ru-3`);
- **данные, которые постоянно читают** → стандартный класс, но это уже не бэкап.

Selectel на своей странице относит бэкапы и к ледяному классу. Это верно для копий, которые пишут один раз и почти не трогают. Для restic с ежедневной чисткой экономия на хранении может уйти в запросы.

Второй неочевидный момент — служебные данные. Каждый объект в бакете занимает место под метаданные, и оно оплачивается: 64 КБ на объект в холодном классе и 128 КБ в ледяном. Restic складывает данные в крупные файлы-пачки (по умолчанию около 16 МБ), поэтому для него это копейки. А если копировать миллион мелких файлов по одному, в ледяном классе только метаданные займут ≈ 122 ГБ (наш расчёт: 1 000 000 × 128 КБ ÷ 1 024 ÷ 1 024). Так что для бэкапа «как есть» без упаковки ледяной класс может оказаться самым дорогим.

## Как настроить restic

Рецепт для Linux-сервера с сайтом и базой PostgreSQL: файлы и дамп базы уходят в S3 одним скриптом каждую ночь. Все ключи и адреса ниже — заглушки.

### 1. Бакет и ключ только для него

В панели Selectel создайте приватный бакет в холодном классе, например `backup-web1`. Класс задаётся при создании бакета, поменять его потом нельзя. Пул выберите в другом дата-центре, не там, где стоит сервер: в однозональных пулах (`ru-1`, `ru-3`, `ru-7` и других) реплики лежат внутри одного ЦОД, а мультизональный `ru-6` раскладывает их по трём. Не каждый класс есть в каждом пуле — это видно при создании бакета.

Не давайте restic ключ от всего аккаунта. Создайте сервисного пользователя с ролью `s3.bucket.user` и выпустите ему S3-ключ (пару Access Key и Secret Key). С такой ролью доступ задаётся политикой бакета: разрешите в ней этому пользователю просмотр списка объектов, чтение, загрузку и удаление объектов в `backup-web1`. Удаление обязательно: без него restic не снимет свои блокировки и не почистит старые копии. Домен S3 API для подключения зависит от пула — он указан в документации Selectel и в панели.

### 2. Установка и настройки

```bash
apt install restic
restic version
```

Ключи и адрес — в файле, который читает только root:

```bash
umask 077
cat > /root/.restic-env <<'EOF'
export AWS_ACCESS_KEY_ID="ACCESS-KEY-ИЗ-ПАНЕЛИ"
export AWS_SECRET_ACCESS_KEY="SECRET-KEY-ИЗ-ПАНЕЛИ"
export RESTIC_REPOSITORY="s3:https://АДРЕС-S3-ИЗ-ПАНЕЛИ/backup-web1"
export RESTIC_PASSWORD_FILE="/root/.restic-pass"
export AWS_DEFAULT_REGION="ru-1"  # пул вашего бакета
EOF
openssl rand -base64 32 > /root/.restic-pass
chmod 600 /root/.restic-env /root/.restic-pass
```

Сразу сохраните содержимое `/root/.restic-pass` в менеджер паролей. Без него копии не расшифровать.

### 3. Репозиторий и первая копия

```bash
. /root/.restic-env
restic init
restic backup /etc /var/www --exclude-caches
restic snapshots
```

### 4. Скрипт: файлы, дамп базы и чистка

`/usr/local/bin/backup.sh`:

```bash
#!/bin/bash
set -euo pipefail
. /root/.restic-env

# 1. Файлы сайта и конфиги
restic backup /etc /var/www --exclude-caches --tag files --quiet

# 2. Дамп базы прямо в restic, без временного файла на диске
sudo -u postgres pg_dump -Fc mydb \
  | restic backup --stdin --stdin-filename mydb.dump --tag db --quiet

# 3. Храним 7 ежедневных, 4 еженедельные и 6 ежемесячных копий
restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6 --prune --quiet

# 4. Отметка об успехе — по ней работает алерт
date +%s > /var/lib/restic-last-success
```

Файлы работающей базы копировать нельзя — только дамп. `set -o pipefail` нужен, чтобы ошибка `pg_dump` в конвейере остановила скрипт, а не прошла молча. Но снимок с оборванным дампом restic при этом всё равно сохранит — его придётся найти по тегу `db` и удалить вручную. Надёжнее в restic 0.17 и новее: `restic backup --stdin-filename mydb.dump --stdin-from-command -- sudo -u postgres pg_dump -Fc mydb`. Тогда restic сам увидит, что команда завершилась с ошибкой, и снимок не создаст. Версию покажет `restic version`: в старых дистрибутивах из `apt` может прийти более ранняя. Если база у вас управляемая, а не своя, схема та же, меняется только строка подключения к `pg_dump`. Чего managed-база не делает сама, разбираем в гайде про [облачные базы данных](/managed-bazy-dannyh/).

### 5. Расписание на systemd

```ini
# /etc/systemd/system/restic-backup.service
[Unit]
Description=Restic backup to S3
Wants=network-online.target
After=network-online.target

[Service]
Type=oneshot
ExecStart=/usr/local/bin/backup.sh
```

```ini
# /etc/systemd/system/restic-backup.timer
[Unit]
Description=Nightly restic backup

[Timer]
OnCalendar=*-*-* 03:30
RandomizedDelaySec=15m
Persistent=true

[Install]
WantedBy=timers.target
```

```bash
chmod +x /usr/local/bin/backup.sh
systemctl daemon-reload
systemctl enable --now restic-backup.timer
systemctl list-timers restic-backup.timer
```

`Persistent=true` запустит пропущенную копию, если сервер был выключен в 03:30. Ошибки смотрите в `journalctl -u restic-backup.service`.

### 6. Проверка, что копии правда есть

Активный таймер ещё не значит, что копия записалась. Проверяйте результат, а не расписание:

```bash
# сколько часов назад была последняя удачная копия
echo $(( ( $(date +%s) - $(cat /var/lib/restic-last-success) ) / 3600 ))

# раз в неделю: целостность и выборочное чтение 5 % данных
restic check --read-data-subset=5%

# раз в месяц: восстановить один файл и сравнить
restic restore latest --target /tmp/restore-test --include /etc/hostname
```

Первое число отправьте в мониторинг и поставьте алерт, если оно больше 26 часов. `restic check` с чтением данных делает запросы GET, а если сервер вне Selectel — ещё и тратит исходящий трафик, поэтому читаем выборку, а не всё.

## Что не подойдёт и ограничения

- **Ключ restic может удалить копии.** Restic нужны права на удаление, значит, тот, кто захватит сервер, доберётся и до бэкапов. Защита — копия, которую нельзя удалить: Object Lock в бакете (режим Compliance запрещает удаление всем до конца срока) или отдельный сервис S3 Vault. Учтите: Object Lock работает только вместе с версионированием, поэтому файлы, которые restic «удалил» при чистке, на деле остаются версиями до конца срока блокировки и оплачиваются. Отключить Object Lock после включения нельзя.
- **Версионирование не бесплатно.** Если включить его в бакете с restic, старые версии удалённых при чистке файлов останутся и будут оплачиваться как обычные данные.
- **Неоплата стирает копии.** Если на балансе нет денег, доступ к S3 блокируется, хранение продолжает тарифицироваться, а через 30 дней данные удаляются без восстановления — включая объекты под Object Lock. Включите уведомления о балансе и автопополнение.
- **Класс бакета после создания не поменять, а автоматического перевода копий из класса в класс по возрасту в документации Selectel нет.** Архив для ледяного класса делайте отдельным бакетом в пуле `ru-3` и отдельным репозиторием.
- **Restic копирует файлы, а не сервер целиком.** Чтобы поднять сервер с нуля, понадобится переустановить систему и восстановить файлы. Если нужно поднимать сервер целиком из копии — это бэкапы дисков или Veeam из таблицы выше. Для 1С схема своя, её разбираем в гайде [про резервное копирование 1С в облако](/bekap-1c-v-oblako/).
- **Цену запросов и трафика заранее не узнать с сайта.** Их ставки есть только в калькуляторе и панели. Первый месяц смотрите потребление в разделе S3 → «Потребление» и только потом решайте, не завести ли бакет другого класса.
- **Домашний NAS тоже нужен копии вне дома.** Как совместить NAS и облако, разбираем в гайде [NAS или облако](/nas-ili-oblako/).

!!! how "Как мы сделали"
    Свою основную инфраструктуру мы бэкапим по той же схеме. Каждую ночь `pg_dump` выгружает все базы PostgreSQL на второй диск, а restic зашифрованно отправляет копию в S3-совместимое хранилище вне дома. Храним 7 ежедневных и 7 еженедельных копий. В первую ночь ушло около 29 ГБ баз и 3 ГБ конфигов, следом — около 166 ГБ вложений почты.

    Где мы обожглись. Скрипт однажды молча перестал писать копии: второй диск не был смонтирован, а таймер при этом исправно числился активным. Мы добавили файл-маркер монтирования, без которого скрипт падает с ошибкой, и алерт «метрика бэкапа давно не обновлялась». Второй урок — про объём: из 166 ГБ вложений около 100 ГБ оказались дублями, одна картинка из подписи письма лежала 75 000 раз. Прежде чем платить за хранение, посмотрите, что именно вы храните.


## Частые вопросы

**Какое хранилище выбрать для бэкапов?**

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

**Сколько стоит облачное хранилище для бэкапов?**

В Selectel хранение начинается от 0,89 ₽ за ГБ/мес в ледяном классе и от 1,25 ₽ за ГБ/мес в холодном. 1 ТБ в холодном классе — около 1 250 ₽ в месяц по нашему расчёту. Сверху оплачиваются запросы и исходящий трафик, их ставки видны только в калькуляторе провайдера.

**Как подключить restic к S3?**

Restic берёт ключи из переменных AWS_ACCESS_KEY_ID и AWS_SECRET_ACCESS_KEY, а адрес репозитория — из RESTIC_REPOSITORY в виде s3:https://адрес-хранилища/имя-бакета. Пароль репозитория удобно хранить в отдельном файле и указывать через RESTIC_PASSWORD_FILE. После этого репозиторий создаётся командой restic init.

**Какие права нужны restic в S3?**

Restic должен видеть список объектов, читать, загружать и удалять их в своём бакете. Удаление нужно не только для чистки старых копий: restic при каждом запуске создаёт и снимает файлы блокировки. Доступ к остальным бакетам и проектам ему не нужен.

**Где хранить пароль от репозитория restic?**

Отдельно от сервера, который бэкапите: в менеджере паролей или хранилище секретов. Restic шифрует данные на сервере до отправки, поэтому без пароля восстановить копии не сможет никто — ни вы, ни провайдер.


## Источники

- Объектное хранилище S3 — selectel.ru — https://selectel.ru/services/cloud/storage/ (проверено 2026-11-08)
- Модель оплаты и цены S3 — docs.selectel.ru — https://docs.selectel.ru/s3/about/payment/ (проверено 2026-11-08)
- Описание продукта S3 — docs.selectel.ru — https://docs.selectel.ru/s3/about/about-s3/ (проверено 2026-11-08)
- Ограничения S3 — docs.selectel.ru — https://docs.selectel.ru/s3/about/limitations/ (проверено 2026-11-08)
- Версионирование объектов — docs.selectel.ru — https://docs.selectel.ru/s3/buckets/versioning/ (проверено 2026-11-08)
- Object Lock — docs.selectel.ru — https://docs.selectel.ru/s3/buckets/object-lock/ (проверено 2026-11-08)
- Миграция в S3: сервисный пользователь и S3-ключ — docs.selectel.ru — https://docs.selectel.ru/s3/manage/migrate-to-s3/ (проверено 2026-11-08)
- Бэкапы облачных серверов — selectel.ru — https://selectel.ru/services/cloud/backups/ (проверено 2026-11-08)
- Резервное копирование Veeam Agent — selectel.ru — https://selectel.ru/services/additional/backup-as-a-service/agent/ (проверено 2026-11-08)
- S3 Vault — selectel.ru — https://selectel.ru/solutions/s3-vault/ (проверено 2026-11-08)
- Создание бакета: классы хранения и пулы — docs.selectel.ru — https://docs.selectel.ru/s3/buckets/create-bucket/ (проверено 2026-11-09)
- Управление доступом к S3: роль s3.bucket.user — docs.selectel.ru — https://docs.selectel.ru/s3/about/manage-access/ (проверено 2026-11-09)
- Restic: бэкап из stdin и --stdin-from-command — restic.readthedocs.io — https://restic.readthedocs.io/en/stable/040_backup.html (проверено 2026-11-09)
- Restic: репозиторий в S3 — restic.readthedocs.io — https://restic.readthedocs.io/en/stable/030_preparing_a_new_repo.html (проверено 2026-11-08)
