Badblocks : accéléré le processus

Salut,

J’ai en ma possession le portable (Asus Eee PC 1015 BX) d’une amie ([strike]Windosienne[/strike]) en vue de l’installation d’une version Debian (Handylinux).
Ce dernier est doté d’un disque (très malmener) de 320 Gio et j’ai carte blanche (après lui avoir sauvegardé ce que bon lui semblait).

Depuis une live-usb j’ai lancé [mono]dcfldd[/mono] et [mono]shred[/mono] (cinq passes) pour ensuite recréer une table des partitions (msdos) comprenant la racine, /home et swap.

[code][09:40:39] ~ # fdisk -l

Disque /dev/sda : 320.1 Go, 320072933376 octets
255 têtes, 63 secteurs/piste, 38913 cylindres, total 625142448 secteurs
Unités = secteurs de 1 * 512 = 512 octets
Taille de secteur (logique / physique) : 512 octets / 4096 octets
taille d’E/S (minimale / optimale) : 4096 octets / 4096 octets
Identifiant de disque : 0x000ace46

Périphérique Amorce Début Fin Blocs Id Système
/dev/sda1 * 2048 58593279 29295616 83 Linux
/dev/sda2 58593280 625141759 283274240 5 Étendue
/dev/sda5 58595328 324835327 133120000 83 Linux
/dev/sda6 324837376 328933375 2048000 82 partition d’échange Linux / Solaris

[…]
[/code]

Je recherche les secteurs défectueux sur sda1 et sda5.

[code][12:35:05] ~ # badblocks -svn -b 4096 -o liste-de-blocs-sda1.txt /dev/sda1
Vérification des blocs défectueux dans un mode non destructif de lecture-
écriture
Du bloc 0 au bloc 7323903
Vérification des blocs défectueux (test non destructif de lecture-écriture)
Test en cours avec un motif aléatoire : ^C 84.04% effectué, 92:59:23 écoulé. (231/0/0 erreurs)

Interrupted at block 6155222
Interruption, nettoyage en cours
[09:34:35] ~ #[/code]

[code][15:07:50] ~ # badblocks -svn -b 4096 -o liste-de-blocs-sda5.txt /dev/sda5
Vérification des blocs défectueux dans un mode non destructif de lecture-
écriture
Du bloc 0 au bloc 33279999
Vérification des blocs défectueux (test non destructif de lecture-écriture)
Test en cours avec un motif aléatoire : ^C 3.70% effectué, 90:26:58 écoulé. (2530/0/0 erreurs)

Interrupted at block 1230168
Interruption, nettoyage en cours
[09:35:29] ~ #[/code]

J’ai dû interrompre pour le week-end.

[10:24:21] ~ # badblocks -svn -b 4096 -o liste-de-blocs-sda1_suite.txt /dev/sda1 7323903 6155222 Vérification des blocs défectueux dans un mode non destructif de lecture- écriture Du bloc 6155222 au bloc 7323903 Vérification des blocs défectueux (test non destructif de lecture-écriture) Test en cours avec un motif aléatoire : 84.92% effectué, 4:09:27 écoulé. (25/0/0 erreurs)

[10:31:26] ~ # badblocks -o liste-de-blocs-sda5_suite.txt -svn -b 4096 /dev/sda5 33279999 1230168 Vérification des blocs défectueux dans un mode non destructif de lecture- écriture Du bloc 1230168 au bloc 33279999 Vérification des blocs défectueux (test non destructif de lecture-écriture) Test en cours avec un motif aléatoire : 3.72% effectué, 4:01:08 écoulé. (86/0/0 erreurs)

C’est vraiment très très long.

À cette allure et avec une seule passe (recherche secteurs) elle ne reverra pas son portable avant la mi-2015 (fin ?) … :083

Il y a-t-il une solution/option un tant soit peu … plus rapide ?


PS : la suite sera …

Je formaterai ces dernières et marquerai les secteurs comme suit.

[code]# cat liste-de-blocs-sda1_suite.txt >> liste-de-blocs-sda1.txt

cat liste-de-blocs-sda5_suite.txt >> liste-de-blocs-sda5.txt[/code]

[code]# mke2fs -t ext4 -l liste-de-blocs-sda1.txt /dev/sda1

mke2fs -t ext4 -l liste-de-blocs-sda5.txt /dev/sda5[/code]

