Forum Linux.général loop devices hack

Posté par  .
Étiquettes : aucune
0
7
mar.
2007
Salut,

J'ai reussi a copier la majeure partie d'un disque endommage dans un fichier. Maintenant j'essaie de remonter les partitions du disque a partir du fichier avec un loopdevice.

Malheureusement, je monte en loop device l'image du disque en entier, et la les partitions n'apparaissent pas car apparemment loopdevice ne lit pas la table de partitions pour creer des soudevices genre /dev/loop1p1. (quand je fais un fdisk sur /dev/loop1, je vois mes partitions).

Une idee de comment forcer le systeme a lire une table de partitions contenue dans un loopdevice pour faire apparaitre les partitions qui sont a l'interieur ?

Merci d'avance.

Pour le contexte, J'essaie de recuperer les donnes d'un disque avec quelques secteur morts (le disque fige dessus, avec le soft qui lit, puis qq IO errors).
  • # losetup et calcul mental

    Posté par  . Évalué à 2.

    Le seule solution est de calculer les offsets des partitions, et de créer un block device pointant pile au bon endroit (avec losetup ou nbd-[server|client]

    Un rapide google me donne ça: http://benoit.papillault.free.fr/notes/recover-nbd.php

    (Et à mon avis losetup doit passer maintenant avec des offset > 2Go, même si je n'ai pas testé)

    Bonne chance.
    • [^] # mount -o offset

      Posté par  . Évalué à 2.

      Bref, utiliser l'option "offset" de mount qui est retransmise au losetup et qui fait tout bien tout seul :) Pour les limitation à 2Go, je ne sais pas.

      $ sfdisk -d flash_test.img
      # partition table of flash_test.img
      unit: sectors

      flash_test.img1 : start= 32, size= 250336, Id=83
      flash_test.img2 : start= 250368, size= 250368, Id=83

      Monter la partition 2:
      $ echo $((250368*512))
      128188416

      # mount -o loop -offset=128188416 flash_test.img mnt
    • [^] # Re: losetup et calcul mental

      Posté par  . Évalué à 1.

      Salut,

      Merci pour le truc avec les decalage dans losetup, ca marche. Le hic c'est que avec le systenrescue CD 3.2, loopback ne mappe pas plus de 4Go .... donc la partition est vue, mais elle se fait tronquer. sniff.

      Le principe est bon, mais les outils sont limitants ... pour le moment j'en suis reduit a reecrire le dump du mauvais disque sur un disque sain et travailler comme ca. Pas tres confortable (vive les copies de 2h !), mais ca marche.

      a+
      • [^] # Re: losetup et calcul mental

        Posté par  . Évalué à 1.

        Confirmation avec ubuntu a jour + kernel 2.6.17 losetup fait pas les partitions de plus de 2Go ....

        Bonne journee a vous tous.
      • [^] # Re: losetup et calcul mental

        Posté par  . Évalué à 2.

        plutot que le dump du disque total vers un fichier
        pourquoi ne pas faire un dump partition par partition (1 partition par fichier)
        • [^] # Re: losetup et calcul mental

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

          En général quand tu dump un disque dur c'est qu'il est en train de mourir et que tu peux pas prendre de risque...
          • [^] # Re: losetup et calcul mental

            Posté par  . Évalué à 2.

            sauf que je trouve plus sur de dump les partitions 1 à 1 que le disque en une fois

            car si ca plante sur la 2e partition, tu as au moins la premiere de "clean"
            et tu n'as pas plus de calcul à faire

            dd if=/dev/sda1 of=part1.img && dd if=/dev/sda2 of=part2.img && dd if=/dev/sda5 of=part3.img
  • # avec dmsetup

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

    tu montes ton fichier en loopback
    et puis après tu accèdes à chaque partoch en créant un device grâce à dmsetup
    exemple:
    $ sfdisk -d virtual_disk
    # table de partitions de virtual_disk
    unit: sectors

    virtual_disk1 : start= 1, size= 92159, Id=83
    virtual_disk2 : start= 92160, size= 215040, Id= 5
    virtual_disk3 : start= 0, size= 0, Id= 0
    virtual_disk4 : start= 0, size= 0, Id= 0
    virtual_disk5 : start= 92161, size= 92160, Id=83
    virtual_disk6 : start= 184352, size= 122848, Id=83

    $ dmsetup create loop0p1 part1

    avec le fichier part1 qui contient
    0 92159 linear /dev/loop0 1

    le 0 le logical_start_sector
    le 92159 la taille comme le donne sfdisk
    le 1 l'offset à utliser en fait le début de la partoch comme le donne sfdisk

    voilà
    tu accèdes à ta partoch par /dev/mapper/loop0p1 après l'avoir monter ;-)

Suivre le flux des commentaires

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