Forum Linux.général extraire le contenu d'une image d'une clé ou disque

Posté par  .
Étiquettes : aucune
0
18
août
2006
Voilà à cause question de fat endommagée et un besoin urgent de récupération du support physique, j'ai du faire une copie de mon périphérique dans un fichier avec dd, parce que la copie directe de la partition n'était plus possible.
Quand j'ouvre ce fichier avec parted ou fdisk, il m'indique bien que mon fichier contient une partition :

Numéro Début Fin Taille Type Système de fichiers Drapeaux
1 27kB 524MB 524MB primaire fat16 amorce

Mais comment faire pour extraire ou monter cette partition qui ce trouve dans mon fichier?
Merci d'avance
  • # utiliser à nouveau dd

    Posté par  . Évalué à 1.

    Il suffira de faire un "dd if=tonfichier of=/dev/hda3" par exemple pour mettre la partition sur la troisieme partition du premier disque dur.
    • [^] # Re: utiliser à nouveau dd

      Posté par  . Évalué à 1.

      Je pense que le problème est surtout que l'image est une image du disque entier, pas de la partition directement.

      Donc pour l'extraire, il faut faire un dd en lui disant de sauter la table des partitions:
      Dans ton cas, la partition commence à 27k, donc:
      dd if=disk.img of=partition.img bs=1k skip=27

      ou bien dd if=disk.img of=partition.img bs=27k skip=1 (plus le blocksize est gros, plus la copie va vite).

      Je suppose que la partition est unique dans ton image, sinon tu rajoute un size=536576 (ou size=19873, avec des blocs de 27k) pour ne pas dépasser.

      Ensuite tu auras ta partition.img que tu peux monter en loop ou réparer avec d'éventuels outils (meme faire un fsck dessus)
      • [^] # Re: utiliser à nouveau dd

        Posté par  . Évalué à 1.

        Sinon, tu parles de support endommagé, en général ça veut dire erreurs d'accès: ton image fait-elle la bonne taille ?
        Parceque dd s'arrete dès qu'il rencontre une erreur d'I/O qui résiste, et donc on se retrouve avec juste le début de l'image.
        En rajoutant un "conv=noerror", dd va continuer de lire le support (en remplaçant les blocs illisible par des zeros) jusqu'au bout.
        Si tu n'as pas la bonne taille d'image (donc au moins 524M), je te conseille de courir récupérer le disque avant qu'il n'y ait plus rien à récupérer.
        • [^] # Re: utiliser à nouveau dd

          Posté par  . Évalué à 2.

          Ca ne marche pas mais voici ce que m'affiche fdisk qui est plus explicite :

          Disque test.img: 0 Mo, 0 octets
          16 têtes, 47 secteurs/piste, 0 cylindres
          Unités = cylindres de 752 * 512 = 385024 octets

          Périphérique Amorce Début Fin Blocs Id Système
          test.img1 * 1 1361 511525+ 6 FAT16
          Partition 1 a des débuts différents physique/logique (non Linux?):
          phys=(0, 0, 54) logique=(0, 1, 7)
          Partition 1 a des fins différentes physique/logique:
          phys=(1014, 15, 47) logique=(1360, 8, 8)
  • # mount loop

    Posté par  . Évalué à 2.

    Bonjour,

    Si tu as encore le fichier sur disque, tu peux le "mount"-er via la commande:
    ===
    mount -o ro,loop <point de montage>
    ===
    NB: Le montage sera en lecture seule (option ro).

    Bon courage !

    Cdlt,

    PS: man et/ou info de la commande mount pour plus d'infos :-)
    • [^] # Re: mount loop

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

      Je pense que le coup du saut de la table des partitions est nécessaire.

      Pour un max d'info, j'irai regardé du coté des "émulateurs" de PC (genre qemu). En effet, ton fichier correspond pile à ce que ces logiciels savent manipuler : des images de DISQUE. Donc, sur leur site ou leur forum, tu va trouver à coup sûr les commandes qui vont te permettre d'exploiter ce fameux fichier.
      • [^] # Re: mount loop

        Posté par  . Évalué à 2.

        Tout à fait. Je viens de retrouver des explications dans ce sens, à propos de disques utilisés avec qemu.

        Il y a une option "offset" à passer avec l'option "loop", qui est un décalage permettant de sauter la table. C'est un paramètre passé à la commande losetup.

        Le montage serait de la forme (non vérifié) :

        mount -o loop,offset=32256 fichier-image point-de-montage
  • # kpartx

    Posté par  . Évalué à 2.

    J'espère que ça va faire ton bonheur.
    Un bon exemple (sous FC5) :
    [root@here vmware]# file Windows\ XP\ Professional-flat.vmdk
    Windows XP Professional-flat.vmdk: x86 boot sector, Microsoft Windows XP MBR, Serial 0x4ee24ee2; partition 1: ID=0x7, active, starthead 1, startsector 63, 16755732 sectors
    [root@here vmware]# yum install device-mapper-multipath
    [blabla...]
    [root@here vmware]# losetup -f Windows\ XP\ Professional-flat.vmdk
    [root@here vmware]# losetup -a | grep Windows
    /dev/loop5: [1601]:4593227 (Windows XP Professional-flat.vmdk)
    [root@here vmware]# fdisk -l /dev/loop5

    Disk /dev/loop5: 8589 MB, 8589934592 bytes
    255 heads, 63 sectors/track, 1044 cylinders
    Units = cylinders of 16065 * 512 = 8225280 bytes

    Device Boot Start End Blocks Id System
    /dev/loop5p1 * 1 1043 8377866 7 HPFS/NTFS
    [root@here vmware]# ll /dev/loop5p1
    ls: /dev/loop5p1: Aucun fichier ou répertoire de ce type
    [root@here vmware]# kpartx -v -a /dev/loop5
    add map loop5p1 : 0 16755732 linear /dev/loop5 63
    [root@here vmware]# ll /dev/mapper/
    total 0
    crw------- 1 root root 10, 63 août 16 07:09 control
    brw-rw---- 1 root disk 253, 0 août 18 19:06 loop5p1
    [root@here vmware]# head /dev/mapper/loop5p1 > head.tmp
    [root@here vmware]# file head.tmp
    head.tmp: x86 boot sector, code offset 0x52, OEM-ID "NTFS ", sectors/cluster 8, reserved sectors 0, Media descriptor 0xf8, heads 255, hidden sectors 63, dos < 4.0 BootSector (0x80)
    [root@here vmware]# mount -t auto -o ro /dev/mapper/loop5p1 mount_point
    [root@here vmware]# df mount_point/
    Sys. de fich. 1K-blocs Occupé Disponible Capacité Monté sur
    /dev/mapper/loop5p1 8377864 2302160 6075704 28% mount_point
    [root@here vmware]# umount mount_point
    • [^] # Re: kpartx

      Posté par  . Évalué à 2.

      Il manque :
      # kpartx -d /dev/loop5
      # losetup -d /dev/loop5
      # rmdir mount_point
      # rm -f head.tmp
    • [^] # Re: kpartx

      Posté par  . Évalué à 3.

      Merci de ton aide c'est exactement ce qu'il me fallait

Suivre le flux des commentaires

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