Je vérifierai.

[code]# dumpe2fs -b /dev/sda1

dumpe2fs -b /dev/sda5[/code]

Salut,

Je me contente d’une seule passe (n 0) :slightly_smiling:

Avant même de lancer [mono]badblocks[/mono], il est parfois (suivant le données constructeur) édifiant (et rapide) de vérifier l’état du disque en utilisant :

[mono]smartctl -a /dev/sdX[/mono] (remplacer X par la lettre correspondant au disque)

==========
Quelque liens :

fr.wikipedia.org : Self Monitoring, Analysis and Reporting Technology

lea-linux.org : Hardware Hard plus S.M.A.R.T.

bonsoir,
pourquoi le gestionnaire de file system ne sait plus que faire des blocs defectueux?

hdparm -D, on n’a plus confiance?
A+
JB1

Bien évidemment ce fût fait, avant …

[quote=“ggoodluck47”]

Je me contente d’une seule passe (n 0) :slightly_smiling:[/quote]

[mono]$ man shred[/mono]

[quote]-n, --iterations=N
récrire N fois au lieu du nombre par défaut (3)[/quote]

Fait, aussi …

Bref, ce ne sont pas là les préliminaires qui me posent soucis, mais la saint-glinglin pour restitution …

Pas certain qu’il y ait moyen d’accélérer le processus, mais j’ai l’impression que si le processus est aussi lent c’est parce qu’un grand nombre de secteurs défectueux est trouvé sur une partie du disque.
Dans ce cas, j’ai peur que la solution la plus prudente soit de le changer.

Ôte-moi un doute, tu ne lances quand même pas la vérification des deux partitions en parallèle ?
Si le disque ne contient rien, utilise plutôt badblocks avec l’option -w sur l’ensemble du disque et non sur les partitions individuelles. Quant à informer le système de fichiers des blocs défectueux, il est plus sûr et plus simple de le faire avec l’option -c ou -cc de mke2fs ou e2fsck, cela évite de se tromper sur la taille de bloc.

Comme PascalHambourg me l’avait fait remarquer, les secteurs défectueux sont remplacés par des secteurs en réserve QUAND on écrit dessus.

Et quand le disque dur n’a plus de secteurs en réserve, il est plus que temps de changer de disque.

Toujours est-il, écrire plein de petits zéros partout sur le disque avec une commande telle que [mono]dd if=/dev/zero of=/dev/sda bs=1M[/mono] devrait réassigner tous les secteurs défectueux ou permettre de déterminer si le disque est à changer.
On peut vérifier si tous les secteurs ont bien été réassignés en vérifiant la valeur brute de l’attribut [mono]Current_Pending_Sector[/mono] avec [mono]smartctl -A /dev/sda[/mono], je suppose.


AnonymousCoward

Salut,

J’ai tout repris de zéro.

Aie … si si, deux consoles lançaient. Des conséquences (?) sur ce mode opératoire je présume.

Il est en attente d’installation. C’est noté pour la prochaine fois.

J’ai opté pour cette méthode.

[code][15:40:03] ~ # mke2fs -cc -v /dev/sda
mke2fs 1.42.5 (29-Jul-2012)
/dev/sda est le périphérique en intégralité, pas seulement une partition !
Procéder malgré tout ? (o,n) o
résolution de fs_types pour mke2fs.conf : 'ext2’
Étiquette de système de fichiers=
Type de système d’exploitation : Linux
Taille de bloc=4096 (log=2)
Taille de fragment=4096 (log=2)
« Stride » = 0 blocs, « Stripe width » = 0 blocs
19537920 i-noeuds, 78142806 blocs
3907140 blocs (5.00%) réservés pour le super utilisateur
Premier bloc de données=0
Nombre maximum de blocs du système de fichiers=0
2385 groupes de blocs
32768 blocs par groupe, 32768 fragments par groupe
8192 i-noeuds par groupe
Superblocs de secours stockés sur les blocs :
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872, 71663616

Exécution de la commande : badblocks -b 4096 -X -s -w /dev/sda 78142805
Test en cours avec le motif 0xaa: 0.43% effectué, 58:55 écoulé. (0/0/0 erreurs)[/code]

En cas d’interruption (Interrupted at block zzzzzz) la syntaxe est-elle la même ?

[mono]mke2fs -cc -v /dev/sda 78142805 zzzzzz[/mono]

