Из-за временных ограничений на территории РФ наблюдаются проблемы с оплатой. Если платёж не проходит, оставьте запрос в службу поддержки.Служба поддержки работает 24/7 — мы всегда на связи по вопросам хостинга и серверов.Открыт прием заявок на аренду выделенных серверов и размещение оборудования в дата-центре.Напоминаем: рекомендуем включить резервное копирование для дополнительной защиты данных.Доступна новая линейка VPS/VDS с NVMe-дисками и увеличенной производительностью.Технические работы на части серверов завершены. Все сервисы работают в штатном режиме.
Статья5 мин чтенияПросмотры0

sha256sum --check: как проверить целостность резервной копии

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

Комментарии 0

Накопитель резервной копии и архивный кейс на рабочем столе рядом с янтарной сигнальной лампой
В этой статье

Контрольная сумма отвечает на узкий вопрос: совпадают ли текущие байты файлов с теми, по которым создан манифест. Для набора резервной копии сначала создают backup.sha256, затем запускают sha256sum --check --strict и обязательно проверяют код выхода. Строки OK при коде 0 подтверждают совпадение только перечисленных файлов; восстановимость копии этим не доказана.

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

Входные условия

  • Linux с GNU coreutils и утилитой sha256sum.
  • Каталог, где имена файлов не меняются между созданием и проверкой манифеста.
  • Права чтения всех проверяемых файлов и самого манифеста.
  • Отдельное понимание, кто создал манифест и защищён ли он от совместной подмены с архивом.

sha256sum --version

sha256sum (GNU coreutils) 9.4

Проверка выполнена 20 октября 2026 года в изолированном временном каталоге, созданном только для этого теста. catalog.sql.gz занимал 18 байт, media.tar.zst — 17 байт. Расширения учебные: это обычные короткие файлы, а не настоящие SQL-дамп и архив.

Файл

Размер в тесте

Роль

catalog.sql.gz

18 байт

Учебный дамп каталога

media.tar.zst

17 байт

Учебный архив медиа

backup.sha256

2 строки после создания

Манифест ожидаемых хэшей

Создаём манифест

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

cd /path/to/backup-set

sha256sum catalog.sql.gz media.tar.zst > backup.sha256

Команда читает файлы и записывает их SHA-256 вместе с именами. Созданный в том же каталоге манифест удобен для проверки примера, но для рабочего процесса этого мало: если злоумышленник или ошибочная задача может одновременно заменить архив и backup.sha256, совпадение не подтвердит происхождение копии.

Первая проверка: все байты совпадают

sha256sum --check --strict backup.sha256

catalog.sql.gz: OK media.tar.zst: OK

В исходном наборе команда завершилась с кодом 0. Это означает, что обе строки манифеста корректно разобраны, оба файла прочитаны и вычисленные хэши совпали. По одному тексту OK выводить рано: автоматизация должна проверять также код завершения процесса.

Меняем один байт, но сохраняем длину

Следующая команда относится только к учебной копии. Она перезаписывает первый байт catalog.sql.gz и не меняет длину файла.

printf 'X' | dd of=catalog.sql.gz bs=1 seek=0 conv=notrunc status=none

sha256sum --check --strict backup.sha256

catalog.sql.gz: FAILED media.tar.zst: OK sha256sum: WARNING: 1 computed checksum did NOT match

Размер catalog.sql.gz остался 18 байт, но sha256sum завершился с кодом 1. Сравнение только имени, размера и времени изменения могло бы пропустить такой сценарий; манифест проверяет содержимое байт за байтом через вычисленный digest.

Отсутствующий файл и повреждённая строка

Сценарий

Наблюдаемый вывод

Код

media.tar.zst отсутствует

FAILED open or read; listed file could not be read

1

В манифест добавлена not-a-checksum

1 line is improperly formatted при --strict

1

Оба файла на месте и строки корректны

OK для обоих файлов

0

Эти ошибки имеют разный смысл. Несовпавший digest означает, что файл прочитан, но его байты изменились. FAILED open or read означает, что файл не найден или недоступен для чтения. Неправильная строка относится к структуре манифеста; параметр --strict делает её причиной ненулевого кода выхода.

Четыре результата проверки SHA-256: совпадение, изменение байта, отсутствующий файл и ошибка строки
Учебный тест: только исходный набор завершился с кодом 0; три отклонения дали код 1.

Где хранить манифест

  • Не ограничиваться копией backup.sha256 рядом с теми же архивами и под теми же правами записи.
  • Сохранять манифест в журнале задания или отдельном хранилище с ограничением изменения.
  • Фиксировать дату, набор файлов, версию процедуры и источник манифеста.
  • Для недоверенной передачи добавлять механизм аутентификации: цифровую подпись или MAC по принятой в компании схеме.
  • Не публиковать пути, имена и служебные сведения, если они раскрывают внутреннее устройство системы.

Стандарт FIPS 180-4 описывает SHA-256 как алгоритм формирования digest, который помогает обнаружить изменение сообщения. Параметры проверки строк и строгого режима описаны в руководстве GNU Coreutils 9.11. Ни один из этих механизмов сам по себе не подтверждает, что манифест создан доверенной стороной.

Порядок приёмки рабочей копии

  1. Зафиксировать перечень файлов и точку времени; для работающей базы сначала обеспечить согласованный способ создания копии.

  2. Создать манифест после успешного завершения записи файлов и сохранить его в защищённом месте.

  3. Перед передачей или восстановлением запустить sha256sum --check --strict и сохранить код выхода.

  4. При коде 1 разделить несовпадение хэша, отсутствие файла и ошибку формата; не сводить их к общему «бэкап повреждён».

  5. После успешной сверки проверить полноту набора, права, секреты и версии программ.

  6. Восстановить копию в изоляции и выполнить предметную приёмку сервиса.

Контрольная сумма — ранний фильтр, а не финальная приёмка. В отдельном материале разобраны RPO, RTO и тестовое восстановление интернет-магазина. Он продолжает эту проверку на уровне полноты и работоспособности системы.

Разделение проверки хэша и тестового восстановления резервной копии
Совпадение хэша подтверждает перечисленные байты; полноту и восстановимость проверяют отдельно.

Что проверка не доказывает

  • Что в набор попали все нужные файлы, база, конфигурация и секреты.
  • Что дамп работающей базы создан в согласованной точке.
  • Что архив можно распаковать и приложение запустится на нужной версии окружения.
  • Что манифест подлинный, если его могли заменить вместе с файлами.
  • Что копия соответствует требуемым RPO и RTO.

Критерий готовности прост: код 0 подтверждает совпадение перечисленных байтов с сохранённым манифестом; любой код 1 останавливает переход к восстановлению до разбора причины. Даже после кода 0 остаётся отдельная задача — доказать полноту, согласованность и восстановимость копии.

Обсуждение 0

Делись опытом и задавай вопросы. Комментарии без ссылок появляются после проверки редактором.

Пока никто не написал. Начни обсуждение.