Xen – připojení obrazu disku

 
 

Pokud provádíme obnovu systému je občas užitečné zachytit data z disku do souboru obrazu disku,
který je pak možné použít na jiném systému.
Je to užitečné když  například bezprostředně hrozí hardwarové selhání.
Můžete zkopírovat diskový obsah přes síť pomocí příkazu jako je tento:

# ssh -C user@remotehost „cat >disk1.img“ </dev/sda

Parametr -C specifikuje kompresi, která může nebo nemusí být prospěšná.
Záleží to na rychlosti síťového připojení a na rychlosti místního a vzdáleného CPU.

Výsledný soubor (disk1.img v tomto příkladu) je přesnou kopií dat originálního disku.
Stejný typ obrazu disku je využíván pro virtualizaci pomocí Xenu a KVM.

Příkaz file vypíše obsah tohoto souboru jako x86 boot sector:

# file disk1.img
disk1.img: x86 boot sector; partition 2: ID=0x83, starthead 0, startsector 208845, 1012095 sectors; partition 3: ID=0x83, starthead 0, startsector 1220940, 6972210 sectors

Můžete vidět  partition table tohoto obrazu disku když použijete  fdisk -l.
Ale pro přístup k jednotlivým partišnám uvnitř souboru
musíte nejprve použít příkaz losetup který zpřístupní image soubor jako blokové zařízení:

# losetup -f -v disk1.img
Loop device is /dev/loop0

Obsah souboru disk1.img file je nyní dostupný pře blokové zařízení /dev/loop0.
(Parametr -f specifikuje, že může být použito první dostuné /dev/loopN
a parametr  -v zapíná verbose mode aby nám bylo prozrazeno jméno blokového zařízení).
Nyní můžete použít kpartx pro vytvoření blokového zařízení pro každou partišnu uvnitř image souboru:

# kpartx -a -v /dev/loop0
add map loop0p1 : 0 208782 linear /dev/loop0 63
add map loop0p2 : 0 1012095 linear /dev/loop0 208845
add map loop0p3 : 0 6972210 linear /dev/loop0 1220940

Bloková zařízení partišen lze nalézt v  /dev/mapper an jsou pojmenována originálním jménem
pro bloková zařízení (loop0) s písmenem „p“ a  připojeným číslem partišny (připojené). 
Příkaz „file -s“ zanalizuje obsah každé partišny:

# file -s /dev/mapper/loop0p*
/dev/mapper/loop0p1: Linux rev 1.0 ext3 filesystem data
/dev/mapper/loop0p2: Linux/i386 swap file (new style) 1 (4K pages) size 126510 pages
/dev/mapper/loop0p3: LVM2 (Linux Logical Volume Manager) , UUID: 5zG5aVBny87KnCdsicTz3RQbt3w37db

V tomto příkladu první partišna obsahuje souborový systém,
který může být přímo připojen 
t.j. pomocí příkazů
mkdir /mnt/x1 ; mount /dev/mapper/loop0p1 /mnt/x1).

Druhá partišna obsahuje prostor pro swap, který nás pravděpodobně nebude příliš zajímat.
Třetí partišna obsahuje LVM physical volume (PV), takže budeme potřebovat použít příkazy vgscan a vgchange k získání přístupu:

# vgscan
Reading all physical volumes. This may take a while…
Found volume group „zephyr“ using metadata type lvm2
Found volume group „main“ using metadata type lvm2

# vgchange -ay
2 logical volume(s) in volume group „zephyr“ now active
4 logical volume(s) in volume group „main“ now active

# file -s /dev/mapper/zephyr-*
/dev/mapper/zephyr-home: Linux rev 1.0 ext3 filesystem data (large files)
/dev/mapper/zephyr-root: Linux rev 1.0 ext3 filesystem data (large files)

Poznámka: V tomto případě je objevené jméno VG zephyr.
Jakmile jsou tyto kroky uskutečněny, zephyr LVs cmůže být připojen obvyklým způsobem
a může být tak přistupováno k obsahu tohoto souboru.

Poznámka: Pokud jméno volume group (VG) v diskovém image souboru je v konfliktu s  VG jménem hosta může být nezbytné přejmenovat VG na hostu pomocí příkazu vgrename command pro získání prístupu k VG v image souboru. Avšak přejmenování  VG na hostu může být ošidný úkol. Z tohoto důvodu je silně doporučeno dávat VGs unikátní jména už když jsou vytvářeny. Nejlépe je pojmenovat každý vlastní systémový VG.

Když jsme hotovi s používáním img souboru vrátíme vše zpět:

# vgchange -an zephyr
0 logical volume(s) in volume group „zephyr“ now active
# kpartx -d /dev/loop0
# losetup -d /dev/loop0

 

 

Místo príkazu
ssh -C  je mnohem rychlejší použít:

gzip /dev/sda | ssh user@remotehost „gzip -dc >disk.img“

Ještě předtím, než bylo možné použít device mapper:

#!/bin/sh  # Mount partitions within a disk image file  # Author: P@adraigBrady.com  # V1.0      29 Jun 2005     Initial release # V1.1      01 Dec 2005     Handle bootable (DOS) parititons  if [ "$#" -ne "3" ]; then     echo "Usage: `basename $0`   " >&2     exit 1 fi  if ! fdisk -v > /dev/null 2>&1; then     echo "Can't find the fdisk util. Are you root?" >&2     exit 1 fi  FILE=$1 PART=$2 DEST=$3  UNITS=`fdisk -lu $FILE 2>/dev/null | grep $FILE$PART | tr -d '*' | tr -s ' ' | cut -f2 -d' '` OFFSET=`expr 512 '*' $UNITS` mount -o loop,offset=$OFFSET $FILE $DEST 

 

Zdroj:

http://dailypackage.fedorabook.com/index.php?/archives/161-System-Recovery-Week-Dealing-with-Disk-Images.html