J’ai retrouvé le fil en question. :wink:

[mono]dcfldd[/mono] fait la même chose en mode verbeux.

[10:25:54] ~ # dcfldd if=/dev/zero of=/dev/sda bs=1M conv=notrunc 305152 blocks (305152Mb) written.dcfldd:: No space left on device [12:22:21] ~ #

[code][13:04:02] ~ # smartctl -A /dev/sda
smartctl 5.41 2011-06-09 r3365 [i686-linux-3.2.0-4-686-pae] (local build)
Copyright © 2002-11 by Bruce Allen, http://smartmontools.sourceforge.net

=== START OF READ SMART DATA SECTION ===
SMART Attributes Data Structure revision number: 16
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE
1 Raw_Read_Error_Rate 0x002f 182 182 051 Pre-fail Always - 201212
3 Spin_Up_Time 0x0027 148 137 021 Pre-fail Always - 1600
4 Start_Stop_Count 0x0032 075 075 000 Old_age Always - 25821
5 Reallocated_Sector_Ct 0x0033 133 133 140 Pre-fail Always FAILING_NOW 561
7 Seek_Error_Rate 0x002e 037 001 000 Old_age Always - 260973
9 Power_On_Hours 0x0032 097 097 000 Old_age Always - 2895
10 Spin_Retry_Count 0x0032 100 100 000 Old_age Always - 0
11 Calibration_Retry_Count 0x0032 100 100 000 Old_age Always - 0
12 Power_Cycle_Count 0x0032 098 098 000 Old_age Always - 2477
191 G-Sense_Error_Rate 0x0032 001 001 000 Old_age Always - 1546
192 Power-Off_Retract_Count 0x0032 200 200 000 Old_age Always - 171
193 Load_Cycle_Count 0x0032 107 107 000 Old_age Always - 281037
194 Temperature_Celsius 0x0022 105 092 000 Old_age Always - 38
196 Reallocated_Event_Count 0x0032 001 001 000 Old_age Always - 561
197 Current_Pending_Sector 0x0032 001 001 000 Old_age Always - 65521
198 Offline_Uncorrectable 0x0030 100 253 000 Old_age Offline - 0
199 UDMA_CRC_Error_Count 0x0032 200 200 000 Old_age Always - 0
200 Multi_Zone_Error_Rate 0x0008 100 253 000 Old_age Offline - 0

[13:04:18] ~ #[/code]

« FAILING_NOW » indique une panne imminente, À votre avis ?

Merci.

La première conséquence, c’est la lenteur extrême car les têtes passent leur temps à faire des aller-retour entre les deux partitions. La seconde, c’est le stress imposé à la mécanique par ces mouvements répétitifs.

Oui mais non.
Tu veux probablement quelque chose de plus récent que le type par défaut ext2, dans ce cas il faut spécifier le type ext{3,4} voulu avec l’option -t ou en invoquant le programme avec le nom mkfs.ext{3,4}.
D’autre part, si le disque est destiné à être partitionné il faut indiquer la partition définitive /dev/sdaN et non le disque entier /dev/sda. L’objectif est de marquer les blocs défectueux dans le système de fichiers.

[quote=“BelZéButh”]En cas d’interruption (Interrupted at block zzzzzz) la syntaxe est-elle la même ?
[mono]mke2fs -cc -v /dev/sda 78142805 zzzzzz[/mono][/quote]
Non, pas du tout. La syntaxe est celle de mke2fs. On ne peut pas interrompre et reprendre la création d’un système de fichiers. Il faut recommencer.

Non, il indique juste que la valeur normalisée de l’attribut, 133, est descendue sous le seuil correspondant, 140. En supposant que la valeur initiale était 200, on peut extrapoler qu’il reste encore environ 1100 secteurs de réserve. Mais cela ne sera pas suffisant s’il y a plus de 65000 secteurs défectueux, ce qui est énorme. A moins que les secteurs défectueux soient concentrés dans une zone qu’il sera possible, si tu es joueur, d’isoler dans une partition et de ne pas utiliser, je crains que le disque soit inutilisable.

