Como eu monto um 'img' criado com / bin / dd de um disco rígido?

16

Eu usei dd para fazer backup de uma unidade de 80 GB

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

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

mount ~/sdb.img /mnt/sdb também não funciona. Ele 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.img ou devo usar dd para restaurar a unidade?

    
por fox 03.10.2010 / 12:08

3 respostas

26

Quando você usa dd on /dev/sdb em vez de /dev/sdb1 ou /dev/sdb2 , copia all as partições da unidade mencionada em um arquivo .

Você deve montar cada partição separadamente.

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

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

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

Partição Startsector
1 63
2 10233405
3 82750815

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

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

Então, para montar a segunda partição , você terá que executar:

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

sidenote: certifique-se de que /mnt/sdb2 exista antes de executar isso.

Divirta-se!

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

    
por 03.10.2010 / 12:10
4

Nos comandos de montagem do Linux no resposta aceita irá implicitamente criar um dispositivo de loop. Assumindo que a imagem completa do disco tem uma tabela de partição correta (que seu kernel é capaz de entender), você pode preferir usar losetup(8) diretamente para economizar o incômodo de calcular compensações. Também não há necessidade de ferramentas extras como kpartx como sugerido em outro responder . Ele fará basicamente a mesma coisa que o seguinte:

losetup -Prf sdb.img associará o primeiro dispositivo de loop livre ( -f ) como somente leitura ( -r ) ao arquivo de imagem sdb.img . A opção -P força o kernel a escanear a tabela de partições deste dispositivo de loop e criará dispositivos de loop para cada partição.

Então você pode conseguir 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, em um ponto de montagem desejado.

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

Manter tudo em ordem de leitura é opcional, mas pode ser bom para uma imagem de backup.

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

    
por 26.01.2018 / 02:58
1

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

kpartx - Create device maps from partition tables

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

Então você pode montar /dev/mapper/loop0p2 , por exemplo, se quiser a segunda partição na imagem.

    
por 22.11.2016 / 12:18

Tags