Снапшот в информатике¶
Снапшот (от англ. snapshot — «снимок») — термин информатики, обозначающий сохранённую копию состояния системы, данных или объекта в определённый момент времени. Снапшоты применяются в системах резервного копирования, виртуализации, управления версиями программного обеспечения и распределённых базах данных, где требуется возможность отката к предыдущему состоянию или воспроизведения данных без изменений.
¶Основные области применения
¶Резервное копирование данных
В контексте резервного копирования снапшот — это логическая копия набора данных, зафиксированная на определённый момент. В отличие от полного копирования, снапшот часто реализуется механизмом «копирование при записи» (copy-on-write): при изменении исходных данных старая версия блока сохраняется отдельно, что позволяет создавать снапшот практически мгновенно и без дублирования всего объёма хранилища.
Снапшоты делятся на два основных типа:
- Клонирующие (full, independent) — после создания снапшот не зависит от исходных данных; изменения в оригинале не влияют на снимок.
- Перенаправляющие (redirect-on-write) — снапшот ссылается на исходные данные, при этом изменения перенаправляются в новое пространство; такой подход характерен для систем хранения NetApp.
В файловых системах поддержка снапшотов реализована в ZFS, Btrfs, ReFS, APFS. В Windows служба теневых копий (Volume Shadow Copy Service, VSS) позволяет создавать снапшоты томов NTFS для восстановления отдельных файлов.
¶Виртуализация и облачные технологии
В виртуализации снапшот — это сохранённое состояние виртуальной машины: содержимое оперативной памяти, состояние виртуальных устройств и конфигурация дисков. Популярные гипервизоры — VMware ESXi, Hyper-V, VirtualBox, KVM — поддерживают создание снапшотов, что применяется при обновлении программного обеспечения, тестировании и откате изменений.
В облачной инфраструктуре снапшоты дисков предлагаются как стандартная функция: в Amazon Web Services это Amazon EBS Snapshots, в Яндекс Облаке — снапшоты дисков и репликация в Object Storage, в Selectel и Timeweb Cloud — снапшоты виртуальных дисков. Снапшоты используются для защиты от сбоев, миграции нагрузок и создания шаблонов окружений.
¶Системы управления версиями
В системах контроля версий (Git, Mercurial) снапшот — это зафиксированное состояние всего дерева файлов проекта. Каждый коммит в Git фактически является снапшотом, а не набором дельт: Git сохраняет полное дерево объектов, оптимизируя хранение через неизменяемые объекты (blobs, trees, commits) и ссылки на них. Это отличает Git от поколенческих систем (SVN, CVS), где хранятся только изменения между версиями.
¶Распределённые базы данных
В распределённых СУБД снапшот — согласованный набор данных, видимый одной транзакцией в момент её начала. Свойство изоляции snapshot isolation гарантирует, что транзакция видит состояние базы на момент старта, не замечая параллельных изменений. Механизм реализован в PostgreSQL (уровень изоляции REPEATABLE READ и SNAPSHOT ISOLATION), в системах на базе MVCC (Multi-Version Concurrency Control), в Microsoft SQL Server (транзакционные снапшоты). Снапшот-изоляция предотвращает «грязное чтение» и неповторяющееся чтение, но при этом допускает аномалию «write skew», поэтому в некоторых СУБД (PostgreSQL) реализован расширенный вариант —.Serializable Snapshot Isolation (SSI).
¶Типичные сценарии использования
- Восстановление после сбоя или программной ошибки (откат к рабочему состоянию).
- Тестирование обновлений и патчей с возможностью быстрого возврата.
- Создание временных копий окружений для разработки и отладки.
- Миграция виртуальных машин и контейнеров между хостами.
- Аудит и соответствие требованиям — фиксация состояния данных на определённую дату.
¶Ограничения
Снапшот не является полноценной резервной копией: он хранится в той же системе, что и исходные данные, и не защищает от аппаратного сбоя носителя или программного сбоя самой системы хранения. Для защиты от таких сценариев снапшоты дополняются выгрузкой в отдельное хранилище (offsite-копии). Кроме того, накопление большого числа снапшотов может приводить к деградации производительности системы хранения и росту потребления места.
¶Интересные факты
Термин «снимок» в контексте хранения данных ввела компания Data General в 1980-х годах для своей системы хранения Data General/ONE. В современной инфраструктуре снапшоты стали одним из базовых механизмов защиты данных: по данным отраслевых отчётов, подавляющее большинство корпоративных систем хранения поддерживают их аппаратно.
Источники:
- Таненбаум Э., Бос Х. «Современные операционные системы»
- Гарсия-Молина Г., Ульман Дж., Уидом Дж. «Системы управления базами данных. Полный курс»
- Документация PostgreSQL, Git, ZFS
- Материалы VMware, Amazon Web Services, Яндекс Облако
