Como montar a imagem do cartão SD criada com o dd?

16

Eu criei uma imagem do meu cartão SD Raspberry Pi usando dd :

sudo dd if=/dev/sdf of=/home/myusername/raspberry-backup-2014-04-10.img

O cartão SD inclui duas partições (uma vfat, uma ext4) que são montadas automaticamente quando eu conecto o cartão.

Minha pergunta: Como posso montar essas partições do arquivo .img?

Mais detalhes:

$ fdisk -l raspberry-backup-2014-04-10.img 

Disk raspberry-backup-2014-04-10.img: 3974 MB, 3974103040 bytes
255 heads, 63 sectors/track, 483 cylinders, total 7761920 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000981cb

                          Device Boot      Start         End      Blocks   Id  System
raspberry-backup-2014-04-10.img1            8192      122879       57344    c  W95 FAT32 (LBA)
raspberry-backup-2014-04-10.img2          122880     7761919     3819520   83  Linux
    
por MrD 10.04.2014 / 15:46

4 respostas

13

Após alguns testes adicionais, eu mesmo encontrei a solução: kpartx

sudo kpartx -a raspberry-backup-2014-04-10.img

Este comando criou /dev/mapper/loop0p1 e /dev/mapper/loop0p2 . Depois, essas partições podem ser montadas diretamente:

sudo mount -o rw -t ext4 /dev/mapper/loop0p2 mount_target/
    
por MrD 10.04.2014 / 16:57
23

Para evitar a necessidade de criar imagens separadas para cada partição ou instalar um utilitário como kpartx , você pode montar cada partição individualmente, especificando um offset no comando mount .

Primeiro, examine as partições no arquivo de imagem e determine o deslocamento usando fdisk :

$ fdisk -u -l rpi_image280914 

Disk rpi_image280914: 16.0 GB, 16012804096 bytes
255 heads, 63 sectors/track, 1946 cylinders, total 31275008 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000cdac7

           Device Boot      Start         End      Blocks   Id  System
rpi_image280914p1   *        2048      514047      256000    c  W95 FAT32 (LBA)
rpi_image280914p2          540672    31242239    15350784   83  Linux

Pegue o setor Start da partição desejada e multiplique esse valor pelo Units size. Então, se você quiser a segunda partição, você receberá 540672 * 512 = 276824064 .

Agora crie uma pasta e monte a partição:

mkdir rpi_partition2
sudo mount -o loop,offset=276824064 rpi_image280914 rpi_partition2/

Quando terminar, faça o que quiser com os dados da partição:

sudo umount rpi_partition2/
rm -r rpi_partition2/
    
por Forage 19.10.2014 / 13:53
1

se o seu objetivo é explorar ou modificar o conteúdo de uma partição (sistema de arquivos), esta linha de comando montará o sistema de arquivos do dump do cartão SD my_sdcard_dump.img no diretório mount_dir .

part_id=2; INFILE=my_sdcard_dump.img; MOUNTPT=mount_dir PARTITION=${part_id}; sudo mount "$INFILE" "$MOUNTPT" -o loop,offset=$[ '/sbin/sfdisk -d "$INFILE" | grep "start=" | head -n $PARTITION | tail -n1 | sed 's/.*start=[ ]*//' | sed 's/,.*//'' * 512 ]
    
por davlar 16.04.2016 / 22:33
0

Lidar com uma imagem de um disco inteiro com várias partições é bastante complicado . O Linux não foi projetado para ler uma tabela de partição de um arquivo regular, mesmo quando conectado a um dispositivo de loopback, portanto, você deve identificar cuidadosamente os deslocamentos das partições e passá-las para o comando mount .

A maneira preferível seria criar imagens separadas de cada partição:

sudo dd if=/dev/sdf1 of=/home/myusername/raspberry-backup-sdf1-2014-04-10.img
sudo dd if=/dev/sdf2 of=/home/myusername/raspberry-backup-sdf2-2014-04-10.img

Agora você pode facilmente tratar esses arquivos como se fossem partições individuais em um disco, montando-as como faria normalmente em uma partição de disco real, mapeando-as para um dispositivo de loop . Um dispositivo de loop, ou dispositivo de loopback, é um dispositivo virtual que fornece uma camada de tradução para o Linux para tratar um arquivo como um dispositivo de bloco (como um disco ou partição).

Os dispositivos de loop normalmente são /dev/loop0 a /dev/loop8 . Identifique um dispositivo de loop não utilizado com o comando losetup :

$ sudo losetup /dev/loop0
loop: can't get info on device /dev/loop0: No such device or address

Esta resposta indica um dispositivo de loop não atribuído. Agora podemos atribuir o dispositivo de loop a um dos nossos arquivos de imagem:

$ sudo losetup /dev/loop0 /home/myusername/raspberry-backup-sdf1-2014-04-10.img

Ausência de saída deste comando indica sucesso. Agora /dev/loop0 é para a maioria das finalidades funcionalmente equivalente a /dev/sdf1 do seu cartão SD, e você pode montá-lo normalmente:

sudo mount -t vfat /dev/loop0 /media/sdimage-1

Repita o processo usando outro dispositivo de loop para montar a outra partição. Quando terminar, desmonte os sistemas de arquivos e desmarque os dispositivos de loop:

sudo umount /dev/loop0
sudo losetup -d /dev/loop0
    
por tgies 10.04.2014 / 16:20