Forum Linux.général Problème /dev/loop

Posté par  . Licence CC By‑SA.
Étiquettes : aucune
0
22
sept.
2018

Bonjour
Tout d'abord je vous demande de faire preuve de clémence en vers le titre qui n'est pas très explicite.
Je voudrais monter un .img sur mon ordinateur. Je fais donc :

    sudo mount -o loop part.img folder

Il me répond :

       mount: wrong fs type, bad option, bad superblock on /dev/loop5,
       missing codepage or helper program, or other error

       Dans certains cas des renseignements utiles sont dans le journal
        système — essayez « dmesg | tail » ou quelque chose du genre.

Je fais donc ce qui est conseillé et j'obtiens :

    [ 8947.516356] usb 1-1: Product: Android
[ 8947.516359] usb 1-1: Manufacturer: Android
[ 8947.516363] usb 1-1: SerialNumber: 1400536c000202b034e
[ 8951.303492] usb 1-1: USB disconnect, device number 16
[ 8951.727373] usb 1-1: new high-speed USB device number 17 using xhci_hcd
[ 8951.875750] usb 1-1: New USB device found, idVendor=1f3a, idProduct=1007
[ 8951.875756] usb 1-1: New USB device strings: Mfr=2, Product=3, SerialNumber=4
[ 8951.875760] usb 1-1: Product: Android
[ 8951.875764] usb 1-1: Manufacturer: Android
[ 8951.875767] usb 1-1: SerialNumber: 14005036c000202b034e

Rien d'intéressant.
je fais donc

    $ls /dev | grep loop
    loop0
    loop1
    loop2
    loop3
    loop4
    loop5
    loop6
    loop7
    loop-control
    $losetup -a 
    /dev/loop1: []: (/var/lib/snapd/snaps/core_5328.snap)
    /dev/loop4: []: (/var/lib/snapd/snaps/anbox-installer_17.snap)
    /dev/loop2: []: (/var/lib/snapd/snaps/core_5145.snap)
    /dev/loop0: []: (/var/lib/snapd/snaps/core_4917.snap)
    /dev/loop3: []: (/var/lib/snapd/snaps/anbox-installer_24.snap)

J'ai donc loop5, loop6 et loop7 qui ne servent à rien et je suppose que "bad superblock on /dev/loop5," faut référence au fait que j'ai un problème sur le loop5. J'ai donc fait

rm /dev/loop5 /dev/loop6 /dev/loop7

Et j'ai une erreur :

mount: /home/fabulux/android/mmcblk0p6/part.img: failed to setup loop device: Aucun fichier ou dossier de ce type

Alors que ce fichier existe bel et bien !
J'ai essayé de reboot mon PC mais il me recréer mes fichiers loop5, loop6 et loop7 qui ne servent toujours à rien.

PS : j'avais monté avec succès mon image la semaine dernière, je ne sais pas ce qui fait que ça ne marche plus maintenant.

