web-dev-qa-db-fra.com

Comment monter une image de carte SD créée avec DD?

J'ai créé une image de ma carte SD Raspberry Pi avec dd:

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

La carte SD comprend deux partitions (une vfat, une ext4) qui sont automatiquement montées lorsque je branche la carte.

Ma question: Comment puis-je monter ces partitions à partir du fichier .img?


Plus de détails:

$ 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
20
MrD

Après quelques tests supplémentaires, j'ai trouvé la solution moi-même: kpartx

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

Cette commande a créé /dev/mapper/loop0p1 et /dev/mapper/loop0p2. Ensuite, ces partitions peuvent être montées directement:

Sudo mount -o rw -t ext4 /dev/mapper/loop0p2 mount_target/
16
MrD

Pour éviter d'avoir à créer des images distinctes pour chaque partition ou à installer un utilitaire tel que kpartxname__, vous pouvez monter chaque partition individuellement en spécifiant un offsetdans la commande mountname__.

Examinez d’abord les partitions dans le fichier image et déterminez le décalage à l’aide de fdiskname__:

$ 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

Prenez le secteur Startde la partition que vous voulez et multipliez cette valeur par la taille Unitsname__. Donc, si vous voulez la deuxième partition, vous aurez 540672 * 512 = 276824064.

Maintenant, créez un dossier et montez la partition:

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

Une fois que vous avez fini de faire ce que vous voulez avec les données de la partition:

Sudo umount rpi_partition2/
rm -r rpi_partition2/
33
Forage

si votre objectif est d'explorer ou de modifier le contenu d'une partition (système de fichiers), cette ligne de commande monte le système de fichiers du vidage de la carte sd my_sdcard_dump.img dans le répertoire 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 ]
1
davlar

Traiter une image d'un disque entier avec plusieurs partitions est assez délicat . Linux n'a pas été conçu pour lire une table de partition dans un fichier normal, même lorsqu'il est attaché à un périphérique de bouclage. Vous devez donc identifier avec soin les décalages des partitions et les transmettre à la commande mount.

Le moyen préférable serait de créer des images séparées de chaque partition:

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

Maintenant, vous pouvez facilement traiter ces fichiers comme s'il s'agissait de partitions individuelles sur un disque et les monter comme vous le feriez normalement avec une partition de disque réelle en les mappant sur un périphérique en boucle . Un périphérique en boucle, ou périphérique de bouclage, est un périphérique virtuel qui fournit une couche de traduction permettant à Linux de traiter un fichier comme un périphérique en mode bloc (comme un disque ou une partition).

Les périphériques de boucle sont généralement /dev/loop0 à /dev/loop8. Identifiez un périphérique de boucle inutilisé à l'aide de la commande losetup:

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

Cette réponse indique un périphérique de boucle non attribué. Nous pouvons maintenant affecter le périphérique de boucle à l'un de nos fichiers image:

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

L'absence de sortie de cette commande indique le succès. Désormais, /dev/loop0 correspond, dans la plupart des cas, à /dev/sdf1 de votre carte SD, et vous pouvez le monter comme vous le feriez normalement:

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

Répétez le processus en utilisant un autre périphérique de boucle pour monter l’autre partition. Lorsque vous avez terminé, démontez les systèmes de fichiers et désattribuez les périphériques en boucle:

Sudo umount /dev/loop0
Sudo losetup -d /dev/loop0
0
tgies