Disque dur inaccessible

J’ai un portable qui est en rade. J’ai démonté son disque SATA 2.5 pouces pour récupérer ses données. Je l’ai connecté en USB grâce à une petite interface Icy Box.

Il y a deux semaines, j’ai pu naviguer dans les fichiers. Ce n’est plus le cas aujourd’hui : le disque ne monte pas.

# dmesg | tail -10
[ 3171.105181] sd 1:0:0:0: [sdb] Unit Not Ready
[ 3171.105189] sd 1:0:0:0: [sdb] Sense Key : Hardware Error [current] 
[ 3171.105198] sd 1:0:0:0: [sdb] ASC=0x44 <<vendor>>ASCQ=0x81 
[ 3171.105721] sd 1:0:0:0: [sdb] Read Capacity(16) failed: Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
[ 3171.105726] sd 1:0:0:0: [sdb] Sense Key : Hardware Error [current] 
[ 3171.105734] sd 1:0:0:0: [sdb] ASC=0x44 <<vendor>>ASCQ=0x81 
[ 3171.106213] sd 1:0:0:0: [sdb] Read Capacity(10) failed: Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
[ 3171.106218] sd 1:0:0:0: [sdb] Sense Key : Hardware Error [current] 
[ 3171.106225] sd 1:0:0:0: [sdb] ASC=0x44 <<vendor>>ASCQ=0x81 
[ 3171.108034] sd 1:0:0:0: [sdb] Attached SCSI disk

Je précise qu’il a fallu pas mal de temps avant d’obtenir la mention « attached SCSI disk » ; auparavant, c’était « spinning disk » pendant de longues minutes.

# lsusb
Bus 002 Device 008: ID 152d:0578 JMicron Technology Corp. / JMicron USA Technology Corp. 
Bus 002 Device 004: ID 0bc2:ab26 Seagate RSS LLC 
Bus 002 Device 002: ID 0bda:0411 Realtek Semiconductor Corp. 
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 005: ID 04f3:0c03 Elan Microelectronics Corp. 
Bus 001 Device 004: ID 1bcf:2c96 Sunplus Innovation Technology Inc. 
Bus 001 Device 003: ID 0489:e09f Foxconn / Hon Hai 
Bus 001 Device 002: ID 0bda:5411 Realtek Semiconductor Corp. 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Vu que l’identifiant USB de la chose contient « 152d », je cherche à en savoir plus :

 # lsusb -D /dev/bus/usb/$(lsusb | grep "152d" | awk '{ print $2"/"substr($4,0,3)}')
Device: ID 152d:0578 JMicron Technology Corp. / JMicron USA Technology Corp. 
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               3.00
  bDeviceClass            0 (Defined at Interface level)
  bDeviceSubClass         0 
  bDeviceProtocol         0 
  bMaxPacketSize0         9
  idVendor           0x152d JMicron Technology Corp. / JMicron USA Technology Corp.
  idProduct          0x0578 
  bcdDevice            1.00
  iManufacturer           1 JMicron
  iProduct                2 USB to ATA/ATAPI Bridge
  iSerial                 3 0123456789ABCDEF
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength          121
    bNumInterfaces          1
    bConfigurationValue     1
    iConfiguration          0 
    bmAttributes         0x80
      (Bus Powered)
    MaxPower              224mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           2
      bInterfaceClass         8 Mass Storage
      bInterfaceSubClass      6 SCSI
      bInterfaceProtocol     80 Bulk-Only
      iInterface              0 
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0400  1x 1024 bytes
        bInterval               0
        bMaxBurst              15
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x02  EP 2 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0400  1x 1024 bytes
        bInterval               0
        bMaxBurst              15
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       1
      bNumEndpoints           4
      bInterfaceClass         8 Mass Storage
      bInterfaceSubClass      6 SCSI
      bInterfaceProtocol     98 
      iInterface              0 
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x01  EP 1 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0400  1x 1024 bytes
        bInterval               0
        bMaxBurst               0
        Command pipe (0x01)
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x82  EP 2 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0400  1x 1024 bytes
        bInterval               0
        bMaxBurst               0
        MaxStreams             32
        Status pipe (0x02)
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x83  EP 3 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0400  1x 1024 bytes
        bInterval               0
        bMaxBurst              15
        MaxStreams             32
        Data-in pipe (0x03)
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x04  EP 4 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0400  1x 1024 bytes
        bInterval               0
        bMaxBurst               7
        MaxStreams             32
        Data-out pipe (0x04)
