web-development-kb-pt.site

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

Eu usei dd para fazer backup de uma unidade 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

Tentei encontrar o tipo de sistema de arquivos com file -s

[email protected] $ 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?

19
fox

Quando você usa dd em /dev/sdb ao invés de /dev/sdb1 ou /dev/sdb2, você copia todas as partições da referida unidade para uma arquivo.

Você deve montar cada partição separadamente.


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

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

sdb.img: setor de inicialização x86; partição 1 : ID = 0x12, início 1, setor de inicialização 63 , 10233342 setores; partição 2 : ID = 0xc, ativo, início 0, setor de inicialização 10233405 , 72517410 setores; partição 3 : ID = 0xc, starthead 0, startector 82750815 , 73545570 setores, deslocamento de código 0xc0

Partição Startsector
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ê terá que executar:

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

Nota lateral: certifique-se de que /mnt/sdb2 existe antes de você executar isso.

Diverta-se!


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

27
Stefan

No Linux, os comandos de montagem dentro de resposta aceita criarão implicitamente um dispositivo de loop. Assumindo que a imagem de disco completo tem uma tabela de partição correta (que seu kernel é capaz de entender), você pode preferir usar losetup(8) diretamente para evitar o incômodo de calcular offsets. Além disso, não há necessidade de ferramentas extras como kpartx conforme sugerido em outro resposta . Ele fará basicamente a mesma coisa que o seguinte:

losetup -Prf sdb.img Irá associar o primeiro dispositivo de loop livre (-f) Como somente leitura (-r) Com o arquivo de imagem sdb.img. A opção -P Força o kernel a varrer a tabela de partição deste dispositivo de loop e criará dispositivos de loop para cada partição.

Portanto, 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, em um ponto de montagem desejado.

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

Manter tudo somente leitura é opcional, mas pode ser uma boa opção para uma imagem de backup.

update: opção -P foi adicionada com 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 do 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) .

7
escrl

Alternativamente, você pode usar uma boa ferramenta chamada kpartx. Na página de manual:

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

Isso significa que você pode fazer 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 você deseja a segunda partição na imagem.

2
Omer Dagan