Снапшот — технология снимков состояния¶
Снапшот (от англ. snapshot — «снимок») — термин, обозначающий точную копию состояния системы, данных или объекта в определённый момент времени. В информационных технологиях снапшоты применяются для резервного копирования, виртуализации, управления базами данных и контроля версий. Ключевая особенность снапшота — возможность быстрого восстановления сохранённого состояния без повторного создания полной копии данных.
¶Снапшот в файловых системах и хранении данных
В системах хранения снапшот — это механизм создания неизменяемых копий набора данных. Наиболее распространённая технология — copy-on-write («копирование при записи»): при создании снапшота данные физически не дублируются, а фиксируется ссылка на исходное состояние. При последующем изменении исходные данные сохраняются отдельно, что позволяет восстановить снимок в исходном виде.
Снапшоты файловых систем поддерживаются в ZFS, Btrfs, ReiserFS, а также в коммерческих системах хранения — NetApp ONTAP, Dell EMC. В Linux механизм снапшотов LVM (Logical Volume Manager) позволяет создавать снимки логических томов для резервного копирования работающих файловых систем без остановки сервисов.
¶Снапшот в виртуализации
В виртуализации снапшот фиксирует состояние виртуальной машины: содержимое оперативной памяти, состояние виртуальных дисков, конфигурацию устройства. После создания снапшота дальнейшие изменения записываются в отдельный дельта-файл (overlay), что позволяет вернуть машину в сохранённое состояние за секунды.
Технология активно используется в гипервизорах VMware ESXi, Microsoft Hyper-V, KVM, а также в продуктах для настольной виртуализации — VirtualBox, VMware Workstation. Снапшоты применяются при тестировании программного обеспечения, разворачивании однотипных виртуальных машин и перед установкой обновлений.
¶Снапшот в базах данных
В СУБД снапшот — это согласованный набор данных на определённый момент. В Oracle Database механизм Flashback Snapshot позволяет читать данные в их состоянии на прошлый момент времени. В Microsoft SQL Server снапшоты реализованы через механизм database snapshot для целей отчётов и резервного копирования.
В распределённых базах данных снапшоты обеспечивают механизм репликации: каждая реплика отражает состояние основной базы на момент снимка. Термин также используется в контексте MVCC (Multi-Version Concurrency Control), где снапшот — это вид данных, доступный конкретной транзакции.
¶Снапшот в системах контроля версий
В системах контроля версий (Git, Mercurial, Subversion) снапшот — это зафиксированное состояние рабочего дерева файлов. В Git каждый коммит фактически является снапшотом проекта: содержимое всех отслеживаемых файлов сохраняется в объектном хранилище с уникальным хешем. Это отличает Git от систем, использующих дельта-модель (Subversion), где хранятся только изменения между версиями.
¶Снапшот в облачных технологиях
Облачные провайдеры — Amazon Web Services, Яндекс Облако, Selectel — предоставляют снапшоты виртуальных машин и дисков как штатный механизм резервного копирования. Снимок создаётся в фоновом режиме, не останавливая работающую машину. В AWS снапшоты EBS хранятся в S3 с дедупликацией и построчным сжатием, что снижает стоимость хранения.
¶Снапшот в контейнеризации
В Docker снапшоты реализованы через систему слоёв образов: каждый слой образа — это снимок изменений файловой системы относительно предыдущего слоя. Технология overlayfs объединяет слои в единое виртуальное представление. В контейнерных платформах Kubernetes снапшоты дисков реализуются через CSI (Container Storage Interface) и используются для бэкапов Persistent Volume.
¶Снапшот в распределённых системах
В распределённых системах снапшоты применяются для координации и отказоустойчивости. Алгоритм Чанды-Лампорта позволяет создавать согласованные снимки состояния распределённого процесса без остановки вычислений. Технология нашла применение в системах обработки потоковых данных — Apache Flink, Apache Kafka Streams, — где снапшот обеспечивает гарантию exactly-once при восстановлении после сбоя.
¶Отличие снапшота от резервной копии
Снапшот и резервная копия часто отождествляются, но это разные понятия. Резервная копия — это независимый набор данных, сохранённый в отдельном хранилище. Снапшот, как правило, зависит от исходной системы: при выходе из строя носителя снапшоты на этом носителе утрачиваются. Для полноценной защиты данных снапшоты дополняются выгрузкой в отдельное хранилище.
¶Применение
Снапшоты используются в следующих областях:
- Резервное копирование — регулярные снимки состояния систем и данных;
- Тестирование — создание изолированной среды с возможностью отката;
- Развёртывание — клонирование однотипных виртуальных машин;
- Аудит — фиксация состояния на момент инцидента;
- Аналитика — чтение данных без влияния на работающую систему.
Источники:
- Таненбаум Э., Бос Х. Современные операционные системы
- Чанди М., Лампорт Л. Distributed Snapshots: Determining Global States of Distributed Systems
- Документация Oracle Database, Microsoft SQL Server, VMware vSphere
- Документация ZFS, Btrfs, LVM (The Linux Documentation Project)
- Документация Git, Docker, Kubernetes
