Forum Linux.général SSD mort

Posté par  . Licence CC By‑SA.
Étiquettes : aucune
3
29
août
2014

Bonjour,

Mon SSD vient de me lâcher :(

Hier durant toute la journée, les applications se plaignaient qu’il n’y avait plus d’espace disponible, alors que df ou encore btrfs fi df / étaient tout bons (20–30 Go disponibles sur 110 et quelques). Je pense entre autres à un problème avec BTRFS, je lance des commandes du style (trouvées sur le net à l’arrache et appliquées après vérification sommaire des pages man correspondantes) :

sudo mount -o remount,clear_cache /
btrfs balance blabla

La dernière était une très mauvaise idée car un problème d’accès disque a définitivement mis en vrac mon système de fichiers : le système remonte le bazar en lecture seule, et moi comme un couillon je ne fais pas de sauvegarde mais redémarre l’ordinateur.

Impossible de booter, car impossible de monter la partition racine. Pas cool du tout :(

Bon heureusement j’ai une sauvegarde qui date de quelques jours. Mais j’aimerais tout de même récupérer quelques fichiers texte (dont je connais le chemin grâce à la sauvegarde) et un dirmail géré par Dovecot.

Depuis ma Raspberry toute fraîche comme base de repli (reçue hier, il faut avoir un pot monstrueux :) ) je tente vaguement de récupérer quelques fichiers modifiés depuis ma dernière sauvegarde.

$ sudo mount -t btrfs -o ro /dev/sda2 /mnt/dd
mount: wrong fs type, bad option, bad superblock on /dev/sda2,
       missing codepage or helper program, or other error
       In some cases useful info is found in syslog - try
       dmesg | tail  or so
$ dmesg
... blabla ...
[ 3938.534117] btrfs: device fsid af5e0d31-64bc-4153-b504-c183bef7a2df devid 1 transid 2120931 /dev/sda2
[ 3938.557216] btrfs bad tree block start 0 25806331904
[ 3938.559128] btrfs bad tree block start 0 25806331904
[ 3938.597924] btrfs: open_ctree failed
$ sudo btrfsck /dev/sda2
Check tree block failed, want=25806331904, have=0
Check tree block failed, want=25806331904, have=0
Check tree block failed, want=25806331904, have=0
Check tree block failed, want=25806331904, have=0
Check tree block failed, want=25806331904, have=0
read block failed check_tree_block
Couldn't setup extent tree
Critical roots corrupted, unable to fsck the FS
$ sudo btrfs-restore /dev/sda2 /backup/restore/
Check tree block failed, want=25806331904, have=0
Check tree block failed, want=25806331904, have=0
Check tree block failed, want=25806331904, have=0
Check tree block failed, want=25806331904, have=0
Check tree block failed, want=25806331904, have=0
read block failed check_tree_block
Couldn't setup extent tree
btrfs-restore: extent_io.c:602: free_extent_buffer: Assertion `!(eb->refs < 0)' failed.

C’est la merde comme vous pouvez le constater.

Quelqu’un a une idée, pour tenter une récupération de tout ce qui pourrait être récupérable ? Pour du texte, y’a moyen d’attaquer directement le périphérique bloc /dev/sda comme une brute ?

Première question subsidiaire : 2–3 ans de durée de vie pour un SSD, je trouve ça court, c’est ce que vous constatez aussi ?

Seconde question subsidiaire : avant de chercher une résolution logicielle à mon problème d’espace insuffisant, j’avais tout de même tenté de vérifier qu’il ne s’agissait pas d’un problème matériel, pourtant la commande smartctl ne m’indiquait rien de bien concluant, et dmesg ne m’indiquait rien à propos du disque. Y’a moyen de savoir quand un disque SSD va vous lâcher ? (à priori je suppose que le contrôleur interne a viré pas mal de secteurs défectueux, mais ça aurait été cool qu’il me prévienne…)

Pour info, mon disque a trois partitions, sdx1 pour le boot, sdx3 pour le swap, sdx2 pour le système. La partition sdx2 est en btrfs avec deux sous-volume : root qui est monté comme racine de mon système de fichier /, et home qui est monté comme /home. Notez que sdx1 n’a aucun problème, mais cette partition n’a quasiment jamais travaillé durant toute la durée de vie du disque (remplacement du noyau à chaque nouvelle version), normal qu’elle soit encore saine.

PS : c’est que je l’ai pas mal stressé le pauvre, durant toute la semaine, pour préparer le système sur la carte Raspberry (ceci expliquant cela), avec pas mal de compilations croisées (que je fais habituellement sur un tmpfs) et l’extraction d’un système Gentoo complet sur le SSD, à plusieurs reprises en plus. C’est d’ailleurs l’extraction des tar gentoo (stage3-xxx.tar.bz2 et portage-latest.tar.bz2 pour ceux à qui ça cause) qui m’a la première révélé un no space left on device ou un truc du genre).

  • # Smart

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

    disque SSD

    Arg horreur ! Un SSD n'est pas un disque ou assimilable. ;)

    Première question subsidiaire : 2–3 ans de durée de vie pour un SSD, je trouve ça court, c’est ce que vous constatez aussi ?

    C'est court oui, maintenant ils arrivent à faire du 5 ans et à les garantir sur une telle durée. Mais il est vrai que les progrès dans ce domaine sont assez récents. Est-ce que tu avais des options sur le système de fichiers pour limiter les accès ? Est-ce que ton modèle était haut ou bas de gamme ? Est-ce que le constructeur était réputé ? Tout ceci peut influencer.

    Après ce dont tu décris est étonnant, tu n'as pas eu un avertissement des données smart comme quoi ton SSD allait te lâcher ou avait des problèmes majeurs ? Tu n'as pas moyen de vérifier ce qu'il dit sur son état actuel ?

    • [^] # Re: Smart

      Posté par  . Évalué à 1.

      Fort heureusement j’ai modifié mon post initial pour enlever cet horrible « disque ». ;) Et j’ai ajouté un « PS » qui précise un peu mon usage du disque (je faisais pas trop gaffe aux accès en écriture ces derniers temps, et cette semaine il s’en est pris plein la gueule).

      C’est un Intel SSD 320 Series, 2.5", 120 GB acheté environ 120 €.

      Malheureusement, smart à travers un accès USB me renvoie une erreur, faut que je creuse, mais là j’ai pas le temps. Je posterai plus tard.

      • [^] # Re: Smart

        Posté par  . Évalué à 1.

        Pour avoir des infos sur l'état du ssd il faudrait le brancher sur un pc win et lancé l'utilitaire intel ,désolé je ne l'ait pas trouvé pour linux.
        Mais je ne pense pas que le disque en lui même soit mort, je pense que le fs l'est par contre, peut être une situation ou l'overprovisionning n'est plus suffisant (ou le trim n'était pas actif/ou en cours et les commandes effectué ont aggravées la crise )(ou le firmware du ssd n'était pas a jours et tu est tombé sur un bug).

    • [^] # Re: Smart

      Posté par  . Évalué à 1.

      # smartctl /dev/sda -a
      smartctl 5.41 2011-06-09 r3365 [i686-linux-3.2.0-4-686-pae] (local build)
      Copyright (C) 2002-11 by Bruce Allen, http://smartmontools.sourceforge.net
      
      === START OF INFORMATION SECTION ===
      Model Family:     Intel 320 Series SSDs
      Device Model:     INTEL SSDSA2CW120G3
      Serial Number:    BTPR143000J7120LGN
      LU WWN Device Id: 5 001517 a6be87e74
      Firmware Version: 4PC10362
      User Capacity:    120,034,123,776 bytes [120 GB]
      Sector Size:      512 bytes logical/physical
      Device is:        In smartctl database [for details use: -P show]
      ATA Version is:   8
      ATA Standard is:  ATA-8-ACS revision 4
      Local Time is:    Fri Aug 29 21:06:48 2014 UTC
      SMART support is: Available - device has SMART capability.
      SMART support is: Enabled
      
      === START OF READ SMART DATA SECTION ===
      SMART overall-health self-assessment test result: PASSED
      
      General SMART Values:
      Offline data collection status:  (0x00) Offline data collection activity
                          was never started.
                          Auto Offline Data Collection: Disabled.
      Self-test execution status:      (   0) The previous self-test routine completed
                          without error or no self-test has ever 
                          been run.
      Total time to complete Offline 
      data collection:        (    1) seconds.
      Offline data collection
      capabilities:            (0x75) SMART execute Offline immediate.
                          No Auto Offline data collection support.
                          Abort Offline collection upon new
                          command.
                          No Offline surface scan supported.
                          Self-test supported.
                          Conveyance Self-test supported.
                          Selective Self-test supported.
      SMART capabilities:            (0x0003) Saves SMART data before entering
                          power-saving mode.
                          Supports SMART auto save timer.
      Error logging capability:        (0x01) Error logging supported.
                          General Purpose Logging supported.
      Short self-test routine 
      recommended polling time:    (   1) minutes.
      Extended self-test routine
      recommended polling time:    (   1) minutes.
      Conveyance self-test routine
      recommended polling time:    (   1) minutes.
      SCT capabilities:          (0x003d) SCT Status supported.
                          SCT Error Recovery Control supported.
                          SCT Feature Control supported.
                          SCT Data Table supported.
      
      SMART Attributes Data Structure revision number: 5
      Vendor Specific SMART Attributes with Thresholds:
      ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
        3 Spin_Up_Time            0x0020   100   100   000    Old_age   Offline      -       0
        4 Start_Stop_Count        0x0030   100   100   000    Old_age   Offline      -       0
        5 Reallocated_Sector_Ct   0x0032   100   100   000    Old_age   Always       -       0
        9 Power_On_Hours          0x0032   100   100   000    Old_age   Always       -       22667
       12 Power_Cycle_Count       0x0032   100   100   000    Old_age   Always       -       141
      170 Reserve_Block_Count     0x0033   100   100   010    Pre-fail  Always       -       0
      171 Program_Fail_Count      0x0032   100   100   000    Old_age   Always       -       0
      172 Erase_Fail_Count        0x0032   100   100   000    Old_age   Always       -       0
      183 Runtime_Bad_Block       0x0030   100   100   000    Old_age   Offline      -       1427
      184 End-to-End_Error        0x0032   100   100   090    Old_age   Always       -       0
      187 Reported_Uncorrect      0x0032   100   100   000    Old_age   Always       -       0
      192 Unsafe_Shutdown_Count   0x0032   100   100   000    Old_age   Always       -       114
      199 UDMA_CRC_Error_Count    0x0030   100   100   000    Old_age   Offline      -       0
      225 Host_Writes_32MiB       0x0032   100   100   000    Old_age   Always       -       418196
      226 Workld_Media_Wear_Indic 0x0032   100   100   000    Old_age   Always       -       2619
      227 Workld_Host_Reads_Perc  0x0032   100   100   000    Old_age   Always       -       99
      228 Workload_Minutes        0x0032   100   100   000    Old_age   Always       -       34914971
      232 Available_Reservd_Space 0x0033   100   100   010    Pre-fail  Always       -       0
      233 Media_Wearout_Indicator 0x0032   098   098   000    Old_age   Always       -       0
      241 Host_Writes_32MiB       0x0032   100   100   000    Old_age   Always       -       418196
      242 Host_Reads_32MiB        0x0032   100   100   000    Old_age   Always       -       1675252
      
      SMART Error Log Version: 1
      No Errors Logged
      
      SMART Self-test log structure revision number 1
      Num  Test_Description    Status                  Remaining  LifeTime(hours)  LBA_of_first_error
      # 1  Reserved (0x10)     Completed without error       00%     22667         -
      # 2  Reserved (0x38)     Completed without error       00%     22664         -
      # 3  Reserved (0x20)     Completed without error       00%     22664         -
      
      Note: selective self-test log revision number (0) not 1 implies that no selective self-test has ever been run
      SMART Selective self-test log data structure revision number 0
      Note: revision number not 1 implies that no selective self-test has ever been run
       SPAN  MIN_LBA  MAX_LBA  CURRENT_TEST_STATUS
          1        0        0  Not_testing
          2        0        0  Not_testing
          3        0        0  Not_testing
          4        0        0  Not_testing
          5        0        0  Not_testing
      Selective self-test flags (0x0):
        After scanning selected spans, do NOT read-scan remainder of disk.
      If Selective self-test is pending on power-up, resume after 0 minute delay.
      

      J’avais lancé trois tests avant de perdre mon disqueSSD, deux short et un long si je ne m’abuse (mais tous prenaient 1′). Si y’a besoin d’une autre commande SMART, je peux l’exécuter sans problèmes.

  • # no space left on device

    Posté par  . Évalué à 2.

    As tu essayé fstrim ? Le TRIM était activé dans les options de montage ?

    "Quand certains râlent contre systemd, d'autres s'attaquent aux vrais problèmes." (merci Sinma !)

    • [^] # Re: no space left on device

      Posté par  . Évalué à 1. Dernière modification le 29 août 2014 à 18:19.

      J’avais ça dans mon fstab :

      /dev/sda2       /       btrfs           subvol=gentoo,noatime,compress=lzo,ssd,discard  0 0
      /dev/sda2       /home       btrfs           subvol=home,noatime,compress=lzo,ssd,discard

      Je ne connaissais pas du tout fstrim, mais en cherchant un peu sur le net je suis tombé sur ça :

      In order to optimize the performance of the SSD, I strongly advise you to avoid doing the TRIM operation in real time (whenever a file is deleted) because you would be putting an unnecessary extra amount of work over the SSD. In other words: You should not enable the discard option in fstab.

      Instead, what I recommend is to run a script periodically to tell the SSD which blocks are free with the command fstrim. Doing this operation daily or weekly is more than enough. This way we do not lose any performance due to TRIM when deleting files and we periodically keep informed the SSD about the free blocks.

      Donc si j’ai bien compris mon option “discard”, même si elle n’est pas optimale (et je me demande si elle est réellement utile, vu que l’option ssd juste avant doit l’activer par défaut selon toute vraisemblance), fait le job correctement.

      • [^] # Re: no space left on device

        Posté par  . Évalué à 1.

        D’après le wiki de btrfs

        ssd
        Turn on some of the SSD optimized behaviour within btrfs[…]This does not enable discard/TRIM!

  • # Photorec

    Posté par  . Évalué à 6. Dernière modification le 29 août 2014 à 10:56.

    Pour du texte, y’a moyen d’attaquer directement le périphérique bloc /dev/sda comme une brute ?

    PhotoRec ?

    Avant toute chose le mieux serait de faire un dump de ton disque (dd conv=noerror if=/dev/sda of=/quelque/part/ou/il/y/a/de/la/place/disk.img), tu pourras ensuite lancer photorec sur ce dump. Au cas où ton SSD continuerait à se dégrader…

    • [^] # Re: Photorec

      Posté par  . Évalué à 2. Dernière modification le 29 août 2014 à 14:24.

      Oui, c’est ce que je vais faire.

      Je comptais acheter un disque dur externe de >=1To parce que ça commence à me manquer. Mes dd actuels sont deux internes à 250 Go que j’utilise avec un espèce de truc bizaroïde qui permet d’enficher tout ce qui a un port SATA et qui a des ports usb, e-sata, firewire au cul (c’est grâce à ce truc que je peux connecter mon SSD interne sur la raspberry).

      Au moins ça me permettra de savoir si c’est un problème hard ou soft, je suis convaincu que c’est du hard et que ça a foutu mon fs en vrac, mais je n’exclus pas à priori l’autre hypothèse.

      Ce que je vais faire c’est réinstaller un système sur le futur disque USB de 1 To (ça me fait une bonne excuse pour son achat :) ) durant le week-end, y placer aussi l’image de mon ssd pour être tranquille, puis tenter avec ma machine principale de booter sur l’USB tout en enfichant le SSD dans son SATA à elle. Je vais pouvoir poster les logs smartctl sur le forum (j’avoue ne pas trop savoir les lire, les explications sur le web ne sont pas très claires je trouve). Ensuite formatage. Si le dd et le formatage se passent bien, qu’on me confirme que les logs smartctl semblent ok, alors je garde mon SSD en priant, sinon c’est le porte-monnaie qui va pleurer (raspberry + disque dur + SSD, c’est la fête !). Bon, y’en a pour le week-end. Merci à toi et aux autres de m’avoir répondu.

      Après tout ça je pourrai récupérer tranquillement les données les plus récentes du SSD avec photorec.

      • [^] # Re: Photorec

        Posté par  . Évalué à 4.

        Vu les options de montage que tu as posté dans une autre réponse, tes extends sont compressés avec lzo (si ils sont compressibles).

        Je pense que photorec ne va pas te permettre de récupérer les fichiers associés à ces extends. Et comme ce sont des fichiers textes que tu veux récupérer, données hautement compressibles, je pense que ça va échouer.

        • [^] # Re: Photorec

          Posté par  . Évalué à 1.

          Effectivement j’ai rien pu récupérer :'( Tout le travail de la semaine dernière à refaire.

  • # c'est pas le disque qui est mort, c'est le FS

    Posté par  . Évalué à 5.

    les erreurs que tu as disent que c'est les "tree block" de btrfs qui sont foirés, pas le disque en lui meme.

    apres je ne connais pas assez btrfs pour te depanner :(

    • [^] # Re: c'est pas le disque qui est mort, c'est le FS

      Posté par  . Évalué à 1.

      Il semblerait que vous ayez raison. Je l’utilise depuis quelques jours sans problèmes. Je vais voir à l’usage, en le remplissant à ras-bord, ce que ça va donner.

      Un problème de fragmentation pourrait être une explication satisfaisante à mon problème originel, non ? J’aurai du commencer par là en fait…

Suivre le flux des commentaires

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