2009-09-14 12 views
35

Esiste un modo nuovo/migliore per il loopback di montare singole partizioni all'interno di un file che contiene una tabella delle partizioni su linux? Vedo il seguente, ma sono un po 'datati.loopback che monta singole partizioni all'interno di un file che contiene una tabella delle partizioni su linux

http://linux.derkeiler.com/Mailing-Lists/Kernel/2005-01/7183.html

http://lists.gnu.org/archive/html/grub-devel/2005-01/msg00077.html

ftp://ftp.hq.nasa.gov/pub/ig/ccd/enhanced_loopback/

+0

http://askubuntu.com/questions/69363/mount-single-partition-from-image-of-entire-disk-device || http://superuser.com/questions/117136/how-can-i-mount-a-partition-from-dd-created-image-of-a-block-device-e-g-hdd-u || http://unix.stackexchange.com/questions/9099/reading-a-filesystem-from-a-whole-disk-image –

risposta

25

Diciamo $ IMAGE è impostato il percorso del file di immagine. Si potrebbe scrivere un piccolo script utilizzando

fdisk -u sectors -l $IMAGE 

per ottenere un elenco delle partizioni all'interno dell'immagine. E quindi utilizzare una sequenza di

mount -o ro,loop,offset=$OFFSET -t auto $IMAGE /media/$DEST 

Dove compensato è calcolato significa informazioni da fdisk (settore iniziale * dimensioni di un settore in byte) e $ DEST un nome univoco per ciascuna delle partizioni.

Questa non è direttamente la soluzione, ma spero una buona indicazione su come realizzarla. Se fai il lavoro una volta, hai qualche piccolo buon inizio per qualche toolkit forense!

+1

Mentre questa risposta funziona, la risposta kpartx più recente è davvero migliore; ti dà un singolo comando che rende disponibili tutte le partizioni. – mkj

+1

Mentre kpartx è uno strumento piacevole, non è disponibile su tutti i sistemi. Diversi sistemi embedded su cui lavoro non lo hanno in modo nativo e ho bisogno di montare partizioni di immagini disco o anche sub partizioni di una partizione. – gnac

+0

esempio di applicazione di risposta sopra per le immagini Raspibian: http://raspberrypi.stackexchange.com/a/13138/359 –

62

Potresti farlo come questo , senza più problemi:

# kpartx -v -a logging-test.img 
add map loop0p1 (251:0): 0 497664 linear /dev/loop0 2048 
add map loop0p2 (251:1): 0 66605058 linear /dev/loop0 501758 
add map loop0p5 (251:2): 0 66605056 251:1 2 
# ls /dev/mapper/ 
control loop0p1 loop0p2 loop0p5 
# mount /dev/mapper/loop0p1 /mnt/test 
# mount | grep test 
/dev/mapper/loop0p1 on /mnt/test type ext2 (rw) 
# 

e per rimuovere il dispositivo di loop dopo aver finito:

# kpartx -v -d logging-test.img 
del devmap : loop0p2 
del devmap : loop0p1 
loop deleted : /dev/loop0 
# 
+10

Dovrebbe anche menzionare -d per stravolgere il setup. –

+1

Buon punto, grazie! Non avere l'immagine del disco intero ora a portata di mano, quindi chi ha bisogno potrebbe aver bisogno di man kpartx :-) –

+4

Per distruggerlo, si sostituisce semplicemente "-a" con "-d"; nell'esempio qui che sarebbe kpartx -v -d logging-test.img – mkj

35

Se hai v2.21 util-linux o superiore, ora si può fare questo con losetup. Utilizzare l'opzione -P (--partscan) per leggere la tabella delle partizioni e creare nodi di dispositivo per ogni partizione:

# losetup --show -f -P test.img 
/dev/loop0 

# ls /dev/loop0* 
/dev/loop0 
/dev/loop0p1 
/dev/loop0p2 

# mount /dev/loop0p1 /mnt/tmp 
+1

non funziona per me. utilizzando util-linux-ng 2.22.2, ottengo solo/dev/loop0 ... –

+2

Ho usato losetup da util-linux 2.22.2 correttamente come descritto sopra (pacchetto Mageia 3 util-linux-2.22.2-5.mga3 .src.rpm). – kbulgrien

+0

Una cosa che ho notato, però, è che l'utilizzo di root, invece di sudo, ha fatto la differenza, indipendentemente dal fatto che abbia funzionato o meno. – kbulgrien

3

Ok, questa domanda è eoni vecchio, ma solo per il Sako di completezza: This here sembra molto più facile per me .

Quota:

rmmod loop 
modprobe loop max_part=63 
losetup -f /path/to/your/disk/image.raw 
mount /dev/loop0p1 /mnt/path 
+1

Questo fallisce su Ubuntu 14.04 perché il modulo 'loop' è integrato quindi' rmmod' non funziona. Come risolvere il problema: http://askubuntu.com/a/673257/52975 –

5

losetup -P automazione

losetup -P è il metodo migliore partire Ubuntu 16.04 come accennato https://stackoverflow.com/a/15200862/895245, qui sono funzioni per automatizzare se ulteriormente. Uso:

$ los my.img 
/dev/loop0 
/mnt/loop0p1 
/mnt/loop0p2 

$ ls /mnt/loop0p1 
/whatever 
/files 
/youhave 
/there 

$ sudo losetup -l 
NAME  SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE                      DIO 
/dev/loop1   0  0   0 0 /full/path/to/my.img 

$ # Cleanup. 
$ losd 0 
$ ls /mnt/loop0p1 
$ ls /dev | grep loop0 
loop0 

Fonte:

los() (
    img="$1" 
    dev="$(sudo losetup --show -f -P "$img")" 
    echo "$dev" 
    for part in "$dev"?*; do 
    if [ "$part" = "${dev}p*" ]; then 
     part="${dev}" 
    fi 
    dst="/mnt/$(basename "$part")" 
    echo "$dst" 
    sudo mkdir -p "$dst" 
    sudo mount "$part" "$dst" 
    done 
) 
losd() (
    dev="/dev/loop$1" 
    for part in "$dev"?*; do 
    if [ "$part" = "${dev}p*" ]; then 
     part="${dev}" 
    fi 
    dst="/mnt/$(basename "$part")" 
    sudo umount "$dst" 
    done 
    sudo losetup -d "$dev" 
) 
0

Alcuni maggiore automazione delle risposte precedenti che erano fantastiche.

Per semplificare ulteriormente l'attività (che è necessaria se lo si fa spesso), è possibile utilizzare il mio script mountimg per fare tutto per te.Basta ottenere da https://github.com/AlexanderAmelkin/mountimg e utilizzare in questo modo:

mountimg disk_image.img $PARTNO /mnt/mountpoint 

Si può anche specificare il tipo di filesystem e qualsiasi altra ulteriore opzioni di montaggio, se ti piace:

mountimg disk_image.img $PARTNO /mnt/mountpoint -t vfat -o codepage=866,iocharset=utf-8 

Quando hai finito con la partizione , semplicemente umount esso:

umount /mnt/mountpoint