VM image som LV

1. Introduktion
2. Skapa LV
3. LV snapshot volymen
3.1 Skapa en snapshot LV
4. Göra en "live" backup
5. Avmontera snapshot volymen
6. Ett komplett script
7. Kolla live VM backup
8. Återställ backup sparse .img filen
9. Felsökning
9.1 Dubbla UUIDs
9.2 Generera nytt UUID
9.3 I/O error snapshot volym
10. Förkortningar

1. Introduktion

Denna guide omfattar såväl hur man lägger till en befintlig fil, som utgör en virtuell maskins (VM) filsystem, till en volymgrupp som en egen logisk volym (LV), och hur man skapar en logisk volym av det bibliotek som innehåller filer som utgör en virtuell maskins filsystem. Man kan antingen använda en befintlig volymgrupp eller skapa en ny. Notera att en partition endast kan tillhöra en volymgrupp (VG). Man skapar en ny volymgrupp, exempelvis virtual-machines, med programmet vgcreate.

vgcreate VolumeGroupName /dev/harddrive1 /dev/harddrive2

Fortsättningsvis benämns en fil som utgör en virtuell maskins (VM) filsystem för disk image. I förklaringar och exempel nedan används volymgruppen VolGroupHypervisor.

För att skapa en säkerhetskopia av en LV som omfattar en hel hårddisk läs denna artikeln.

Tillbaka till toppen.

2. Skapa LV

För att kunna göra säkerhetskopior av sina disk images under drift av den virtuella maskinen, måste varje disk image eller biblioteket där de finns lagade vara en egen LV. För att skapa dessa logiska volymer måste man först se till att de aktuella virtuella maskinerna ej är i drift.

Om man avser att skapa en LV för varje disk image använder man följande kommando.

DETTA FUNGERAR INTE! FÖRST MÅSTE MAN SKAPA DEN LOGISKA VOLYMEN.

dd if=/var/lib/libvirt/images/myVM.img of=/dev/VolGroupHypervisor/myVM

Avser man att skapa en logisk volym av biblioteket där man har sina disk images lagrade skapar man först en LV, och därefter monterar man det aktuella biblioteket.

lvdisplay

HÄR MÅSTE EN TEXTRUTA MED DESSA KOMMANDON FINNAS.

Jag tror backup proceduren går till enligt nedan men återstållningen fungera rinte.

# Create the new logical volume
lvcreate -L4M -n ha1 centos
dd if=/var/lib/libvirt/images/myVM.img of=/dev/centos/ha1 bs=512K

# Create the snapshot
lvcreate -L4M -s -n /dev/centos/ha1-snapshot /dev/centos/ha1

# Make a backup of the snapshot
dd if=/dev/centos/ha1-snapshot of=/backups/myVM.img bs=512K

# Once this is completed, discard the (no longer needed) snapshot
lvremove /dev/centos/ha1-snapshot

# Restore with dd
dd if=/backups/myVM.img of=/dev/centos/ha1 bs=512K

dd if=/dev/centos/ha1 of=/var/lib/libvirt/images/myVM.img bs=512K
Tillbaka till toppen.

3. Snapshot LV

Oavsett vilken av ovanstående metoder man väljer för att se till att sina disk images finns inom en LV, måste man alltid skapa en snapshot LV, där säkerhetskopiorna i form av snapshots skall lagras.

3.1 Skapa en snapshot LV

Man använder kommandot lvcreate för att skapa sin snapshot LV.

lvcreate volumeargument(t.ex. -L) volumesize -s -n snapshot_name path_to_logicalvolume

Exempel:

lvcreate -L 10G --snapshot --name images_snapshot /dev/mapper/VMs-images.

Eller kan man välja att göra en linjär logisk volym

VARFÖR SKULLE MAN VILJA GÖRA EN LINJÄR LV?

Använd kommanot lvdisplay för att se att den nya logiska snapshot volymen är skapad.

lvdisplay

Vi vill montera /dev/VMs/images_snapshot/mnt/backups/images_snapshots. Så vi måste skapa mappen för det först:

mkdir -p /mnt/backups/images_snapshot

Sen monteras snapshoten volymen:

mount /dev/VMs/images_snapshot /mnt/backups/images_snapshot/

Lista snapshotet:

ls -l /mnt/backups/images_snapshot/

Snapshot volymen har framgångsrikt blivit skapad.

Tillbaka till toppen.

4. Göra en "live" backup

MAN BÖR NOG FÖRST BORTSE FRÅN ATT TOMMA BLOCK MAN FÖREKOMMA, OCH VIDAREUTVECKLA SAKER OCH TING OCH VISA HUR MAN KAN GÖR AOM MAN INTE VILL HA TOMMA BLOCK.

MAN BÖR FÖRTYDLIGA OM DE AKTUELLA KOMMANDONA AVSER ATT MAN GÖR EN LOGISK VOLYM AV VARJE DISK IMAGE ELLER OM MAN AVSER ATT MAN GÖR EN LOGISK VOLYM AT MAPPEN DÄR MAN HAR SINA DISK IMAGE LAGRADE..

