Создание lvm снапшота и восстановление из него.

Небольшая статья о том, как создать снапшот lv диска и восстановить из него диск в начальное состояние.

Создаем снапшот командой lvcreate, размер снапшота может значительно отличаться от размера оригинального диска, т.к. на него записываются только оригиналы измененных файлов.

lvcreate -s -L [размер снапшота] -n [имя снапшота] [lv диск с которого делается снапшот]
 
lvcreate -L10G -s -n snaphot_test.local /dev/vmstore/test.local

Увидеть что снапшот создан можно введя команду lvscan:

vm:~/# lvscan 
File descriptor 7 (pipe:[35908221]) leaked on lvscan invocation. Parent PID 19580: bash
  ACTIVE            '/dev/vmstore/server.local' [50,00 GiB] inherit
  ACTIVE            '/dev/vmstore/mail.local'   [20,00 GiB] inherit
  ACTIVE   Original '/dev/vmstore/test.local'   [10,00 GiB] inherit
  ACTIVE   Snapshot '/dev/vmstore/snaphot_test.local' [10,00 GiB] inherit
  ACTIVE            '/dev/vmstore/data.local'   [20,00 GiB] inherit

Увидеть процент использованого объема снапшота можно командой lvs, если снапшот переполнится, то он автоматически деактивируется.

vm:~/# lvs
File descriptor 7 (pipe:[35908221]) leaked on lvs invocation. Parent PID 19580: bash
  LV      			VG		Attr       LSize   Pool Original	 Data%  Meta%  Move Log Cpy%Sync Convert
 
  server.local			vmstore 	owi-aos---  50,00g                                                               
  test.local			vmstore 	-wi-a-----  10,00g                                                               
  mail.local			vmstore		-wi-ao----  20,00g                                                               
  snaphot_test.local    	vmstore		swi-a-s---  10,00g      test.local	 8,60
  server.local			vmstore		owi-aos---  50,00g

Origin — к какому логическому тому относиться snapshot.
Data% — процент исползованного объема от выделенного.

Востанавливаем lv из снапшота

При этом необходимо отмонтировать восстанавливаемый lv диск или выключить виртуальную машину использующую его.

lvconvert --merge [путь к снапшоту]
vm:~/# lvconvert --merge /dev/vmstore/snaphot_test.local 
File descriptor 7 (pipe:[35908221]) leaked on lvconvert invocation. Parent PID 19580: bash
  Merging of volume snaphot_test.local started.
  test.local: Merged: 91,3%
  test.local: Merged: 91,4%
  test.local: Merged: 91,7%
  test.local: Merged: 92,1%
  test.local: Merged: 92,5%
  test.local: Merged: 93,0%
  test.local: Merged: 93,6%
  test.local: Merged: 94,2%
  test.local: Merged: 94,7%
  test.local: Merged: 95,2%
  test.local: Merged: 95,8%
  test.local: Merged: 96,4%
  test.local: Merged: 96,7%
  test.local: Merged: 97,1%
  test.local: Merged: 97,5%
  test.local: Merged: 97,6%
  test.local: Merged: 97,7%
  test.local: Merged: 97,9%
  test.local: Merged: 98,1%
  test.local: Merged: 98,4%
  test.local: Merged: 98,5%
  test.local: Merged: 98,6%
  test.local: Merged: 98,9%
  test.local: Merged: 99,0%
  test.local: Merged: 99,1%
  test.local: Merged: 99,2%
  test.local: Merged: 99,4%
  test.local: Merged: 99,4%
  test.local: Merged: 99,5%
  test.local: Merged: 99,6%
  test.local: Merged: 99,9%
  test.local: Merged: 99,9%
  test.local: Merged: 100,0%
  Merge of snapshot into logical volume test.local has finished.
  Logical volume "snaphot_test.local" successfully removed

После данной операции lv вернется в исходное состояние, а снапшот будет удален.

Следует помнить, если у lv есть снапшот, то запись данных на него будет приводить еще и к записи на снапшот, т.е. количество операций записи возрастает в 2 раза, а если снапшотов несколько, то скорость записи упадет в разы. Поэтому все это необходимо учитывать при использовании снапшотов.