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