7. 완벽한(consistent) 백업을 위한 스냅샷 만들기

이것은 보다 믿을수 없는 기능중의 하나이다. 당신에게는 많은 작업을 하고 있는 바쁜 서버가 있다고 하자. 유용한 백업을 위해서는, 많은 프로그램들을 셧다운 해야 하는데, 그렇지 않으면 자료가 백업당시와 변동된 상태로 끝나기 때문이다.

표준적인 예제는 파일을 /tmp 에서 /root 로 옮기는 것인데, /root 는 첫번째로 백업되는 곳이다. /root 가 읽혀졌을때, 파일은 아직 거기에 있지 않다. /tmp 가 백업될때는, 그 파일은 그곳에 없다.

또다른 예로는 데이터베이스나 디렉토리를 저장하는 것이 있다. 우리가 완전한 셧다운을 할 시간을 어플리케이션에 주지 않는 한은, 파일이 사용가능한 상태에 있는지 확인할 수 있는 단서가 없다.

또다른 문제가 생길 수도 있다. 우리는 어플리케이션을 셧다운하고, 백업을 하고, 어플리케이션을 다시 시작한다. 이것은 백업이 단 몇분만에 된다면 괜찮지만, 만약 여러 시간이 걸리거나 얼마나 오래 걸릴지 확신할수 조차 없다면 정말로 골치가 아프다.

LVM 은 이에 대한 해결책이다.

LVM 을 이용하여 논리적 볼륨에 대한 즉각적인 스냅샷 사진을 찍고, 그것을 마운트해서 그에 대한 백업을 만들 수 있다.

이렇게 해보자:

# mount /dev/test/HOWTO /mnt
# echo > /mnt/a.test.file 
# ls /mnt/  
a.test.file  lost+found
# ls -l /mnt/
total 13
-rw-r--r--    1 root     root            1 Apr  2 00:28 a.test.file
drwxr-xr-x    2 root     root        12288 Apr  2 00:28 lost+found

좋아, 이제 작업할 것이 생겼다. 스냅샷을 만들어보자:

# lvcreate --size 16m --snapshot --name snap /dev/test/HOWTO
lvcreate -- WARNING: all snapshots will be disabled if more than 16 MB are changed
lvcreate -- INFO: using default snapshot chunk size of 64 KB
lvcreate -- doing automatic backup of "test"
lvcreate -- logical volume "/dev/test/HOWTO" successfully created

'--size' 파라미터는 나중에 더 자세히 다루겠다. 스냅샷을 마운트하자:

# mount /dev/test/snap /snap
# ls /snap
total 13
-rw-r--r--    1 root     root            1 Apr  2 00:28 a.test.file
drwxr-xr-x    2 root     root        12288 Apr  2 00:28 lost+found
이제 원본으로부터 a.test.file 을 지우고, 스냅샷에 여전히 그것이 있는지 확인해보자:
# rm /mnt/a.test.file
# ls /snap
total 13
-rw-r--r--    1 root     root            1 Apr  2 00:28 a.test.file
drwxr-xr-x    2 root     root        12288 Apr  2 00:28 lost+found

놀라운 일이군!

7.1. 그것이 어떻게 작동하는가?

우리가 '--size' 파라미터를 설정해야 했음을 기억하는가? 실제로 일어나는 것은 'snap' 볼륨이 모든 블럭들의 사본, 혹은 LVM 이 그것들을 부르는 이름인 'chunks' 를 가지기를 필요로 하는 것인데, 이것은 원본에서 변경된 것이다.

우리가 a.test.file 을 삭제했을때, 그것의 inode 가 삭제되었다. 이것은 64KB를 'dirty' 상태로 표기하게 만들고 - 원본 자료의 사본은 'snap' 볼륨에 쓰여졌다. 이 경우에 우리는 스냅샷에 16MB 를 할당했고, 그래서 만약 16MB 이상의 'chunks' 가 수정되었다면, 스냅샷은 비활성화 될 것이다.

스냅샷 파티션에 대한 정확한 크기를 결정하기 위해서는, 프라이머리 LV 의 사용 경향과 스냅샷에 활성화될 시간의 길이에 기반해서 추측해야 한다. 예를 들어, 아무도 시스템을 사용하지 않는 한밤중에 하는 한시간짜리 백업은 공간을 거의 필요로 하지 않을 것이다.

스냅샷이 persistent 하지 않다는 점에 유의하라. 만약 LVM 을 unload 하거나 리부트한다면, 그것들은 사라지고, 다시 만들어져야 한다.