Marquer les secteurs défectueux sur le disque dur sans formatage

22

J'ai remarqué que sur mon serveur Ubuntu domestique, un lecteur est en lecture seule pour une raison quelconque. En creusant, j'ai constaté que cela peut se produire lorsque les disques durs ont des erreurs. J'ai utilisé des badblocks pour vérifier les erreurs et j'ai en effet des secteurs endommagés.

Dans la plupart des cas, la seule solution rationnelle consiste à essayer de sauvegarder les données, à retirer le disque dur et à en acheter un nouveau. Cependant, ce serveur n'a rien que je n'ai déjà sauvegardé à plusieurs endroits, et j'aimerais l'utiliser jusqu'à sa mort. Je l'utilise pour diffuser de la musique et exécuter des scripts simples. En tout cas, ce serait très compliqué de tout réinstaller.

Existe-t-il un moyen de marquer ces mauvais blocs sans formater un disque dur?

enedene
la source

Réponses:

29

Je suppose que vous parlez de blocs physiques défectueux sur un disque et non de systèmes de fichiers corrompus.

Pour vérifier l'état physique de votre disque, il est préférable d'installer smartmontools

sudo apt-get install smartmontools

Cela fonctionne car tous les disques modernes enregistrent leur état de santé à l'aide d'un système appelé SMART

Utilisez la smartctrlcommande pour lire cet état. Par exemple, pour lire tous les attributs du premier appel de disque

sudo smartctl --all /dev/sda

Méfiez-vous d'une ligne qui parle de l'état de santé global. Une fois que cela indique une erreur, il est très probable que le disque tombe en panne bientôt.

SMART overall-health self-assessment test result: PASSED

Les autres lignes que vous souhaitez vérifier sont le nombre de secteurs en attente et les secteurs réaffectés.

ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  5 Reallocated_Sector_Ct   0x0033   100   100   036    Pre-fail  Always       -       48
197 Current_Pending_Sector  0x0012   100   100   000    Old_age   Always       -       2

Réaffecté répertorie généralement dans le champ brut le nombre de secteurs défectueux que le disque a échangés contre des secteurs de travail. Les secteurs en attente peuvent être réaffectés en cas d'échec de la prochaine écriture.

Vous pouvez même déclencher des auto-tests du disque lorsque votre modèle le prend en charge

sudo smartctl -t long /dev/sda

Pour forcer la vérification de tous les secteurs, utilisez badblocksdans un mode dans lequel les données sont écrites. Gardez à l’esprit que même s’il est généralement sûr de s’exécuter, cela entraînera une charge supplémentaire sur vos disques, ce qui pourrait entraîner leur défaillance. Ayez toujours une sauvegarde de vos données.

sudo badblocks -svvn -c 262144 /dev/sda

Si vous avez entièrement traité votre disque de cette façon, le contrôleur de disque aurait dû remplacer tous les blocs défectueux par des blocs fonctionnels et le nombre réaffecté sera augmenté dans le journal SMART.

user228505
la source
2
quelle est l'influence -cou le nombre de blocs qui sont testés à la fois ou en d'autres termes pourquoi avez-vous une telle valeur par rapport à la valeur par défaut de 64?
greole
4
la taille de bloc par défaut de 1024 octets multipliée par la valeur par défaut de 64 blocs à la fois n'entraîne que 64 Ko traités à chaque demande. Avec des disques modernes ayant un débit allant jusqu'à 150 Mio / s, cela introduit plus de surcharge que je ne me sens à l'aise. Je veux donner au lecteur la possibilité de traiter les données de la manière la plus efficace sans attendre les données sur le bus.
user228505
Dit: / dev / sda est apparemment utilisé par le système; il n'est pas sûr d'exécuter des badblocks!
Dims
1
@Dims Il vous dit de ne pas l'exécuter sur un disque monté activement. Démontez d'abord le disque. Dans votre cas, il peut s'agir de votre lecteur système. Alors commencez par un système de sauvetage.
user228505
2
@Dims Il y a l'option -force si vous voulez quand même l'exécuter. ie sudo badblocks -svvn -c 262144 / dev / sda -force
ADR