=== START OF READ SMART DATA SECTION === SMART Attributes Data Structure revision number: 16 Vendor Specific SMART Attributes with Thresholds: ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE 1 Raw_Read_Error_Rate 0x002f 182 182 051 Pre-fail Always - 201212 ... 4 Start_Stop_Count 0x0032 075 075 000 Old_age Always - 25821 5 Reallocated_Sector_Ct 0x0033 133 133 140 Pre-fail Always FAILING_NOW 561 ... 9 Power_On_Hours 0x0032 097 097 000 Old_age Always - 2895 ... 12 Power_Cycle_Count 0x0032 098 098 000 Old_age Always - 2477 ... 196 Reallocated_Event_Count 0x0032 001 001 000 Old_age Always - 561 197 Current_Pending_Sector 0x0032 001 001 000 Old_age Always - 65521
L’attribut [mono]Raw_Read_Error_Rate[/mono] est très élevé. Sur plusieurs PCs que je viens de vérifier, cette valeur est à 0. Rien que pour ça, je changerais le disque dur.

L’on peut voir avec les attributs [mono]Power_On_Hours[/mono] et [mono]Power_Cycle_Count[/mono] que le disque en question n’a que dans les 120 jours de fonctionnement, 4 mois. Et qu’en moyenne, le PC est allumé pour une période d’environ 1h.

Peut-être est-ce un fonctionnement en mode économie d’énergie élevée qui n’a eu de cesse de stopper puis relancer le disque (valeur brute de l’attribut [mono]Start_Stop_Count[/mono] eu égard aux 2477 allumages) qui a pu l’endommager. Ce qui est sûr, c’est que 120 jours de fonctionnement, c’est rien du tout.

L’attribut [mono]Current_Pending_Sector[/mono] indique juste que 65521 secteurs doivent encore être remappés, lorsque le disque estimera qu’il est peu sollicité et qu’il peut le faire sans déranger. Il faut laisser le disque oisif pendant quelques temps et surveiller de temps à autres que la valeur brute de cet attribut baisse jusqu’à atteindre 0, si tant est qu’elle y arrive.

Mais comme je disais, vu la valeur de [mono]Raw_Read_Error_Rate[/mono], je ne n’acharnerais pas sur ce disque, personnellement.


AnonymousCoward

Tu parles de la valeur brute 201212, mais on sait pas ce qu’elle représente physiquement. La valeur normalisée de 182 est en revanche largement au-dessus du seuil de 51, donc le constructeur considère que l’attribut est normal.

Pas d’accord. D’une part la réallocation se produit essentiellement lors de l’écriture et pas quand le disque est oisif. D’autre part, comme je l’ai écrit il ne reste pas assez de secteurs de réserve pour tous les remapper. Le seul espoir, ce serait que la plupart de ces secteurs puissent être corrigés sur place sans être remappés, juste en réécrivant dessus (si c’est juste un défaut de magnétisation). Mais j’en doute.

Quel ballot sur ce coup.

Bon, j’ai recréé mes partitions.

[code][18:32:09] ~ # fdisk -l

Disque /dev/sda : 320.1 Go, 320072933376 octets
255 têtes, 63 secteurs/piste, 38913 cylindres, total 625142448 secteurs
Unités = secteurs de 1 * 512 = 512 octets
Taille de secteur (logique / physique) : 512 octets / 4096 octets
taille d’E/S (minimale / optimale) : 4096 octets / 4096 octets
Identifiant de disque : 0x000ad4f0

Périphérique Amorce Début Fin Blocs Id Système
/dev/sda1 * 2048 58593279 29295616 83 Linux
/dev/sda2 58593280 625141759 283274240 5 Étendue
/dev/sda5 58595328 214845327 78125000 83 Linux
/dev/sda6 214847376 219144191 2148408 82 partition d’échange Linux / Solaris

Disque /dev/sdb : 16.0 Go, 16039018496 octets
[…]
[/code]

[code][18:32:35] ~ # parted /dev/sda
GNU Parted 2.3
Using /dev/sda
Welcome to GNU Parted! Type ‘help’ to view a list of commands.
(parted) p
Model: ATA WDC WD3200BPVT-8 (scsi)
Disk /dev/sda: 320GB
Sector size (logical/physical): 512B/4096B
Partition Table: msdos

Number Start End Size Type File system Flags
1 1049kB 30,0GB 30,0GB primary boot
2 30,0GB 320GB 290GB extended
5 30,0GB 110GB 80,0GB logical
6 110GB 112GB 2200MB logical

(parted) q
[18:32:58] ~ # [/code]

