Come posso montare un `img` creato con / bin / dd di un disco rigido?


19

Ho usato ddper il backup di un disco da 80 GB

dd if=/dev/sdb of=~/sdb.img

Ora ho bisogno di accedere ad alcuni file su quell'unità, ma non voglio copiare ".img" nuovamente sull'unità.

mount ~/sdb.img /mnt/sdbnon funziona neanche. Restituisce:

mount: you must specify the filesystem type

Ho provato a trovare il tipo di filesystem con file -s

fox@shoebox $ file -s sdb.img
sdb.img: x86 boot sector; partition 1: ID=0x12, starthead 1, startsector 63, 10233342 sectors; partition 2: ID=0xc, active, starthead 0, startsector 10233405, 72517410 sectors; partition 3: ID=0xc, starthead 0, startsector 82750815, 73545570 sectors, code offset 0xc0

È possibile montare sdb.imgo devo usare ddper ripristinare l'unità?

Risposte:


27

Quando si utilizza ddal /dev/sdbposto di /dev/sdb1o /dev/sdb2, si copiano tutte le partizioni da detta unità in un unico file.

È necessario montare ciascuna partizione separatamente.


Per montare una partizione da un file , devi prima scoprire dove si trova la partizione nel file.

Usando il tuo output da file -s sdb.imgtroviamo il startsectorsper ogni partizione:

sdb.img: settore di avvio x86; partizione 1 : ID = 0x12, testa di inizio 1, settori di avvio 63 , 10233342 settori; partizione 2 : ID = 0xc, attivo, inizio 0, settori di avvio 10233405 , settori 72517410; partizione 3 : ID = 0xc, inizio 0 , inizio settori 82750815 , settori 73545570, offset codice 0xc0

Partition      Startsector
1 63
2 10233405
3 82750815

Per montare una singola partizione, dove si X trova il launchector di quella partizione, eseguire:

mount ~/sdb.img /mnt/sdb -o offset=$((X*512))

Quindi per montare la seconda partizione , dovrai eseguire:

mount ~/sdb.img /mnt/sdb2 -o offset=$((10233405*512))

sidenote: assicurati che /mnt/sdb2esista prima di eseguire questo.

Divertiti!


aggiornamento: nella risposta, ho ipotizzato che la dimensione del settore per la tua immagine fosse 512, vedi questa domanda su come calcolarla.


Puoi anche ottenere gli startector in un formato tabulare usando file -l sdb.imgcome pubblicato nella risposta alla tua domanda: unix.stackexchange.com/questions/2668/…
studente

@student: solo una correzione per i futuri lettori: fdisk -lnon lo sarebbe file -l.
Runium,

Ulteriori chiarimenti: è possibile ottenere il numero di settori a 512 byte aggiungendo l'opzione -u a quel comando - quindifdisk -u -l sdb.img
Aaron Mason

Se la versione di fileè meno loquace di default, prova ad aggiungere l' -kinterruttore per ottenere il tipo di output mostrato nella risposta - in questo modo: file -k FILENAME.img.
Christian Pietsch,

7

Su Linux i comandi di mount all'interno della risposta accettata creeranno implicitamente un dispositivo loop. Supponendo che l'immagine del disco completo abbia una tabella delle partizioni corretta (che il tuo kernel è in grado di comprendere), potresti preferire utilizzare losetup(8)direttamente per salvare la seccatura del calcolo degli offset. Inoltre, non sono necessari strumenti aggiuntivi come kpartxquello suggerito in un'altra risposta . Farà sostanzialmente la stessa cosa della seguente:

losetup -Prf sdb.imgassocerà il primo dispositivo ad anello libero ( -f) come readonly ( -r) al file di immagine sdb.img. L' -Popzione forza il kernel a scansionare la tabella delle partizioni di questo dispositivo loop e creerà dispositivi loop per ogni partizione.

Quindi potresti ottenere qualcosa del tipo:

$ lsblk
NAME      MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
loop0       7:0    0 167.7G  1 loop
├─loop0p1 259:0    0   500M  1 loop
└─loop0p2 259:1    0 167.2G  1 loop
...

Ora è possibile montare ogni partizione, ovviamente di sola lettura, nel punto di montaggio desiderato.

$ mount -r /dev/loop0p1 /tmp/backup_sdb1

Mantenere tutto in sola lettura è facoltativo, ma può essere una buona cosa da fare per un'immagine di backup.

aggiornamento: l' -Popzione è stata aggiunta con util-linux-2.21 nel 2012. Quindi non era disponibile al momento della scrittura della risposta accettata. Nota anche questo e le altre risposte sono specifiche per Linux. OpenBSD e NetBSD hanno dischi vnode gestiti da vnconfig(8)e FreeBSD ha dischi di memoria gestiti da mdconfig(8).


2

In alternativa, puoi usare un simpatico strumento chiamato kpartx. Dalla pagina man:

kpartx - Crea mappe dei dispositivi dalle tabelle delle partizioni

Ciò significa che puoi creare un "pseudo dispositivo", con partizioni di dispositivo, direttamente dal file img:

$ kpartx -av sdb.img
add map loop0p1 (254:2): 0 2048 linear /dev/loop0 0
add map loop0p2 (254:3): 0 31162 linear /dev/loop0 2048
$ lsblk
.
.
.
loop0                     7:0    0  16.2M  0 loop
├─loop0p1               254:2    0     1M  0 part
└─loop0p2               254:3    0  15.2M  0 part

Quindi puoi montare /dev/mapper/loop0p2per esempio, se vuoi la seconda partizione sull'immagine.

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.