Снапшот (информационные технологии)¶
Снапшот (от англ. snapshot — «снимок») — термин информационных технологий, обозначающий зафиксированный в определённый момент времени снимок состояния системы, данных или объекта. В отличие от динамических данных, которые непрерывно изменяются, снапшот представляет собой неизменяемую копию, позволяющую вернуться к состоянию на момент её создания. Термин применяется в виртуализации, системах резервного копирования, базах данных, управлении версиями и распределённых системах.
¶Виртуализация
В виртуализации снапшот — это сохранённое состояние виртуальной машины (память, состояние процессора, конфигурация дисков) в конкретный момент. Основные гипервизоры — VMware ESXi, Microsoft Hyper-V, KVM, VirtualBox — поддерживают механизм снапшотов.
При создании снапшота виртуальный диск переводится в режим copy-on-write: исходный образ остаётся неизменным, а все новые изменения записываются в отдельный дельта-файл. Это позволяет создавать снапшот практически мгновенно независимо от объёма данных. По мере накопления изменений размер дельта-файла растёт, что требует мониторинга свободного места.
Снапшоты виртуальных машин используются для:
- создания контрольных точек перед установкой обновлений или изменением конфигурации;
- временного сохранения состояния при тестировании программного обеспечения;
- быстрого развёртывания однотипных виртуальных машин из золотого образа.
Важное ограничение: снапшот не является полноценной резервной копией. Он зависит от исходного состояния и не защищает от отказа физического носителя.
¶Системы хранения данных
В системах хранения (SAN, NAS, объектных хранилищах) снапшот реализуется на уровне массива дисков. Существуют два основных подхода:
- Copy-on-write — при изменении блока его исходное содержимое копируется в отдельное пространство, после чего блок перезаписывается. Создание снапшота мгновенное, но чтение старых данных требует обращения к дельта-файлу.
- Redirect-on-write — новые данные записываются в новые блоки, а снапшот продолжает ссылаться на исходные. Считается более эффективным при работе с большими объёмами.
В операционной системе Linux снапшоты поддерживаются файловыми системами Btrfs и ZFS. Btrfs позволяет создавать снапшоты томов, в том числе read-only (только для чтения) и read-write. ZFS использует механизм copy-on-write на уровне пула, что обеспечивает целостность данных и защиту от «тихого повреждения» (bit rot).
¶Базы данных
Снапшот в базах данных — это согласованный набор данных на определённый момент. В реляционных СУБД снапшот реализуется через:
- механизмы транзакционного изоляции — уровень изоляции SNAPSHOT в Microsoft SQL Server и PostgreSQL, при котором читающий запрос видит данные в состоянии на момент начала транзакции;
- снимки баз данных — в SQL Server команда CREATE DATABASE SNAPSHOT создаёт неизменяемый read-only образ, пригодный для отчётов и восстановления.
В распределённых базах данных снапшоты используются для консистентных бэкапов без остановки сервиса.
¶Распределённые системы и управление версиями
В распределённых системах хранения снапшот — это механизм, обеспечивающий согласованное состояние нескольких узлов. Технология Copy-on-write file system (ZFS) на NAS-системах Synology и QNAP позволяет создавать снапшоты с заданной периодичностью и хранить их в течение длительного времени.
В системах контроля версий термин используется в нескольких значениях:
- Git — снапшотом называют фиксацию состояния рабочего дерева (commit), хотя внутренне Git использует не полные копии, а систему снапшотов с дельта-компрессией;
- Mercurial — в отличие от Git, каждая ревизия является полным снапшотом дерева файлов.
¶Сетевые технологии
В сетевых технологологиях снапшот применяется для анализа трафика: Wireshark и tcpdump сохраняют снимок сетевых пакетов в файл pcap для последующего разбора. В программировании снапшот-тестирование (snapshot testing) фиксирует вывод компонента и сравнивает его с сохранённым эталоном при последующих запусках.
¶Отличие от резервной копии
Снапшот и резервная копия принципиально различаются:
| Параметр | Снапшот | Резервная копия |
|---|---|---|
| Зависимость от исходных данных | Да | Нет |
| Защита от отказа носителя | Нет | Да |
| Скорость создания | Мгновенная | Долгая |
| Хранение | Локально, на том же устройстве | На отдельном носителе |
Снапшоты дополняют резервное копирование, но не заменяют его.
¶История
Механизм copy-on-write впервые был описан в операционной системе Multics (1965). В 1980-х годах технология получила развитие в файловой системе Sun Microsystems. Коммерческое применение снапшотов в дисковых массивах началось в конце 1990-х годов с продуктов EMC Timefinder и NetApp.
¶Источники
- Таненбаум Э., Бос Х. Современные операционные системы
- Документация VMware vSphere
- Документация проекта OpenZFS
- RFC 3444 — Model for Managing Configuration
