2009-09-14 17 views
35

Existe-t-il un nouveau/meilleur moyen de boucler le montage de partitions individuelles à partir d'un fichier contenant une table de partition sous Linux? Je vois ce qui suit mais ils sont un peu datés.montage en boucle de partitions individuelles à partir d'un fichier contenant une table de partitions sur Linux

http://linux.derkeiler.com/Mailing-Lists/Kernel/2005-01/7183.html

http://lists.gnu.org/archive/html/grub-devel/2005-01/msg00077.html

ftp://ftp.hq.nasa.gov/pub/ig/ccd/enhanced_loopback/

+0

http://askubuntu.com/questions/69363/mount-single-partition-from-image-of-entire-disk-device || http://superuser.com/questions/117136/how-can-i-mount-a-partition-from-dd-created-image-of-a-block-device-e-g-hdd-u || http://unix.stackexchange.com/questions/9099/reading-a-filesystem-from-a-whole-disk-image –

Répondre

25

Disons que $ image est réglée sur le chemin de votre fichier image. Vous pouvez écrire un petit script en utilisant

fdisk -u sectors -l $IMAGE 

pour obtenir une liste des partitions dans l'image. Et puis utiliser une séquence de

mount -o ro,loop,offset=$OFFSET -t auto $IMAGE /media/$DEST 

Où décalage est calculé signifie l'information de fdisk (secteur commencer 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 que c'est une très bonne indication sur la façon de le réaliser. Si vous faites le travail une fois, vous avez un petit bon début pour une boîte à outils médico-légale!

+1

Bien que cette réponse fonctionne, la réponse la plus récente de kpartx est vraiment meilleure; il vous donne une seule commande qui rend toutes les partitions disponibles. – mkj

+1

Alors que kpartx est un outil sympa, il n'est pas disponible sur tous les systèmes. Plusieurs systèmes embarqués sur lesquels je travaille ne l'ont pas en mode natif et j'ai besoin de monter des partitions d'images disque ou même des sous-partitions d'une partition. – gnac

+0

Exemple d'application de la réponse ci-dessus pour les images Raspibian: http://raspberrypi.stackexchange.com/a/13138/359 –

62

Vous pourriez le faire comme ceci , sans trop de tracas:

# 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 retirer le périphérique en boucle après avoir terminé:

# kpartx -v -d logging-test.img 
del devmap : loop0p2 
del devmap : loop0p1 
loop deleted : /dev/loop0 
# 
+10

Doit également mentionner -d pour déchirer l'installation. –

+1

Bon point, merci! Ne pas avoir l'image de disque complet maintenant utile pour jouer, donc ceux dans le besoin pourraient avoir besoin de man kpartx :-) –

+4

Pour le démolir, vous remplacez simplement "-a" avec "-d"; dans l'exemple ici, qui serait kpartx -v -d logging-test.img – mkj

35

Si vous avez v2.21 util-linux ou plus, vous pouvez maintenant le faire avec losetup. Utilisez l'option -P (--partscan) pour lire la table de partition et de créer des noeuds de périphériques 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 
+1

ne fonctionne pas pour moi. en utilisant util-linux-ng 2.22.2, j'obtiens seulement/dev/loop0 ... –

+2

J'ai utilisé losetup de util-linux 2.22.2 avec succès comme décrit ci-dessus (paquet Mageia 3 util-linux-2.22.2-5.mga3 .src.rpm). – kbulgrien

+0

Une chose que j'ai remarquée, cependant, c'est que l'utilisation de root, au lieu de sudo, a fait une différence, que cela ait fonctionné ou non. – kbulgrien

3

Ok, cette question est éons vieux, mais juste pour le sako d'exhaustivité: This here semble beaucoup plus facile de me .

Quote:

rmmod loop 
modprobe loop max_part=63 
losetup -f /path/to/your/disk/image.raw 
mount /dev/loop0p1 /mnt/path 
+1

Cela échoue sur Ubuntu 14.04 car le module 'loop' est intégré, donc' rmmod' ne fonctionne pas. Comment résoudre ce problème: http://askubuntu.com/a/673257/52975 –

5

losetup -P automatisation

losetup -P est la meilleure méthode à partir de Ubuntu 16.04 comme mentionné à https://stackoverflow.com/a/15200862/895245, voici les fonctions pour automatiser si d'autres. 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" 
) 
0

Certains plus d'automatisation des réponses précédentes qui était super.

Pour simplifier davantage la tâche (qui est nécessaire si vous le faites souvent), vous pouvez utiliser mon script mountimg pour tout faire pour vous.Il suffit de l'obtenir 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 tout autre support de fixation supplémentaire options 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 , simplement umount il:

umount /mnt/mountpoint