[code][18:33:01] ~ # mkfs.ext4 -cc -v /dev/sda1
mke2fs 1.42.5 (29-Jul-2012)
résolution de fs_types pour mke2fs.conf : ‘ext4’
Étiquette de système de fichiers=
Type de système d’exploitation : Linux
Taille de bloc=4096 (log=2)
Taille de fragment=4096 (log=2)
« Stride » = 0 blocs, « Stripe width » = 0 blocs
1831424 i-noeuds, 7323904 blocs
366195 blocs (5.00%) réservés pour le super utilisateur
Premier bloc de données=0
Nombre maximum de blocs du système de fichiers=0
224 groupes de blocs
32768 blocs par groupe, 32768 fragments par groupe
8176 i-noeuds par groupe
Superblocs de secours stockés sur les blocs :
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000

Exécution de la commande : badblocks -b 4096 -X -s -w /dev/sda1 7323903
Test en cours avec le motif 0xaa: 1.71% effectué, 21:39 écoulé. (0/0/0 erreurs)
[/code]

Par la suite …

Je ne toucherai pas à la partition étendue.
Je lancerai ensuite [mono]# mkfs.ext4 -cc -v /dev/sda5[/mono]

Et je me passerai du mode verbeux pour la swap.

[mono]# mkswap -cc /dev/sda6[/mono]

[mono]$ man mkswap[/mono]

[quote][strike]-v[/strike], --swapversion 1
Indiquer la version de l’espace d’échange (cette option ne sert actuellement à rien car l’ancienne option -v 0 est devenue obsolète et que seule -v 1 est prise
en charge. Le noyau ne prend plus en charge le format v0 d’espace d’échange depuis la version 2.5.22 (juin 2002). La nouvelle version v1 est prise en charge
depuis le noyau 2.1.117 (août 1998)).

[/quote]

Ce 06 Octobre j’avais lancé une recherche sur le disque (les partitions étant supprimées : [mono]dcfldd et shred[/mono])

[code][11:37:59] ~ # badblocks -s -v /dev/sdb
Vérification des blocs 0 à 312571223
Vérification des blocs défectueux (test en mode lecture seule) : 3942144 effectué, 1:48 écoulé. (0/0/0 erreurs)
3942145 effectué, 2:03 écoulé. (1/0/0 erreurs)

[…]

273332251ffectué, 22:57:01 écoulé. (3317/0/0 erreurs)
complété
Passe complétée, 3318 blocs défectueux repérés. (3318/0/0 erreurs)
[11:42:45] ~ #
[/code]

[mono]3318[/mono] blocs concernés, ce qui équivaut en secteurs (?) je m’y perd …

[quote]255 têtes, 63 secteurs/piste, 38913 cylindres, total 625142448 secteurs
Unités = secteurs de 1 * 512 = 512 octets[/quote]

[mono][19:19:49]:~$ echo 3318*[strike]512[/strike] | bc -l
[strike]1698816[/strike]
[19:20:32]:~$[/mono] ?

:023

PS : je viens de survoler vos derniers post respectif (avant envoie), j’épluche tout cela et m’expliquerai sur cet acharnement plus ou moins contraint.

Merci à vous deux. :wink:

En secteurs logiques de 512 octets, le double puisque la taille de bloc par défaut est 1 Kio.
Mais…

  • Un bloc défectueux ne signifie pas que tous les secteurs du blocs sont défectueux mais qu’au moins un des secteurs l’est.
  • Ce disque a des secteurs physiques de 4 Kio qui correspondent à 8 secteurs logiques consécutifs. Je ne sais même pas si les attributs SMART comptent les secteurs logiques ou physiques.

Salut,

[15:19:28] ~ # parted /dev/sda
[...]
(parted) p                                                                
Model: ATA WDC WD3200BPVT-8 (scsi)
Disk /dev/sda: 320GB
Sector size (logical/physical): 512B/4096B
Partition Table: msdos

Number  Start   End     Size    Type      File system  Flags
 1      1049kB  30,0GB  30,0GB  primary                boot
 2      30,0GB  320GB   290GB   extended
 5      30,0GB  110GB   80,0GB  logical
 6      110GB   112GB   2200MB  logical

(parted) q                                                                
[15:19:46] ~ # [/code]


À ce stade et en faisant une estimation [u]à la louche[/u].

