J'ai fait une image de mon disque entier avec
dd if=/dev/sda of=/media/external_media/sda.img
Maintenant, le problème est que je voudrais monter un système de fichiers ext4 qui était sur ce disque, mais
mount -t ext4 -o loop /media/external_media/sda.img /media/sda_image
donne évidemment une erreur de superbloc puisque l'image contient le disque entier (MBR, autres partitions) et pas seulement la partition dont j'ai besoin. Je suppose donc que je devrais trouver un moyen de faire apparaître l’image disque dans le dossier /dev/
...
Est-ce que quelqu'un sait comment faire ça?
PS: Je peux toujours dd
sauvegarder l’image sur le disque d’origine, mais ce serait très pratique (j’ai mis à jour le système d’exploitation et j’aimerais le conserver tel quel)
Obtenir la disposition de la partition de l'image
$ Sudo fdisk -lu sda.img
...
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
...
Device Boot Start End Blocks Id System
sda.img1 * 56 6400000 3199972+ c W95 FAT32 (LBA)
Calcule le décalage du début de l'image au début de la partition
Taille du secteur * Début = (dans le cas) 512 * 56 = 28672
montez le sur/dev/loop0 en utilisant l'offset
Sudo losetup -o 28672 /dev/loop0 sda.img
Maintenant, la partition réside sur /dev/loop0 . Vous pouvez fsck , montez-le, etc.
Sudo fsck -fv /dev/loop0
Sudo mount /dev/loop0 /mnt
Démonter
Sudo umount /mnt
Sudo losetup -d /dev/loop0
Mise à jour pour Ubuntu 16.04: Avec le nouveau losetup
ceci est maintenant plus facile:
Sudo losetup -Pf disk_image.raw
Voir le reste de la réponse pour les anciennes versions d'Ubuntu.
Une solution simple consiste à utiliser kpartx : il va déterminer la disposition des partitions et les mapper sur des périphériques en mode bloc. Après cela, tout ce que vous avez à faire est de monter celui que vous voulez.
Ouvrez Terminal, localisez l’image disque et entrez la commande suivante:
$ Sudo kpartx -av disk_image.raw
add map loop0p1 (252:2): 0 3082240 linear /dev/loop0 2048
add map loop0p2 (252:3): 0 17887232 linear /dev/loop0 3084288
Ceci a créé loop0p1
et loop0p2
sous /dev/mapper
. Dans la sortie, vous pouvez voir la taille des partitions, ce qui vous aide à les identifier. Vous pouvez monter celui que vous voulez avec:
$ Sudo mount /dev/mapper/loop0p2 /mnt
Sinon, le périphérique de blocage est détecté par Nautilus et vous pouvez le monter à partir de la barre latérale:
Lorsque vous avez terminé, démontez ce que vous avez monté et supprimez le mappage de périphérique:
$ Sudo umount /mnt
$ Sudo kpartx -d disk_image.raw
Edit: fonctionne avec util-linux> = 2.21 . Au moment de la rédaction, ubuntu est livré avec la version 2.20 uniquement.
De man losetup :
-P, --partscan
force kernel to scan partition table on newly created loop device
Donc juste courir
$ Sudo losetup -f --show -P /path/to/image.img
créer des nœuds de périphérique pour chaque partition de votre image disque sur le premier périphérique de boucle inutilisé et l’imprimer sur la sortie standard. Si vous utilisez /dev/loop0
device, il créera au moins /dev/loop0p1
que vous pourrez monter comme d’habitude.
Essayez gnome-disk-image-mounter
:
gnome-disk-image-mounter sda.img
Non Sudo
requis. Il sera monté à /media/your_user_name/partition_name
, tout comme les clés USB.
losetup -P
automation
losetup -P
est la meilleure méthode à partir d’Ubuntu 16.04, comme indiqué à l’adresse https://askubuntu.com/a/496576/52975 , voici des fonctions à automatiser ultérieurement. Usage:
$ 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
La 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"
)
module de boucle max_part config
Ceci est une méthode décente avant 16.04.
loop
est un module de noyau, intégré au noyau dans Ubuntu 14.04.
Si vous le configurez correctement, Linux divise automatiquement les périphériques pour vous.
cat /sys/module/loop/parameters/max_part
indique le nombre de partitions que loop
peuvent générer.
Il s'agit de 0
par défaut sur Ubuntu 14.04, raison pour laquelle aucune division automatique n'a lieu.
Pour le changer, on peut soit ajouter:
options loop max_part=31
dans un fichier dans /etc/modprobe
, ou:
GRUB_CMDLINE_LINUX="loop.max_part=31"
à /etc/default/grub
puis à Sudo update-grub
.
Comment définir un paramètre de module est également couvert à: Comment ajouter des paramètres de module au noyau?
Après un redémarrage, quand vous faites:
Sudo losetup -f --show my.img
il monte l'image sur un périphérique /dev/loopX
et monte automatiquement les partitions sur des périphériques /dev/loopXpY
.
C'est donc la méthode la plus pratique si vous souhaitez redémarrer.
Voir aussi
Utilisez losetup pour attacher l’image entière du disque.
# Sudo losetup /dev/loop2 sda.img
Ensuite, utilisez mdadm pour créer un périphérique md et des périphériques de blocage seront créés pour toutes les partitions.
# Sudo mdadm --build --level=0 --force --raid-devices=1 /dev/md2 /dev/loop2
mdadm: array /dev/md2 built and started.
Vous devriez maintenant voir les périphériques de partition.
nile-172-b0fef38-76:/mnt/sdb1 # ls -l /dev/md2*
brw-rw---- 1 root disk 9, 2 Oct 10 12:37 /dev/md2
brw-rw---- 1 root disk 259, 0 Oct 10 12:37 /dev/md2p1
La manière la plus simple, à mon avis, utilise mount -o loop,offset=...
comme mentionné dans cette réponse sur StackOverflow . L'idée est la suivante:
fdisk -l $IMAGE
# calculate the offset in bytes
mount -o loop,offset=$OFFSET $IMAGE $MOUNTPOINT
Cette méthode est préférable car elle ne nécessite pas la suppression du périphérique de boucle après le démontage de la partition montée.
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. Il suffit de l’obtenir de https://github.com/AlexanderAmelkin/mountimg et l’utiliser comme ceci:
mountimg /media/external_media/sda.img 2 /media/sda_image
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 /media/external_media/sda.img 2 /media/sda_image -t vfat -o codepage=866,iocharset=utf-8
Lorsque vous avez terminé avec la partition, il suffit simplement de umount
it:
umount /media/sda_image