Quelqu'un a une idée ?

  • # Contenu de part.img ?

    Posté par  . Évalué à 1.

    Hello,

    Vu d'ici, je pense que le problème ne vient pas de loop, mais de l'image elle-même.

    Quelle en est la provenance ? Est-ce que c'est bien l'image d'une partition comme le nom le suggère ? Ou bien l'image d'un disque entier ?

    Qu'est-ce que donne un :

    file part.img
    

    ou un :

    fdisk -l part.img
    

    Si c'est l'image d'un disque entier, fdisk donne par défaut le secteur de début de la ou des partitions. Une commande du genre :

    mount -o loop,offset=$((<n° secteur début partition>*512)) part.img folder
    

    peut résoudre le problème.

    Sinon, c'est peut-être plus simplement qu'il n'y a plus de device loop disponible. Le module loop peut prendre en paramètre le nombre de /dev/loopx à gérer :

    # modinfo loop
    filename:       /lib/modules/4.9.0-8-amd64/kernel/drivers/block/loop.ko
    alias:          devname:loop-control
    alias:          char-major-10-237
    alias:          block-major-7-*
    license:        GPL
    depends:        
    retpoline:      Y
    intree:         Y
    vermagic:       4.9.0-8-amd64 SMP mod_unload modversions 
    parm:           max_loop:Maximum number of loop devices (int)
    parm:           max_part:Maximum number of partitions per loop device (int)
    
    
    • [^] # Re: Contenu de part.img ?

      Posté par  . Évalué à 1. Dernière modification le 22 septembre 2018 à 16:39.

      fabulux@Spoutnik ~/workspace/android/mmcblk0p6 $ file part.img 
      

      part.img: Android bootimg, kernel (0x40080000), ramdisk (0x41000000), page size: 2048
      fabulux@Spoutnik ~/workspace/android/mmcblk0p6 $ fdisk -l part.img
      Disque part.img : 16 MiB, 16777216 octets, 32768 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
      fabulux@Spoutnik ~/workspace/android/mmcblk0p6 $ modinfo loop
      modinfo: ERROR: Module loop not found.
      fabulux@Spoutnik ~/workspace/android/mmcblk0p6 $

      • [^] # Re: Contenu de part.img ?

        Posté par  . Évalué à 1. Dernière modification le 22 septembre 2018 à 19:46.

        Ah ok, de la bidouille de rom (j'ai jamais pigé comment on en est arrivé à appeler ça une rom …) !

        Bon, file et fdisk nous renseignent un peu.
        Le modinfo est a faire en tant que root ! Un petit coup de sudo et ça devrait aller mieux. Voilà ce que c'est que de jouer avec une *ubuntu ! Un poilu comme moi est toujours root sur sa Debian … Oui, je sais, c'est le vendredi qu'on troll …

        Pour revenir à ton .img … Pfiou, ça fait super longtemps que j'ai pas joué à ça. Mais j'avais trouvé deux trucs à l'époque :

        • la force brute : tu fais un script qui incrémente un offset de 0 jusqu'à <beaucoup>, tente le mount avec, et teste le retour et balance un message en cas de succès. Faut de la patience, ça peut prendre des heures …
        • en fonction des provenance, des marques de bigo, etc, il est possible que quelqu'un ait déjà fait le boulot, et ait posté un script, un bout de code, un exe (quelle horreur !) qui fasse déjà le boulot.
        • [^] # Re: Contenu de part.img ?

          Posté par  . Évalué à 3.

          je pense qu'on appelle ça une ROM car les programmes des consoles portables des années 80/90 étaient écrits sur une mémoire ROM (Read Only Memory) et que par extensions… le coup du frigo quoi.

          sinon pour monter des loop, il y a kpartx qui est bien pratique, il s'occupe de gérer iosetup etc. À tester…

          Julien_c'est_bien (y'a pas que Seb)

          • [^] # Re: Contenu de part.img ?

            Posté par  . Évalué à 2. Dernière modification le 23 septembre 2018 à 10:03.

            En jetant un coup d'œil à :

                man -L en losetup
            

            J'ai trouvé cette option :

                Set up a loop device:
                  losetup [-o offset] [--sizelimit size] [-Pr] [--show] -f|loopdev file
            
                   -P, --partscan
                          Force the kernel to scan the partition table on a newly created loop device.
            

            Il n'y a plus besoin de kpartx, losetup le fait tout seul (je n'ai vérifié que pour util-linux et non les autres implémentations comme busybox).

            • [^] # Re: Contenu de part.img ?

              Posté par  (site web personnel) . Évalué à 2.

              Merci d'avoir mentionné cette option. Ça fait tellement longtemps que je joue avec losetup et kpartx que je n'ai pas relu les pages de manuel…

              Pour info ça semble dater de :

              commit 916bf85e621bb01d58279a014088376c80050a74
              Author: Karel Zak <kzak@redhat.com>
              Date:   Mon Jan 9 23:27:53 2012 +0100
              
                  losetup: add --partscan option
              
                  Signed-off-by: Karel Zak <kzak@redhat.com>
              

              qui a été publié pour la première fois dans : v2.21-rc1.

              Si on veut le faire à la main, exemple rapide, avec une image de disque contenant 3 partitions :

              $ sudo losetup -f demo.img
              $ sudo kpartx -avs /dev/loop0
              add map loop0p1 (253:4): 0 2048 linear 7:0 2048
              add map loop0p2 (253:5): 0 1024000 linear 7:0 4096
              add map loop0p3 (253:6): 0 10440671 linear 7:0 1028096
              $ sudo kpartx -dvs /dev/loop0
              del devmap : loop0p3
              del devmap : loop0p2
              del devmap : loop0p1
              $ sudo losetup -D demo.img
              

              Quelques notes :

              • losetup accepte l'option --show permet de demander l'affichage du périphérique utilisé, pratique pour les scripts.
              • kpartx a besoin de -a / -d pour travailler, -v permet un affichage verbeux, -s le mode synchrone. À nouveau, pratique pour les scripts, ça évite de mettre un sleep ± long…
              • j'ai édité la sortie dans mon exemple ci-dessus. On peut avoir des petites blagues, par exemple l'activation automatique d'un groupe de volumes LVM (VG).

              Ce qui donnerait plutôt :

              $ sudo kpartx -dvs /dev/loop0
              device-mapper: remove ioctl on loop0p3 failed: Device or resource busy
              del devmap : loop0p2
              del devmap : loop0p1
              $ sudo vgchange -an le-vg-parasite
                0 logical volume(s) in volume group "le-vg-parasite" now active
              $ sudo kpartx -dvs /dev/loop0
              del devmap : loop0p3
              $ sudo losetup -D demo.img
              

              Debian Consultant @ DEBAMAX

              • [^] # Re: Contenu de part.img ?

                Posté par  . Évalué à 1.

                Merci pour tous vos conseils.
                fabulux@Spoutnik ~/workspace/android/mmcblk0p6 $ sudo modinfo loop
                [sudo] Mot de passe de fabulux :
                modinfo: ERROR: Module loop not found.

                Je dois avoir une dépendance ou quelque chose comme ça qui n'est pas installé. Mais je crois que mon problème vient vraiment du fait que j'ai des loops en trop qui n'ont rien à faire là (loop5->7). Mais je ne comprends pas comment les supprimer proprement. Je ne trouve rien à ce sujet sur internet.
                Ils ne sont pas gérés par losetup, je ne comprends vraiment pas. Et quand je les supprime après reboot ils reviennent.

                • [^] # Re: Contenu de part.img ?

                  Posté par  (site web personnel) . Évalué à 1. Dernière modification le 24 septembre 2018 à 06:39.

                  Je ne comprends pas trop pourquoi modinfo ne trouve pas le module loop pour en donner les détails, mais nous n'avons aucune information sur la distribution utilisée, ou sur comment le noyau a été installé (peut-être un depmod qui manque ?).

                  Le fait est qu'il y a déjà des loops en place pour des snaps (dixit le premier post), donc il me semble assez sûr que ce module est en fait fonctionnel…

                  Quant aux loops en trop, c'est un faux problème. Il y a en effet par défaut un certain nombre de périphériques prêts à être utilisés, et d'autres peuvent être créés à la volée…

                  Extrait de drivers/block/Kconfig :

                  config BLK_DEV_LOOP_MIN_COUNT
                          int "Number of loop devices to pre-create at init time"
                          depends on BLK_DEV_LOOP
                          default 8
                          help
                            Static number of loop devices to be unconditionally pre-created
                            at init time.
                  
                            This default value can be overwritten on the kernel command
                            line or with module-parameter loop.max_loop.
                  
                            The historic default is 8. If a late 2011 version of losetup(8)
                            is used, it can be set to 0, since needed loop devices can be
                            dynamically allocated with the /dev/loop-control interface.
                  

                  Debian Consultant @ DEBAMAX

                  • [^] # Re: Contenu de part.img ?

                    Posté par  (site web personnel) . Évalué à 2.

                    The historic default is 8. If a late 2011 version of losetup(8)
                    is used, it can be set to 0, since needed loop devices can be
                    dynamically allocated with the /dev/loop-control interface.

                    … est-ce qu'il ne faudrait pas dynamiquement les allouer avant d'essayer de les utiliser…?

                    → un peu de recherche a donné losetup -f (en sudo) qui fournit le nom du premier device loop dispo, en en ayant créé un si besoin.

                    Python 3 - Apprendre à programmer dans l'écosystème Python → https://www.dunod.com/EAN/9782100809141

                    • [^] # Re: Contenu de part.img ?

                      Posté par  (site web personnel) . Évalué à 1.

                      Je pense que le morceau de code que je proposais contient bien un appel à losetup -f;)

                      Mon dernier commentaire avait juste pour but de mettre en évidence que la présence des différents /dev/loopN mentionnés est totalement normale.

                      Debian Consultant @ DEBAMAX

                      • [^] # Re: Contenu de part.img ?

                        Posté par  . Évalué à 2.

                        Merci pour toutes vos réponses, effectivement mon problème venait de l'image.

Suivre le flux des commentaires

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