[quote]badblocks recherchera les blocs défectueux en écrivant quelques motifs (0xaa, 0x55, 0xff, 0x00) sur chaque bloc du périphérique et en relisant celui-ci pour en vérifier le contenu.[/quote]


Sachant que badblocks doit encore exécuté les motifs 0x55, 0xff et 0x00 sur [mono]sda1 (30GB)[/mono]



[mono]~ # mkfs.ext4 -cc -v /dev/sda1
[...]
Exécution de la commande : badblocks -b 4096 -X -s -w /dev/sda1 7323903
Test en cours avec le motif 0xaa: complété                                             
Lecture et comparaison : [b]81.49%[/b] effectué, [b]25:54:56 écoulé[/b]. (180/0/0 erreurs)[/mono]


J'arrondis l'écriture/lecture et comparaison du motif 0xaa à 27 heures à multiplié par quatre (0xaa, 0x55, 0xff, 0x00) ce qui donnerai un formatage et marquage d'une durée de 108 heures pour [mono]sda1 (30GB)[/mono].


Soit une moyenne de  3.60 pour 1 GB.


[code][19:23:12]:~$ echo 108/30 | bc -l
3.60000000000000000000
[19:23:24]:~$ [/code]


Soit 404 heures pour sda1, sda5 et sda6 au bas mot ...


[code][19:24:04]:~$ echo "(30*3.60)+(80*3.60)+(2.2*3.60)" | bc -l
403.920
[19:24:23]:~$

Ceci fait (?), j’installe Handylinux (dans environ 17 jours) et je me plante durant cette phase où je change d’avis (un peu plus tard) et je décide d’installer une Wheezy par-dessus.

Pourrais-je me contenter d’un simple formatage ([mono]mkfs.ext4 /dev/sda1 …[/mono]) où devrais-je à nouveau marqué les secteurs via l’option -cc ([mono]mkfs.ext4 -cc -v /dev/sda1 …[/mono]) ?

D’autre part, supposons que je lance [mono]badblocks -wsv -o liste-blocs-sda.txt /dev/sda[/mono] (ce qui prend 23 heures environ, (Cf ci-dessus : le 06 Octobre …)) sur l’ensemble du disque.

Quelle serait la suite ?

Les secteurs seront marqués sur le disque entier, suffirait-il (simplement) de créer les partitions souhaiter, les formater sans options et basta ?

Que deviendraient les secteurs marqués précédemment ?


PS :

Elle avait déposé son pc au service après-vente (Microsoft) du côté de Dijon, à la sortie on lui affirme que son portable est HS avec un joli blabla (en veux-tu en voilà) technique sur lequel elle n’a rien compris …

Elle me contact (m’explique) et me fait part quelle envisage un nouvel achat (même boutique :005 ).

Depuis j’ai réceptionné la bête malade et deux heures plus tard je détecte un souci disque, la suite … est ici.

Cependant, elle ne souhaite pas investir sur un disque (dû au blabla je suppose) alors je tente ma chance, me fais la main en passant et suis convaincu de la convertir (après cette opération/démonstration) aux bien fait d’un nunux. Avis à la populace :wink:

Je n’ai pas vérifié tes calculs, mais l’idée est là : ça va prendre des jours pour un résultat non garanti. A mon avis, il y a trop de secteurs défectueux. A ta place j’essaierais de déterminer s’ils sont concentrés dans un zone délimitée en analysant le fichier de sortie de backblocks sur tout le disque, et d’isoler cette zone dans une partition inutilisée. S’ils sont dispersés sur tout le disque, alors je laisserais tomber.

Si tu “reformates” (recrées un nouveau système de fichiers sur la) partition, alors toutes les méta-données du système de fichiers précédent sont effacées, y compris la liste des blocs défectueux. Pour la préserver il faudrait l’exporter dans un fichier avant et la réinjecter avec l’option -l, mais je n’ai pas trouvé de moyen d’exporter la liste des blocs marqués comme défectueux avec e2fsck ou tune2fs. Conclusion : ne pas reformater mais se contenter de supprimer tous les fichiers.

