web-dev-qa-db-fra.com

Marquer manuellement les blocs ext4 comme défectueux sans essayer de lire / écrire

J'ai un disque dur de 320 Go de 10 ans que j'ai utilisé comme disque dur externe, et il a voyagé avec moi pendant une grande partie de ces 10 ans. Inutile de dire qu'il a survécu à plus de quelques chutes (y compris celles en cours de fonctionnement) et a obtenu de mauvais secteurs. Lorsque j'ai commencé à recevoir des erreurs de lecture, pas seulement [~ # ~] avertissements de délocalisation du secteur intelligent [~ # ~] , j'ai éloigné tout ce qui est important de (en utilisant ddrescue pour certains fichiers). Bien sûr, je ne peux plus faire confiance à ce lecteur, mais je veux toujours l'utiliser pour copier une fois et conserver certains films/FLAC, pour libérer de l'espace sur le SSD + HDD de l'ordinateur portable, tant que le lecteur externe fonctionne toujours. Je ne me soucie pas de perdre certains ou tous ces fichiers, car j'ai des sauvegardes à la maison et/ou je peux télécharger à nouveau facilement.

Le problème est que si je formate ce lecteur et commence à copier les fichiers là-bas, quelque part autour de 25% j'obtiens un échec d'écriture, nécessitant un débranchement du câble USB (^ C ne suffit pas!), La même chose se produit avec badblocks les deux en mode lecture et écriture. Après avoir joué un peu avec les paramètres badblocks '"from" et "to", j'ai trouvé que 90% + du lecteur est OK, et il y a essentiellement 3 zones de bloc défectueuses. Un court script et j'ai obtenu un fichier texte avec des numéros de bloc (oui, je n'ai pas oublié -b 4096 Pour badblocks) couvrant ces zones et beaucoup d'espace supplémentaire pour être sûr. Mais quand j'ai fait e2fsck -l badblocks.txt, Il se bloque toujours! semble essayer de lire ces mauvais blocs de toute façon, pas seulement pour marquer comme mauvais et oublier. Existe-t-il un autre moyen de contourner cela? Ou peut-être un autre système de fichiers (pensé à FAT, mais je ne vois aucun moyen d'alimenter badblocks.txt À fsck.vfat)? Ou 4 partitions séparées couvrant les "bonnes" zones est la meilleure solution pour ce cas?

pdate: quelques citations de man pour rendre le cas plus clair

man e2fsck:

-i input_file Read a list of already existing known bad blocks. Badblocks will skip testing these blocks since they are known to be bad.

ainsi, badblocks promet de sauter les blocs listés (et il le fait, car il ne se bloque pas avec toutes les plages suspectes dans badblocks.txt!)

man badblocks:

-l filename Add the block numbers listed in the file specified by filename to the list of bad blocks. The format of this file is the same as the one generated by the badblocks(8) program.

il n'y a aucune promesse que cela ne sera pas essayez pour accéder à ces blocs, cependant. Mais pourquoi diable peut-il vouloir y accéder?

Note that the block numbers are based on the blocksize of the filesystem. Hence, badblocks(8) must be given the blocksize of the filesys‐ tem in order to obtain correct results. As a result, it is much simpler and safer to use the -c option to e2fsck, since it will assure that the correct parameters are passed to the badblocks program.

Je serais heureux mais ça se bloque sur un premier mauvais bloc. De plus, -c Est incompatible avec -l - ainsi, je scanne le disque ou marque manuellement les secteurs défectueux. Mais pourquoi, si je choisis cette dernière option, il veut toujours accéder à ces secteurs soi-disant "mauvais" est au-delà de ma compréhension ...

2
pazhosch

La bonne façon de bloquer votre disque est:

Sudo e2fsck -fck /dev/sdc1 # test en lecture seule

ou

Sudo e2fsck -fcck /dev/sdc1 # test de lecture/écriture non destructif (recommandé)

Le -k est important, car il enregistre la table de blocs défectueux précédente et ajoute tous les nouveaux blocs défectueux à cette table. Sans -k, vous perdez toutes les informations de blocage incorrectes antérieures.

Le paramètre -fcck ...

   -f     Force checking even if the file system seems clean.

   -c     This option causes e2fsck to use badblocks(8) program  to  do  a
          read-only  scan  of  the device in order to find any bad blocks.
          If any bad blocks are found, they are added  to  the  bad  block
          inode  to  prevent them from being allocated to a file or direc‐
          tory.  If this option is specified twice,  then  the  bad  block
          scan will be done using a non-destructive read-write test.

   -k     When combined with the -c option, any existing bad blocks in the
          bad blocks list are preserved, and any new bad blocks  found  by
          running  badblocks(8)  will  be added to the existing bad blocks
          list.
3
heynnema