Binary Object Store Descriptor:
  bLength                 5
  bDescriptorType        15
  wTotalLength           22
  bNumDeviceCaps          2
  USB 2.0 Extension Device Capability:
    bLength                 7
    bDescriptorType        16
    bDevCapabilityType      2
    bmAttributes   0x00000f0e
      Link Power Management (LPM) Supported
  SuperSpeed USB Device Capability:
    bLength                10
    bDescriptorType        16
    bDevCapabilityType      3
    bmAttributes         0x00
    wSpeedsSupported   0x000e
      Device can operate at Full Speed (12Mbps)
      Device can operate at High Speed (480Mbps)
      Device can operate at SuperSpeed (5Gbps)
    bFunctionalitySupport   1
      Lowest fully-functional device speed is Full Speed (12Mbps)
    bU1DevExitLat          10 micro seconds
    bU2DevExitLat          32 micro seconds
Device Status:     0x000c
  (Bus Powered)
  U1 Enabled
  U2 Enabled

Et ceci :

# udisksctl status
MODEL                     REVISION  SERIAL               DEVICE
--------------------------------------------------------------------------
LITEON CV3-8D256          T881202   KN2560L01565002164HC sda     
JMicron Generic           8101      0123456789ABCDEF     sdb

Plus inquiétant, la commande lsblk -a ne renvoie pas la capacité du disque :

# lsblk -a
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0 238,5G  0 disk 
├─sda1   8:1    0  74,5G  0 part /
└─sda2   8:2    0   164G  0 part /home
sdb      8:16   0         0 disk 

Vu que le disque semble monté sur /dev/sdb, j’ai tenté de monter le disque, après avoir créé un répertoire dans /media :

# mount -t ext4 /dev/sdb /media/oldhd
mount: mauvais type de système de fichiers, option erronée, superbloc erroné
        sur /dev/sdb, page de code ou programme auxiliaire manquant, ou autre erreur

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

Je ne comprends pas.

Ben déjà, ton mount, fais le sur une partition (sans doute sdb1), plutôt que le disque entier, ça a des chances de mieux marcher.
D’ailleurs, que dit fdisk -l /dev/sdb ?
Et aussi smartctl -a /dev/sdb, pour la détection d’erreurs SMART ?

Merci pour ta réponse.

# mount -t ext4 /dev/sdb1 /media/oldhd
mount: le périphérique spécial /dev/sdb1 n'existe pas

# mount -t ext4 /dev/sdb2 /media/oldhd
mount: le périphérique spécial /dev/sdb2 n'existe pas

Flop.

# fdisk -l /dev/sdb
fdisk: impossible d'ouvrir /dev/sdb: Aucun fichier ou dossier de ce type

Re-flop.

Quant à la commande smartctl, elle n’était pas installée sur mon ordi.
L’installation du paquet smartmontool déclenchant une invraisemblable succession d’installation de paquets, dont exim, je lui ai préféré celle de libatasmart-bin, qui donne accès à skdump, qui est décrit comme un petit outil qui produit une sortie identique à smartctl -a.
Malheureusement :

# skdump /dev/sdb
Failed to open disk /dev/sdb: Input/output error

C’était le moment de faire une image complète du disque parce que là, ça risque d’être long et compliqué.

Mon projet était bien d’en faire une image, mais je n’avais que très peu de temps pour ce faire.

Je ne comprends pas pourquoi l’accès à ce disque s’est altéré en si peu de temps : j’utilise exactement le même matériel qu’il y a deux semaines !

Si une connexion directe en sata est possible (dans une tour ou autre), la tenter.

Ouais. Ce sera toujours plus fiable que l’USB.

Soit le disque est mourant, soit l’adaptateur est foireux, soit l’alimentation est insuffisante. J’aurais plus confiance avec un adaptateur qui dispose d’une source d’alimentation autre que le bus USB.

J’essaierai donc ça demain.

Après divers tests, je constate que mon impression initiale était fallacieuse : je pouvais certes naviguer dans les fichiers, mais ceux-ci sont vides !

L’arborescence du disque est là, mais tout fichier fait 0 octet.

Connaîtriez-vous de bons utilitaires de récupération de disque ?

Le paquet forensics-all liste en tant que dépendances des paquets qui pourraient correspondre à la demande.

Il y a, à mon avis, deux étapes : faire une image du disque (nécessite un deuxième disque) puis récupérer les données depuis l’image et non depuis le disque. Ceci limite l’utilisation du disque endommagé.

Pour l’image disque, il me semble que j’ai utilisé guymager une fois.

EDIT

À une autre époque (jusqu’à debian 7 wheezy incluse), debian fournissait une image live appelée “rescue” qui contenait certains outils comme autopsy, dcfldd, foremost, gddrescue, magicrescue, myrescue, safecopy, sleuthkit, testdisk