Forum Linux.debian/ubuntu problème pour monter une image dans un dossier temporaire

Posté par . Licence CC by-sa.
Tags : aucun
0
16
oct.
2019

Bonjour,
Je débute sur Linux…

J'ai récupéré une image de Raspbian que j'ai dézippé dans un dossier.
mkdir raspbian
cd raspbian
wget (le lien de mon image)
unzip monimage.zip

Je veux maintenant extraire les fichiers.
Pour extraire les fichiers qui m'intéressent, je veux monter l'image de Raspbian dans un répertoire temporaire.

sudo losetup -f --show -P (mon image)
/dev/loop26
sudo mkdir /mnt/imageroot
sudo mount /dev/loop26 /mnt/imageroot

Or j'ai une erreur qui apparaît : wrong fs type, bad option, bad superblock on /dev/loop26, missing codepage or helper program or other error

Qu'est ce que cela signifie ? comment dois-je procéder ?

En vous remerciant.

  • # L'image doit contenir plusieurs partitions ....

    Posté par . Évalué à 3 (+1/-0). Dernière modification le 16/10/19 à 18:35.

    Si ma mémoire est bonne, une image pour raspberry pi contient au moins deux partitions :
    - une partition fat32 pour le démarrage du pi
    - une partition avec la distribution en elle-même (montée sur /).

    Je ne sais plus trop comment ça marche avec losetup et comment il se débrouille pour gérer les multiples partitions … Peux-tu faire un truc du style :

    sudo fdisk -l /dev/loop26 puis un ls -l /dev/loop26* après losetup, et faire un copier/coller ici ?

    Sinon peut-être que tu trouveras ton bonheur ici : https://unix.stackexchange.com/questions/342463/how-to-mount-multiple-partitions-from-disk-image-simultaneously

    Il semble qu'il est possible d'utiliser l'option -P avec losetup.

    Plus d'infos en français ici :http://memo.raphaelguetta.fr/post/mount-image-as-device/

    • [^] # Re: L'image doit contenir plusieurs partitions ....

      Posté par . Évalué à 1 (+0/-0).

      Merci beaucoup à tous pour vos messages et explications.
      J'ai réglé le problème.
      En effet, il y a 2 partitions.
      En effectuant la commande : lsblk -f ,j'obtiens la liste et les caractéristiques des disques et de leurs partitions.

      Dont :

      loop26
      |-loop26p1 vfat boot xxxx-xxxx
      |-loop26p2 ext4 rootfs xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

      Après le losetup, j'ai donc effectué la commande :
      sudo mount /dev/loop26p1/mnt/imageroot et non loop26

      Par vérification :
      cd mondossier/
      ls

      J'ai bien extrait mon fichier .dtb

  • # kpartx est ton ami

    Posté par (page perso) . Évalué à 1 (+0/-0).

    losetup te permet d'obtenir un lien entre un périphérique loop et ton image.

    kpartx -asv /dev/loopX te permet d'activer chaque partition, ce qui permet de les retrouver en tant que /dev/mapper/loopXpY, avec lesquelles tu peux jouer via mount.

    Pour le clean-up : umount, kpartx -dsv /dev/loopX et losetup avec les bonnes options.

    Note que tu peux appeler kpartx -asv directement sur ton image. Le /dev/loopX sera mis en place automatiquement, et nettoyé quand tu appelleras kpart -dsv (flag autoclean ou équivalent).

    Debian Consultant @ DEBAMAX

  • # fdisk + mount avec option offset

    Posté par . Évalué à 3 (+2/-0).

    Exemple avec ce que j'ai sous le coude. Parce que sous UNIX, tout est fichier, fdisk peut prendre directement l'image en paramètre :

    # fdisk -l 2019-07-10-raspbian-buster-lite.img
    Disk 2019-07-10-raspbian-buster-lite.img: 2 GiB, 2197815296 bytes, 4292608 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
    Disklabel type: dos
    Disk identifier: 0x17869b7d
    
    Device                               Boot  Start     End Sectors  Size Id Type
    2019-07-10-raspbian-buster-lite.img1        8192  532480  524289  256M  c W95 FAT32 (LBA)
    2019-07-10-raspbian-buster-lite.img2      540672 4292607 3751936  1.8G 83 Linux
    

    Comme évoqué plus haut, on voit effectivement les deux partitions d'une image pour Raspberry Pi :

    • une de type FAT32 contenant kernel, modules, configuration, etc
    • une de type Linux avec le root filesystem (/) et l'OS

    mount monter ces partitions, c'est très simple. On commence par créer deux répertoires pour le montage :

    # mkdir p1 p2
    

    Premier montage :

    # mount -o loop,offset=$((8192*512)) 2019-07-10-raspbian-buster-lite.img p1
    

    Vérification :

    # l p1
    total 39510
    -rwxr-xr-x 1 root root   23946 Jul  8 15:02 bcm2708-rpi-b.dtb*
    -rwxr-xr-x 1 root root   24205 Jul  8 15:02 bcm2708-rpi-b-plus.dtb*
    -rwxr-xr-x 1 root root   23723 Jul  8 15:02 bcm2708-rpi-cm.dtb*
    -rwxr-xr-x 1 root root   23671 Jul  8 15:02 bcm2708-rpi-zero.dtb*
    -rwxr-xr-x 1 root root   24407 Jul  8 15:02 bcm2708-rpi-zero-w.dtb*
    -rwxr-xr-x 1 root root   25293 Jul  8 15:02 bcm2709-rpi-2-b.dtb*
    -rwxr-xr-x 1 root root   26463 Jul  8 15:02 bcm2710-rpi-3-b.dtb*
    -rwxr-xr-x 1 root root   27082 Jul  8 15:02 bcm2710-rpi-3-b-plus.dtb*
    -rwxr-xr-x 1 root root   25261 Jul  8 15:02 bcm2710-rpi-cm3.dtb*
    -rwxr-xr-x 1 root root   40284 Jul  8 15:02 bcm2711-rpi-4-b.dtb*
    -rwxr-xr-x 1 root root   52296 Jun 24 17:21 bootcode.bin*
    -rwxr-xr-x 1 root root     190 Jul 10 02:21 cmdline.txt*
    -rwxr-xr-x 1 root root    1735 Jul 10 02:08 config.txt*
    -rwxr-xr-x 1 root root   18693 Jun 24 17:21 COPYING.linux*
    -rwxr-xr-x 1 root root    3030 Jul  9 16:07 fixup4cd.dat*
    -rwxr-xr-x 1 root root    6068 Jul  9 16:07 fixup4.dat*
    -rwxr-xr-x 1 root root    9146 Jul  9 16:07 fixup4db.dat*
    -rwxr-xr-x 1 root root    9148 Jul  9 16:07 fixup4x.dat*
    -rwxr-xr-x 1 root root    2649 Jul  8 15:02 fixup_cd.dat*
    -rwxr-xr-x 1 root root    6724 Jul  8 15:02 fixup.dat*
    -rwxr-xr-x 1 root root    9802 Jul  9 16:07 fixup_db.dat*
    -rwxr-xr-x 1 root root    9798 Jul  9 16:07 fixup_x.dat*
    -rwxr-xr-x 1 root root     145 Jul 10 02:21 issue.txt*
    -rwxr-xr-x 1 root root 5299792 Jul  8 15:02 kernel7.img*
    -rwxr-xr-x 1 root root 5600464 Jul  8 15:02 kernel7l.img*
    -rwxr-xr-x 1 root root 5017104 Jul  8 15:02 kernel.img*
    -rwxr-xr-x 1 root root    1494 Jun 24 17:21 LICENCE.broadcom*
    drwxr-xr-x 2 root root   14848 Jul 10 02:07 overlays/
    -rwxr-xr-x 1 root root  762880 Jul  9 16:07 start4cd.elf*
    -rwxr-xr-x 1 root root 4716552 Jul  9 16:07 start4db.elf*
    -rwxr-xr-x 1 root root 2759172 Jul  9 16:07 start4.elf*
    -rwxr-xr-x 1 root root 3672712 Jul  9 16:07 start4x.elf*
    -rwxr-xr-x 1 root root  685412 Jul  9 16:07 start_cd.elf*
    -rwxr-xr-x 1 root root 4854088 Jul  9 16:07 start_db.elf*
    -rwxr-xr-x 1 root root 2878052 Jul  9 16:07 start.elf*
    -rwxr-xr-x 1 root root 3791560 Jul  9 16:07 start_x.elf*
    

    Seconde partition :

    # mount -o loop,offset=$((540672*512)) 2019-07-10-raspbian-buster-lite.img p2
    

    Vérification :

    # l p2
    total 88
    drwxr-xr-x  2 root root  4096 Jul 10 02:08 bin/
    drwxr-xr-x  2 root root  4096 Jul 10 02:20 boot/
    drwxr-xr-x  4 root root  4096 Jul 10 02:03 dev/
    drwxr-xr-x 80 root root  4096 Jul 10 02:21 etc/
    drwxr-xr-x  3 root root  4096 Jul 10 02:07 home/
    drwxr-xr-x 16 root root  4096 Jul 10 02:09 lib/
    drwx------  2 root root 16384 Jul 10 02:20 lost+found/
    drwxr-xr-x  2 root root  4096 Jul 10 02:03 media/
    drwxr-xr-x  2 root root  4096 Jul 10 02:03 mnt/
    drwxr-xr-x  3 root root  4096 Jul 10 02:07 opt/
    drwxr-xr-x  2 root root  4096 Jun  6 17:42 proc/
    drwx------  2 root root  4096 Jul 10 02:03 root/
    drwxr-xr-x  4 root root  4096 Jul 10 02:03 run/
    drwxr-xr-x  2 root root  4096 Jul 10 02:09 sbin/
    drwxr-xr-x  2 root root  4096 Jul 10 02:03 srv/
    drwxr-xr-x  2 root root  4096 Jun  6 17:42 sys/
    drwxrwxrwt  2 root root  4096 Jul 10 02:21 tmp/
    drwxr-xr-x 10 root root  4096 Jul 10 02:03 usr/
    drwxr-xr-x 11 root root  4096 Jul 10 02:03 var/
    

    Explication :

    L'option loop permet de monter ce genre d'image (ça pourrait être une ISO de CD, DVD ou Bluray aussi).
    L'option offset, comme sa traduction l'indique, permet un décalage d'un certain nombre d'octets. Ici, on sait que les partitions commencent à 8192 et 540672, et que c'est exprimé en secteurs, qu'un secteur fait 512 octets, et donc, on fourni la multiplication grâce à $((<debut> * <nb octets par secteur)).

    NB : je maîtrise mal loop & cie, et j'ai du "démonter" p1 avant de monter p2, suite à ce message d'erreur :

    mount: /home/Misc/RaspberryPi/RaspBian.images/2019-07-10-raspbian-buster-lite.img: overlapping loop device exists
    

    Tout ce que je sais, c'est qu'il existe un nombre limité de device loop possible et que c'est paramétrable (option du module, de mémoire).
    Ici, pour je ne sais quelle raison, j'ai probablement atteint la limite. Limite à 1 semble-t-il …
    Je ne vais pas le montrer ici, mais mount -o loop ... cache en fait un losetup suivit d'un mount. On pourrait décomposer les deux et peut-être éviter ce message d'erreur.

    NB2 : le l de l p1 et l p2 est un alias que je me refais partout :

    alias ls='ls -AF --color=auto'
    alias l='ls -l'
    
  • # au pif

    Posté par . Évalué à 2 (+0/-0).

    et simplement cliquer 2x sur l'image ne monterait pas le support tout seul, avec 2 lecteurs dans le navigateur de fichier ?

    c'est quand meme plus simple que de chercher les offset à la main à partir des partitions…

Envoyer un commentaire

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.