Linux : monter une image disque ISO contenant plusieurs partitions

Dans le cadre de mon travail j’ai dû monter une image ISO contenant plusieurs partitions. Il s’agissait de l’image disque d’une VM s’étant fait pirater, sur laquelle je devais faire des investigations. Si on fait un bête mount, ça ne marche pas :

$ sudo mount image.iso /mnt/
mount: /mnt: mauvais type de système de fichiers, option erronée, superbloc erroné sur /dev/loop0, page de code ou programme auxiliaire manquant, ou autre erreur.

Il faut procéder autrement. D’abord j’utilise fdisk pour récupérer les informations de base sur l’image ISO.

$ sudo fdisk image.iso

J’utilise la commande p pour avoir les informations :

Commande (m pour l'aide) : p
Disque image.iso : 50 GiB, 53687091200 octets, 104857600 secteurs
Unités : secteur de 1 × 512 = 512 octets
Taille de secteur (logique / physique) : 512 octets / 512 octets
taille d'E/S (minimale / optimale) : 512 octets / 512 octets
Type d'étiquette de disque : dos
Identifiant de disque : 0xe483a6f1

Périphérique Amorçage   Début       Fin  Secteurs Taille Id Type
image.iso1               2048   3905535   3903488   1,9G 82 partition d'échange Linux / Solaris
image.iso2   *        3905536 104857599 100952064  48,1G 83 Linux

Ici je vous qu’il y a deux partitions. La première c’est du swap, elle ne m’intéresse pas. La deuxième est la partition système, c’est celle là que je veux monter. J’ai besoin de récupérer trois informations : Taille de secteur, Début et Id. Dans mon cas, c’est respectivement 512, 3905536 et 83.

Id est un code indiquant le type formatage de la partition. Dans mon cas je sais ça correspond ext4, mais si on ne le sait pas, il suffit de faire la commande l pour lister les types existants :

Commande (m pour l'aide) : l

 0  Vide            24  NEC DOS         81  Minix / Linux a bf  Solaris        
 1  FAT12           27  TFS WinRE masqu 82  partition d'éch c1  DRDOS/sec (FAT-
 2  root XENIX      39  Plan 9          83  Linux           c4  DRDOS/sec (FAT-
 3  usr XENIX       3c  récupération Pa 84  OS/2 cachée ou  c6  DRDOS/sec (FAT-
 4  FAT16 <32M      40  Venix 80286     85  Linux étendue   c7  Syrinx         
 5  Étendue         41  PPC PReP Boot   86  NTFS volume set da  Données non-FS 
 6  FAT16           42  SFS             87  NTFS volume set db  CP/M / CTOS / .
 7  HPFS/NTFS/exFAT 4d  QNX4.x          88  Linux plaintext de  Dell Utility   
 8  AIX             4e  2e partie QNX4. 8e  LVM Linux       df  BootIt         
 9  Amorçable AIX   4f  3e partie QNX4. 93  Amoeba          e1  DOS access     
 a  Gestionnaire d' 50  OnTrack DM      94  Amoeba BBT      e3  DOS R/W        
 b  W95 FAT32       51  OnTrack DM6 Aux 9f  BSD/OS          e4  SpeedStor      
 c  W95 FAT32 (LBA) 52  CP/M            a0  IBM Thinkpad hi ea  Alignement Rufu
 e  W95 FAT16 (LBA) 53  OnTrack DM6 Aux a5  FreeBSD         eb  BeOS fs        
 f  Étendue W95 (LB 54  OnTrackDM6      a6  OpenBSD         ee  GPT            
10  OPUS            55  EZ-Drive        a7  NeXTSTEP        ef  EFI (FAT-12/16/
11  FAT12 masquée   56  Golden Bow      a8  UFS Darwin      f0  Linux/PA-RISC b
12  Compaq diagnost 5c  Priam Edisk     a9  NetBSD          f1  SpeedStor      
14  FAT16 masquée < 61  SpeedStor       ab  Amorçage Darwin f4  SpeedStor      
16  FAT16 masquée   63  GNU HURD ou Sys af  HFS / HFS+      f2  DOS secondaire 
17  HPFS/NTFS masqu 64  Novell Netware  b7  BSDI fs         fb  VMware VMFS    
18  AST SmartSleep  65  Novell Netware  b8  partition d'éch fc  VMware VMKCORE 
1b  W95 FAT32 masqu 70  DiskSecure Mult bb  Boot Wizard mas fd  RAID Linux auto
1c  W95 FAT32 masqu 75  PC/IX           bc  Acronis FAT32 L fe  LANstep        
1e  W95 FAT16 masqu 80  Minix ancienne  be  Amorçage Solari ff  BBT

Ensuite on peut quitter fdisk avec q :

Commande (m pour l'aide) : q

Maintenant il ne reste plus qu’à utiliser mount pour monter l’image ISO, mais en spécifiant l’offset de début de la partition qui nous intéresse. Ça se fait en multipliant les valeurs Taille de secteur et Début récupérées plus tôt. Dans notre cas : 3905536 × 512 = 1999634432

sudo mount -t ext4 -o loop,offset=1999634432 image.iso /mnt/