[quote=“BelZéButh”]D’autre part, supposons que je lance badblocks -wsv -o liste-blocs-sda.txt /dev/sda (…) sur l’ensemble du disque. (…)
Les secteurs seront marqués sur le disque entier, suffirait-il (simplement) de créer les partitions souhaiter, les formater sans options et basta ?
Que deviendraient les secteurs marqués précédemment ?[/quote]
Contrairement à un système de fichiers, il n’y a pas de liste globale des secteurs défectueux pour un disque entier (à part en interne dans le disque, mais ce n’est pas accessible). Les secteurs défectueux détectés par badblocks ne sont marqués nulle part excepté dans le fichier de sortie. Si tu n’utilises pas ce fichier, ça ne sert à rien. Et pour l’utiliser, ce n’est pas trivial : il faut le découper pour séparer les blocs appartenant à chaque partition puis convertir les positions des blocs en fonction de l’offset de la partition et de la taille de bloc du système de fichiers. Bon courage.

Salut,

[quote=“PascalHambourg”]A ta place j’essaierais de déterminer s’ils sont concentrés dans un zone délimitée en analysant le fichier de sortie de backblocks sur tout le disque, et d’isoler cette zone dans une partition inutilisée.
[/quote]

Dans cet objectif je m’échine depuis hier à déterminer le premier secteur physique correspondant à un (groupe) bloc défectueux.
Disons que [mono]badblocks -svn -o blocs-sda.txt /dev/sda[/mono] soit arrivé à terme.
Note : précédemment (Cf. le 06 Octobre…) j’avais constaté dans cette liste des groupes relativement concentrés, je pense qu’il en sera de même cette fois aussi.
Dans cette perspective imaginons qu’il résulte de cette nouvelle liste une série de bloc malsain s’étalant de 20000 à 1330000.

Je décide (sur ce disque de 320 Go) et n’y vais pas avec le dos de la cuillère, d’isoler les 1330010 premiers blocs (hormis le MBR).
Je veux déterminer l’emplacement du premier secteur du bloc 1330010 afin de créer une partition fantôme correspondante à ces 1330010 blocs.

Ceci serait-il juste où totalement farfelu (aie … pas trop fort, stp) ? (en fonction de ce que j’ai glané/compris sur la toile.)

[strike]Sachant[/strike] (?) que : 1330010 blocs de 4096 octets font (1330010*4096) 5447720960 octets que divise 512 octets afin d’obtenir la position du premier secteur du bloc 1330010.

Soit 5447720960/512=10640080 secteurs.

Je crée donc ma partition fictive du secteur 2049(s) au secteur 10640080(s) :think:

PS : j’ai de la marge à ce niveau.

[mono]$ man sfdisk:
-s partition donne la taille de la partition en blocs
Si l’argument partition est omis, sfdisk affichera la taille de tous les disques, et le total[/mono]

[17:07:35] ~ # sfdisk -s /dev/sda 312571224 [17:07:39] ~ #

Aurais tu oublié [mono]dumpe2fs -b /dev/sda(N)[/mono] ?

[mono]$ man dumpe2fs : -b Afficher les blocs qui sont marqués défectueux dans le système de fichiers.[/mono]

[quote=“PascalHambourg”]Conclusion : ne pas reformater mais se contenter de supprimer tous les fichiers.
[/quote]

Ok.

[quote=“PascalHambourg”]il faut le découper pour séparer les blocs appartenant à chaque partition puis convertir les positions des blocs en fonction de l’offset de la partition et de la taille de bloc du système de fichiers.
[/quote]

Une piste ?

Merci pour tout. :wink:

La taille de bloc par défaut de badblocks est 1024 octets, pas 4096 (voir option -b).

1330010 blocs de 1024 octets = 1361930240 octets (1,37 Go / 1,27 Gio arrondi par excès) = 2660020 secteurs de 512 octets. Avec parted tu crées une partition qui débute à 1 Mo et finit à 1,37 Go minimum et tu devrais être tranquille.

En fait badblocks teste plusieurs blocs à la fois (64 par défaut, voir option -c) pour des raisons de performance. Le pilote disque du noyau lui-même lit ou écrit plusieurs secteurs logiques à la fois (apparemment au minimum par page de 4096 octets, soit 8 secteurs de 512 octets), toujours pour des raisons de performance. Le disque lui-même peut réunir 8 secteurs logiques de 512 octets dans un secteur physique de 4096 octets pour des raisons non pas de performance mais de densité de stockage (on économise sur les en-têtes et CRC de secteur physique, c’est un peu le même principe que les “jumbo frames” en ethernet).

