[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[RiminiLUG-General] loop device per LVM o file immagine (da serata XEN)



Prendendo spunto da un passaggio effettuato da Christian durante la
serata sulla virtualizzazione per approfondire un aspetto:

per chi non era presente rissumo un attimo (spero di non commettere errori):

prendiamo il caso in cui un file immagine o un volume logico contenga
non una singola partizione ma un insieme di partizioni (come ad
esempio avviene installando una macchina virtuale)

Si supponga di dover accedere ai file system in esso contenuti. Il
classico mount come dispositivo di loopback (mount -o loop)
fallirebbe, in quanto il file (o il vol. logico LVM) contiene appunto
più di una partizione (e quindi più di un file system).

Se non ricordo male (e qui Christian o Antonio, che era
particolarmente attento, mi vengano in aiuto) è possibile ovviare al
problema associando un loopback device ad una delle partizioni
contenute nell'iimagine, utilizando il comando losetup con il
parametro offset, e poi eseguire il mopunt di tale loop device così
definito.
Per stabilire quale offset utilizzare si può usare fdisk -l
<file.img>, vedere a quale blocco inizia la partizione la partizione a
cui si vuole accedere e moltiplicare tale numero per la dimensione del
blocco (restituita sempre da fdisk).

Questo mi pare sia stato quello fatto martedì sera da Christian (ho
sbagliato qualcosa?)

Primo dubbio:
c'è differenza ad usare il comando losetup per definire un block
device o ad usare direttamente il comando mount -o loop passando ad
esso il parametro di offset?

Secondo dubbio:
tra i miei spaciughi con xen e immagini virtuali mi sono imbattutto
nel comando 'kpartx'. Se non ho capito male non è un comando legato a
xen ma utilizzabile indipendentemente (?).

Questo comando sembra semplificare la vita in quanto:
eseguo 'kpartx -va <file.img>' e questo mi crea le device maps per le
partizioni trovate in quell'immagine (si veda man kpartx);
a quel punto posso eseguire il mount (senza preoccuparmi dell'offset)

Per sempio:

-------------------------------------------------------
#fdisk -l vm03.img

Disk vm03.img: 8388 MB, 8388608000 bytes
255 heads, 63 sectors/track, 1019 cylinders, total 16384000 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00059326

  Device Boot      Start         End      Blocks   Id  System
vm03.img1   *        2048    15611903     7804928   83  Linux
vm03.img2        15613950    16381951      384001    5  Extended
vm03.img5        15613952    16381951      384000   82  Linux swap / Solaris
-------------------------------------------------------

#kpartx -va vm03.img

add map loop0p1 (253:10): 0 15609856 linear /dev/loop0 2048
add map loop0p2 (253:11): 0 768002 linear /dev/loop0 15613950
add map loop0p5 : 0 768000 linear 253:11 2
-------------------------------------------------------

#ls /dev/mapper/

control  loop0p2  system-backup  system-iso   system-swap  loop0p1
loop0p5  system-home    system-root
-------------------------------------------------------

#mount -o loop /dev/mapper/loop0p1 /mnt/disk

-------------------------------------------------------

alla fine: c'è differenza tra le due modalità (loop con offset vs kpartx)?


Ivan