[gull] problème de disque

Marc SCHAEFER schaefer at alphanet.ch
Thu Sep 4 15:11:02 CEST 2003


On Thu, Sep 04, 2003 at 01:15:57PM +0200, Anne Possoz wrote:
> Mais il n'y a apparemment que 8 blocks d'erreur. Ce n'est pas si énorme.

Non. Il y a apparemment 8 blocks en erreur. Il se peut très bien qu'il y
ait eu -- de façon silencieuse -- 1000 blocs remplacés sur ce disque par
le passé.

> Qu'est-ce qui peut causer ce genre d'erreur? Est-ce que des power off
> en cours d'utilisation peuvent être la cause?

Des cas de corruption des premiers secteurs, notamment de mise à zéro,
ont été documentés notamment par l'auteur d'ext3. 

IBM pour ces disques SCSI indiquait dans le manuel technique le comportement en
cas de coupure de courant. La plupart des disques haut de gamme
garantissait -- par inertie -- que le bloc du disque *courant* serait
écrit correctement dans tous les cas de coupure de courant. Bien sûr
les caches étaient perdus.

Cette information -- comme d'autres, p.ex. le comportement des caches,
le fonctionnement correct des barrières de synchronisation -- sont
essentielles pour construire de véritables systèmes en haute
disponibilité.

Avec IDE tout le monde semble faire sa petite sauce, encore que la norme
SATA semble remettre les choses au clair en empruntant pas mal de choses
à SCSI.

> J'ai bien essayé la commande
> dd if=/dev/hda3 of=/dev/null conv=noerror
> mais elle ne m'apprend rien de plus.

Elle t'indique les différentes erreurs (utilise plutôt conv=noerror,sync
pour copier si jamais)

> En ce moment, je recopie la partition linux endommagée sur
> un autre disque avec skip=8 seek=8. Puis un fsck sur la
> nouvelle partition pourrait restaurer le tout (ou presque)?

un gpart suivi d'un e2fsck oui.

> de disque a à disque b avecla commande suivante?
> dd if=/dev/hda3 of=/dev/hdb3 conv=noerror,sync

En fait, je viens de relire le manuels et voici une meilleure
explication.

   En cas d'erreur sur le disque, dd arrête immédiatement en
   écrivant sur la sortie standards les *blocks complets*
   qui ont pu être lus.

   L'option noerror continue après des erreurs en lecture.
   Cependant il est probable que dans ce cas les blocks retournés
   soient vides, voire incomplets en raison de l'erreur.

   L'option sync permet de rajouter dans chaque bloc des zéros
   de manière à garder l'alignement (remplacement des données
   illisibles par des zéros).

Appaemment conv=noerror,sync est indispensable si le I/O size de
dd est plus grand que la taille de bloc du disque. Il est d'ailleurs
recommandé d'utilisé bs=512 (ok, c'est le défaut sauf erreur) de manière
à limiter les erreurs et à éviter ce cas.

De plus, tu peux faire un essai pour voir ce que

   dd if=/dev/hda3 bs=512 count=8 conv=noerror | wc -c

nous dit ?  S'il ne dit pas 2048 bytes c'est que ,sync est
également nécessaire avec bs=512.




More information about the gull mailing list