Man vill inte göra en backup med GB av tomma block, så då gör man en sparse fil som output utav backupen. dd stödjer INTE skapandet av sparse filer, men cp GÖR det. Så om man pipar outputen utav dd till cp med flaggan -sparse=always. Målet utav cp i kommandot nedanför är /proc/self/fd/0 vilket är standard inmatning. Det sista delen av kommandot nedanför är sökvägen där sparse skivavbildsfilen förverkligas.

time dd if=/dev/VolGroupHypervisor/myVmBackup| cp --sparse=always /proc/self/fd/0/mnt/backups/images_snapshots\VmLiveImageSparse.img 

Exempel:

time dd if=/dev/mapper/VMs-images| cp --sparse=always /proc/self/fd/0 /mnt/backups/images_snapshot/centosMailBackup.img
Tillbaka till toppen.

5. Avmontera snapshot volymen

Avmontera snapshotvolymen: Gå först till cd /

umount /dev/VMs/images_snapshot

Montera sedan snapshotvolymen igen mount -o nouuid /dev/VMs/images_snapshot /var/lib/libvirt/images

Men i de flesta guider så sägs det att lvremove ska funka men i vårt fall ger det: "Logical volume VMs/images_snapshot contains a filesystem in use."

Följande kommando avmonterar (-f avmonterar snapshotvolymen utan godkännande, annars kommer scriptet att stanna upp och vänta på användarens inmatning).

**VARNING**

Se till att den korreka Logiska Volymen som är specifiserad är SNAPSHOT volymen.

lvremove -f /dev/VolGroupHypervisor/myVmBackup

Exempel:

lvremove -f /dev/VMs/images
Tillbaka till toppen.

6. Ett komplett script

#!/bin/bash
# Create an LVM snapshot
lvcreate -L 10G -s -n backmyVm /dev/VolGroupHypervisor/myVm
# Note: "/proc/self/fd/0" = "standard input"
time dd if=/dev/VolGroupHypervisor/backupmyVm|cp --sparse=always /proc/self/fd/0 /mnt/LUN/CentOS-6.4_VMs/www_LiveImageSparse-`date +%Y%m%d`.img &
# Pause the script until the backup which was backgrounded has completed
wait $!
# the "-f" switch ("force") is necessary as the script will hang waiting for user input without it
lvremove -f /dev/VolGroupHypervisor/backupmyVm
exit
Tillbaka till toppen.

7. Kolla live VM backup

Stäng ner servern som du just gjorde en block-level kopia på, när den är nerstängd, starta kopian som nyss gjordes och kolla nagios och loggar. Kolla även bootloggen.

Kolla storleken på Sprase Imagen: Man kan se att man har sparat data här med hjälp av cp med sparse alternativet.

NOTIS: Använd du för att kolla storleken, likväl ls kommer att rapportera den sparsifierade backupen som samma storlek som den icke-sparsifierade image filen.

Icke sparsifierad dd image av VM:et

du -csh myVm_20130311.img
81G myVm_20130311.img
81G total
Tillbaka till toppen.

8. Återställ backup sparse .img filen

Om VM:et har kraschat, återställa det är enkelt, använd dd för att föra in backupen in i den Logiska Volymen på hypervisorn:

dd if=/mnt/LUN/VM_Backups/myVmLiveImageSparse.img  of=/dev/VolGroupHypervisor/myVM

Exempel:

dd if=/mnt/backups/images_snapshot/centosMailBackup.img of=/dev/mapper/VMs-images
Delar av guiden är byggd på information i från denna blogpost.
Tillbaka till toppen.

9. Felsökning

Här finns hjälp för vid felsökning.

9.1 Dubbla UUIDs

Vid montering:

mount -o nouuid källsökväg monteringspunkt

Exempel:

mount -o nouuid /mnt/usb /dev/sdc1

Detta kommando för man köra varje gång och montera varje gång om man inte genererar nytt UUID.

9.2 Generera nytt UUID

Just detta kommando kan enbart användas om disken är formaterad med filsystemet XFS. Annars kan man används tune2fs som har stöd för: ext2,ext3,ext4. För kommandon kan man kolla här.

xfs_admin -U generate källsökväg till disken

Exempel:

xfs_admin -U generate /dev/sda1

options för xfs_admin

-l (litet L) – prints the current file system label.
-L – changes the file system’s label.
-U – changes the file system’s UUID.

9.3 I/O error snapshot LV

Om man får Input/output error. Likt fdisk: cannot open /dev/mapper/VMs-images_snapshot: Input/output error kör då kommanot lvs.

LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
images VMs owi-aos--- 100.00m
images_snapshot VMs swi-Ios--- 100.00m images 100.00
root centos -wi-ao---- 7.57g
swap centos -wi-ao---- 924.00m

Börjar Attr raden för snapshot med S så är det fel på snapshotet. Börjar raden däremot med s så är det fungerande. Som man kan se så är %snapshot 100%, vilket innebär att allt COW utrymme är använt.

Tillbaka till toppen.

Förkortningar

PE = Physical Extent

PV = Physical Volume

LV = Logical Volume

LE = Logical Extent

VG = Volume Group

LVM = Logical Volyme Manager

UUID = Universally Unique IDentifier

Kommandon med förklaring.

Tillbaka till toppen.