Comment monter une partition à partir d'un fichier image contenant plusieurs partitions sous Linux?
-
07-07-2019 - |
Question
Le fichier image a une table de partition et il contient plusieurs partitions.
Des périphériques en boucle pourraient être une possibilité.
Discussions connexes:
La solution
Disons que $ IMAGE est défini sur le chemin d'accès à votre fichier image. Vous pouvez écrire un petit script en utilisant
fdisk -u sectors -l $IMAGE
pour obtenir une liste des partitions à l'intérieur de l'image. Et puis utilisez une séquence de
mount -o ro,loop,offset=$OFFSET -t auto $IMAGE /media/$DEST
Où offset est calculé, les informations provenant de fdisk (secteur début * taille d'un secteur en octets) et $ DEST un nom unique pour chacune des partitions.
Ce n’est pas directement la solution, mais j’espère une bonne indication sur la façon de la réaliser. Si vous faites le travail une fois, vous avez un petit début sympa pour une boîte à outils médico-légale!
Autres conseils
Vous pouvez le faire comme ceci, sans trop de soucis:
# kpartx -v -a logging-test.img
add map loop0p1 (251:0): 0 497664 linear /dev/loop0 2048
add map loop0p2 (251:1): 0 66605058 linear /dev/loop0 501758
add map loop0p5 (251:2): 0 66605056 251:1 2
# ls /dev/mapper/
control loop0p1 loop0p2 loop0p5
# mount /dev/mapper/loop0p1 /mnt/test
# mount | grep test
/dev/mapper/loop0p1 on /mnt/test type ext2 (rw)
#
Et pour supprimer le périphérique de boucle après avoir terminé:
# kpartx -v -d logging-test.img
del devmap : loop0p2
del devmap : loop0p1
loop deleted : /dev/loop0
#
Si vous avez util-linux v2.21 ou supérieur, vous pouvez maintenant le faire avec losetup. Utilisez l'option -P
( - partscan
) pour lire la table de partitions et créer des nœuds de périphérique pour chaque partition:
# losetup --show -f -P test.img
/dev/loop0
# ls /dev/loop0*
/dev/loop0
/dev/loop0p1
/dev/loop0p2
# mount /dev/loop0p1 /mnt/tmp
automatisation losetup -P
losetup -P
est la meilleure méthode à partir d'Ubuntu 16.04, comme indiqué à l'adresse https: // stackoverflow. com / a / 15200862/895245 , voici des fonctions à automatiser si vous le souhaitez. Utilisation:
$ los my.img
/dev/loop0
/mnt/loop0p1
/mnt/loop0p2
$ ls /mnt/loop0p1
/whatever
/files
/youhave
/there
$ sudo losetup -l
NAME SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE DIO
/dev/loop1 0 0 0 0 /full/path/to/my.img
$ # Cleanup.
$ losd 0
$ ls /mnt/loop0p1
$ ls /dev | grep loop0
loop0
Source:
los() (
img="$1"
dev="$(sudo losetup --show -f -P "$img")"
echo "$dev"
for part in "$dev"?*; do
if [ "$part" = "${dev}p*" ]; then
part="${dev}"
fi
dst="/mnt/$(basename "$part")"
echo "$dst"
sudo mkdir -p "$dst"
sudo mount "$part" "$dst"
done
)
losd() (
dev="/dev/loop$1"
for part in "$dev"?*; do
if [ "$part" = "${dev}p*" ]; then
part="${dev}"
fi
dst="/mnt/$(basename "$part")"
sudo umount "$dst"
done
sudo losetup -d "$dev"
)
Ok, cette question est ancienne, mais juste pour être complet: Cela ici me semble beaucoup plus facile.
Citation:
rmmod loop
modprobe loop max_part=63
losetup -f /path/to/your/disk/image.raw
mount /dev/loop0p1 /mnt/path
Encore plus d'automatisation par rapport aux réponses précédentes.
Pour simplifier davantage la tâche (ce qui est nécessaire si vous le faites souvent), vous pouvez utiliser mon script mountimg
pour tout faire à votre place. Obtenez-le simplement à partir de https://github.com/AlexanderAmelkin/mountimg .
et utiliser comme ceci:
mountimg disk_image.img $PARTNO /mnt/mountpoint
Vous pouvez également spécifier le type de système de fichiers et toute autre option de montage supplémentaire si vous le souhaitez:
mountimg disk_image.img $PARTNO /mnt/mountpoint -t vfat -o codepage=866,iocharset=utf-8
Lorsque vous avez terminé avec la partition, il suffit de umount
:
umount /mnt/mountpoint