Come posso montare una partizione dall'immagine creata da dd di un dispositivo a blocchi (ad es. HDD) sotto Linux?


34

Ho un'immagine dell'intero disco creato usando dd . La struttura del disco è la seguente:

kent@cow:~$ sudo fdisk -l

Disk /dev/sda: 750.1 GB, 750156374016 bytes
255 heads, 63 sectors/track, 91201 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x000b8508

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           5       90872   729929303+  83  Linux
/dev/sda2           90873       91201     2642692+   5  Extended
/dev/sda5           90873       91201     2642661   82  Linux swap / Solaris

L'immagine è stata creata usando:

dd if=/dev/sda of=image750.img

Come potrei, se possibile, montare / dev / sda1 dall'immagine in modo da poter leggere i contenuti?

Non è un'opzione per clonare di nuovo l'HDD, so come farlo se avessi clonato solo la singola partizione da sola. Spero che sia ancora possibile con l'immagine attuale.



Risposte:


48

Al giorno d'oggi, esiste un modo migliore, non è più necessario utilizzare offset o kpartx:

losetup --partscan --find --show disk.img

mount /dev/loop0p1 /mnt

per liberare loop0, utilizzare after umount:

losetup -d /dev/loop0

8
Nella mia installazione di Ubuntu 14.04, losetup non fornisce un'opzione --partscan.
Cutter

1
@Cutter è stato aggiunto in util-linux 2.21, Ubuntu 16.04. :-)
Ciro Santilli 24 改造 中心 法轮功 六四 事件

Avendo usato kpartxprima, che monta le partizioni come /dev/mapper/loop3p1, voglio solo sottolineare che losetupcrea i dispositivi come /dev/loop0p1. La risposta lo nota, ma l'ho letto probabilmente 10 volte. : /
Randy Syring

13

Ho riscontrato questo problema oggi e volevo aggiornare le risposte solo come promemoria per me stesso. Invece di calcolare l'offset da solo, puoi utilizzare uno strumento che ti fornisce dispositivi montabili da un'immagine dd: kpartx

http://robert.penz.name/73/kpartx-a-tool-for-mounting-partitions-within-an-image-file/

http://linux.die.net/man/8/kpartx

Nel caso specifico, avrebbe bisogno di qualcosa di simile

sudo kpartx -a image750.img
sudo mount /dev/mapper/loop1p1 /mount/point -o loop,ro

dove loop1p1 sta per la prima partizione, loop1p2 per la seconda, ecc.


6

Hai la prima parte: fdisk -l per trovare l'offset iniziale. Prendi quel numero, moltiplicalo per 512 e otterrai l'opzione offset da montare. Quindi, per sda1 nel tuo caso, 5 * 512 = 2560. Quindi esegui il mount:

mount -o loop,offset=2560 -t auto /path/to/image.dd /mount/point

4

Il loopmounting è solo una parte della risposta.

Guarda http://wiki.edseek.com/guide:mount_loopback#accessing_specific_partitions_in_the_image per assistenza su come specificare la partizione. Penso che mount -o loop, offset = 32256 /path/to/image750.img / mnt funzionerà per te. ma dovresti davvero leggere il tutorial menzionato.


l'offset sembra sbagliato; che corrisponde a un inizio di partizione di 63 (<i> 63 * 512 = 32256 </i>). l'offset nella risposta di baumgart sembra più corretto per questa situazione. il collegamento è un buon riferimento, ma sarebbe una risposta migliore se ti prendessi il tempo di riassumere i passaggi o i comandi necessari per questa procedura. Grazie!
Quack Quixote

1

losetup -P automazione

Metodo citato da https://superuser.com/a/684707/128124 (aggiunto in util-linux v2.21, aggiunto Ubuntu 16.04), qui ci sono funzioni per automatizzarlo 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"
)

modulo loop max_part config

Metodo decente prima di util-linux v2.21.

loop è un modulo del kernel, integrato nel kernel di Ubuntu 14.04.

Se lo configuri correttamente, Linux suddivide automaticamente i dispositivi per te.

cat /sys/module/loop/parameters/max_part

indica quante partizioni looppossono essere generate dai dispositivi.

È 0di default su Ubuntu 14.04 ed è per questo che non si verifica alcuna divisione automatica.

Per cambiarlo, possiamo aggiungere:

options loop max_part=31

a un file in /etc/modprobeoppure:

GRUB_CMDLINE_LINUX="loop.max_part=31"

a /etc/default/grube poi sudo update-grub.

Anche come impostare un parametro del modulo è disponibile su: https://askubuntu.com/questions/51226/how-to-add-kernel-module-parameters

Dopo un riavvio, quando lo fai:

sudo losetup -f --show my.img

monta l'immagine su un /dev/loopXdispositivo e monta automaticamente le partizioni sui /dev/loopXpYdispositivi.

Quindi questo è il metodo più conveniente se sei disposto a riavviare.

Guarda anche


0

Se hai un file system in modalità Utente come fuse, quindi in ambienti desktop come Gnome e hai uno strumento installato come gnome-disk-image-mounter, quindi senza root anche con il tasto destro del mouse e apri con esso.


0

Credo che la risposta in loop sia la risposta -

sudo mkdir /path/to/dir/
mount -o loop example.img /path/to/dir/

Quanto sopra dovrebbe montarlo in quella directory.

Questo dovrebbe smontarlo:

umount /path/to/dir
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.