Bien vu, je n’avais pas pensé à dumpe2fs. Donc on peut extraire et réinjecter la liste des blocs marqués défectueux.

Il faut convertir les positions des partitions et des blocs en une unité commune (secteur de 512 octets, blocs de 1024 octets…), diviser la liste des blocs selon les limites des partitions, calculer la position relative de chaque bloc en lui retranchant la position de début de la partition correspondante exprimée dans la même unité, et pour finir convertir à nouveau ces positions relatives des blocs selon la taille de bloc du système de fichiers créé dans la partition correspondante et éliminer les éventuels doublons. Risque d’erreur maximum.

Salut,

Le verdict est tombé.

~ # badblocks -s -v -o liste-blocs-sda.txt /dev/sda

[mono]$ echo “(n°_bloc*1024)” /512 | bc -l = n° secteur[/mono]

j’ai regroupé ces derniers au mieux.

du bloc 3942145 au bloc 4963039 > total 16
Soit du Secteur n° 7884290 au Sn° 9926078

du bloc 6740712 au bloc 7329695 > total 36
Soit du Secteur n° 13481424 au Sn° 14659390

du bloc 10379408 au bloc 10959246 > total 195
Soit du Secteur n° 20758816 au Sn° 21918492

du bloc 260815960 au bloc 273332251 > total 3070
Soit du Secteur n° 521631920 au Sn° 546664502

Je n’ai pas cherché de midi à quatorze heures.
Une partition fantôme (sda1) 100 Go.

[mono]/dev/sda2 pour la racine à venir
/dev/sda5 swap
/dev/sda6 /home[/mono]

[code][16:07:45] ~ # parted /dev/sda
[…]
Model: ATA WDC WD3200BPVT-8 (scsi)
Disk /dev/sda: 625142448s
Sector size (logical/physical): 512B/4096B
Partition Table: msdos

Number Start End Size Type File system Flags
1 2048s 195313663s 195311616s primary ext4
2 195313664s 214845439s 19531776s primary boot
3 214845440s 625142447s 410297008s extended
5 214847488s 218753023s 3905536s logical
6 218755072s 248051711s 29296640s logical

[…]

Number Start End Size Type File system Flags
1 1,05MB 100001MB 100000MB primary ext4
2 100001MB 110001MB 10000MB primary boot
3 110001MB 320073MB 210072MB extended
5 110002MB 112002MB 2000MB logical
6 112003MB 127002MB 15000MB logical
(parted) q
[17:26:41] ~ #[/code]

J’ai lancé le formatage et marquage des secteurs éventuels sur /dev/sda2.

Je clôturerai le sujet d’ici quelques jours.

Merci Pascal.


PS : pour mémo.

[code][15:52:48]:~$ echo 2608159601024 | bc -l
267075543040 # en octets
[15:52:55]:~$
[15:52:55]:~$ echo "(260815960
1024)" /512 | bc -l
521631920.00000000000000000000 # n° de secteur
[15:53:01]:~$

[15:53:17]:~$ echo 2733322511024 | bc -l
279892225024 # en octets
[15:53:22]:~$
[15:53:23]:~$ echo "(273332251
1024)" /512 | bc -l
546664502.00000000000000000000 # n° de secteur
[15:53:28]:~$

[16:02:29]:~$ echo 267075543040/1000000000 | bc -l && echo 267075543040/1073741524 | bc -l
267.07554304000000000000 # valeur en Go
248.73355185619141613824 # valeur en Gio
[16:02:43]:~$
[16:02:58]:~$ echo 279892225024/1000000000 | bc -l && echo 279892225024/1073741524 | bc -l
279.89222502400000000000 # valeur en Go
260.67002045456891541432 # valeur en Gio
[16:03:08]:~$[/code]

Le gag m’était arrivé avec un disque dur (plus petit tt de même, 4G à l’époque). C’était un atterrissage de la tête de lecture je pense. J’avais fait un test badblocks, regroupé tout dans une zone, élargi la zone de 5% en haut et en bas, et déclaré tout cette zone en bad blocks en passant la liste à fsck.ext2 (option -l, je voulais récupérer le système de fichiers). Cette option te permet aussi de reprendre un test en cours de route. Le tout avait mis du temps mais le disque a continué sa vie pendant plusieurs années après sans souci. Si c’est un portable, peut être a-t-il eu un choc en cours d’utilisation, ça peut expliquer le souci.