Como montar um `img` criado com / bin / dd de um disco rígido?

19

Eu costumava ddfazer backup de uma unidade de 80 GB

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

Agora eu preciso acessar alguns arquivos nessa unidade, mas não quero copiar o ".img" de volta na unidade.

mount ~/sdb.img /mnt/sdbtambém não funciona. Retorna:

mount: you must specify the filesystem type

Eu tentei encontrar o tipo de sistema de arquivos com 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

É possível montar sdb.imgou devo usar ddpara restaurar a unidade?

Raposa
fonte

Respostas:

27

Quando você usa ddem /dev/sdbvez de /dev/sdb1ou /dev/sdb2, copia todas as partições da referida unidade em um arquivo.

Você deve montar cada partição separadamente.


Para montar uma partição a partir de um arquivo , você deve primeiro descobrir onde está o arquivo em que a partição reside.

Usando sua saída file -s sdb.img, encontramos o startsectorspara cada partição:

sdb.img: setor de inicialização x86; partição 1 : ID = 0x12, cabeça inicial 1, setor inicializador 63 , 10233342 setores; partição 2 : ID = 0xc, ativo, cabeça inicial 0, setor de inicialização 10233405 , 72517410 setores; partição 3 : ID = 0xc, cabeça inicial 0, setores 82750815 , 73545570, setor de offset 0xc0

     Setor
de partida da partição 1 63
2 10233405
3 82750815

Para montar uma única partição, onde X é o setor de inicialização dessa partição, execute:

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

Portanto, para montar a segunda partição , você precisará executar:

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

Nota: verifique se /mnt/sdb2existe antes de executar isso.

Diverta-se!


update: Na resposta, assumi que o tamanho do setor para sua imagem era 512, consulte esta pergunta sobre como calcular isso.

Stefan
fonte
Você também pode obter os inicializadores em um formato tabular, file -l sdb.imgconforme publicado na resposta da sua pergunta: unix.stackexchange.com/questions/2668/…
student
@student: Só uma correção para futuros leitores: Isso seria fdisk -lnão file -l.
Runium 27/04
Esclarecimentos adicionais - você pode obter o número de setores de 512 bytes, adicionando a opção -u para esse comando - assimfdisk -u -l sdb.img
Aaron Mason
Se a sua versão do fileé menos falante por padrão, tente adicionar a -kchave para obter o tipo de saída mostrada na resposta - como este: file -k FILENAME.img.
Christian Pietsch
7

No Linux, os comandos de montagem da resposta aceita criarão implicitamente um dispositivo de loop. Supondo que a imagem completa do disco possua uma tabela de partição correta (que seu kernel possa entender), você pode preferir usar losetup(8)diretamente para economizar o trabalho de calcular deslocamentos. Também não há necessidade de ferramentas extras, como kpartxsugerido em outra resposta . Ele fará basicamente o mesmo que se segue:

losetup -Prf sdb.imgassociará o primeiro dispositivo de loop livre ( -f) como somente leitura ( -r) ao arquivo de imagem sdb.img. A -Popção força o kernel a verificar a tabela de partição desse dispositivo de loop e criará dispositivos de loop para cada partição.

Então você pode obter algo como:

$ 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
...

Agora você pode montar cada partição, somente leitura, é claro, no ponto de montagem desejado.

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

Manter tudo somente leitura é opcional, mas pode ser uma boa coisa a fazer para uma imagem de backup.

update: a -Popção foi adicionada ao util-linux-2.21 em 2012. Portanto, não estava disponível no momento em que a resposta aceita foi escrita. Observe também que esta e as outras respostas são específicas para linux. O OpenBSD e o NetBSD possuem discos vnode gerenciados vnconfig(8)e o FreeBSD possui discos gerenciados por memória mdconfig(8).

escrl
fonte
2

Como alternativa, você pode usar uma boa ferramenta chamada kpartx. Na página do manual:

kpartx - Crie mapas de dispositivos a partir de tabelas de partição

Isso significa que você pode criar um "pseudo dispositivo", com partições de dispositivo, diretamente do arquivo 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

Em seguida, você pode montar, /dev/mapper/loop0p2por exemplo, se desejar a segunda partição na imagem.

Omer Dagan
fonte