컴퓨터 파일 시스템에서 스냅샷(snapshot)은 과거의 한 때 존재하고 유지시킨 컴퓨터 파일과 디렉터리의 모임이다. 이 용어는 사진술에서 말하는 스냅샷에서 비롯한 말이다.
원칙
용량이 큰 데이터를 완전히 백업할 경우 계산에 오랜 시간이 걸릴 수 있다. 다중 작업을 하는 시스템이나 여러 사용자가 함께 쓰는 시스템에서는 백업을 하는 동안 해당 데이터에 기록이 있을 수 있다. 이는 백업이 원자성으로부터 빗겨가게 하고 데이터를 손상시키는 결과를 초래한다. 이를테면 사용자가 백업 중인 디렉터리에 파일을 이동할 경우, 해당 파일은 백업 미디어에서 완전히 분실된 상태에 놓이게 된다.
살아 있는 데이터를 안전하게 백업하는 방법은 백업을 하는 동안 응용 프로그램의 접근을 중단하거나, 예외 읽기 접근을 강제하기 위해 운영 체제가 제공하는 잠금 API를 사용함으로써 일시적으로 데이터 쓰기 접근을 비활성화하는 것이다.
이 경우 데스크톱 컴퓨터나 소형 워크그룹 서버와 같은 이용성이 떨어지는 시스템에는 큰 문제가 없지만, 24/7 시스템과 같은 고성능 시스템에서는 서비스 정지를 감당할 수 없다.
시스템 다운을 피하기 위해, 고성능 시스템은 스냅샷을 기반으로 한 백업을 수행한다. 읽기 전용 복사본은 일시에 고정되며 응용 프로그램이 데이터에 쓰기를 계속할 수 있게 만들어 준다. 대부분의 스냅샷 기능은 효과적이며, 0(1)으로 스냅샷을 만들 수 있다. 다시 말해, 스냅샷에 필요한 시간과 입출력은 데이터 모임의 크기에 따라 커지지는 않지만, 직접적인 백업은 데이터 세트의 크기에 비례한다.
도입
볼륨 관리자
일부 유닉스 시스템(리눅스, HP-UX)은 스냅샷을 사용할 수 있는 논리 볼륨 관리를 이용한다. 블록을 다른 장치에 덮어씌우기 직전에 변경된 블록을 복사함으로써 완전한 블록 장치에 카피 온 라이트(copy-on-write) 기능을 제공한다. 이로써 이전의 영속적인 블록 장치의 이미지를 보존할 수 있다. 이 이미지의 파일 시스템은 나중에 읽기 전용 매체처럼 마운트할 수 있다. 블록 수준의 스냅샷 저장은 스냅샷을 위한 직접적인 파일 시스템 지원에 비해 거의 공간을 효율적으로 쓰지 못한다.
ZFS는 블록 수준에서 읽기-쓰기 스냅샷을 추적하지만 사용자 응용 프로그램을 복제하는 하이브리드 기능을 갖추고 있다.
애플의 맥 오에스 텐 v10.5운영 체제에서 제공하는 타임 머신은 스냅샷 계획은 아니지만 시스템 수준의 증식 백업 서비스이다. 마운트되어 있는 볼륨의 변경 사항을 거의 감시하지는 않지만 변경된 파일을 주기적으로 특별히 지정된 볼륨에 복사한다.
데이터베이스
SQL 규격은 transaction isolation의 4가지 수준을 요구한다. 최상위 수준인 SERIALIZABLE의 경우 스냅샷은 사용자도 모르게 트랜잭션이 시작할 때 만들어진다. 수많은 유명한 SQL 데이터베이스의 백업 유틸리티는 이 기능을 사용하여 영속적인 표 자료를 만들어낸다.
가상화
시스템 에뮬레이터는 게스트 운영 체제를 가상 머신에서 호스트한다. VMware, Qemu, VirtualPC와 같은 일부 프로그램은 컴퓨터의 상태 자체를 백업 파일로 옮김으로써 완전한 시스템 스냅샷을 수행할 수 있다.