N’en déplaise à certain, la vie d’un admin n’est pas toujours rose. J’en prends pour preuve la dernière tuile (comprendre alerte dans nagios) qui m’a valu quelques sueurs froides !
Petit flashback sur une semaine chargée en émotions …
Tout a commencé un beau matin avec le crash d’un disque d’une de nos baies SAN de prod. Pas de chance, la baie n’est plus sous garantie depuis 15 jours (on doit changer rapidement pour une autre) et notre commercial nous indique que ça sera compliqué d’en avoir un nouveau puisque notre contrat de support est terminé …
A ce moment, je me dis que ce n’est pas si grave. J’ai un disque SATA de 500Go qui traine au fond d’une armoire, je n’ai qu’a utiliser celui-là. J’insère le disque et la baie me répond que celui-ci n’est pas compatible, pas pris en charge ou que ce n’est pas du SATA II. J’enrage.
Après tout, c’est un vieux disque, il est peut-être défectueux. On en commande un autre, livraison UPS et tout le toutim. Le lendemain, RDV en baie pour le monter et rebelotte. J’enrage de nouveau : ça ne peut pas être une coïncidence. Je décide de tester le disque sur une machine pour m’assurer qu’il fonctionne correctement. Avant de partir du datacenter, je fais quelques recherches et je m’aperçois qu’il peut tout de même y avoir un problème de compatibilité et que la blague de mon acolyte sur un prétendu
1 | if(dd.model != "Dell") {...} |
n’est peut-être pas si bête !
Bref, pour faire simple, il y a des zones sur les disques durs utilisées par les constructeurs pour fixer la taille d’un disque même si celui-ci est plus grand (oui, c’est du vol). C’est le Host Protected Area (HPA) et le Device Configuration Overlay (DCO). Je soupçonne alors Dell de modifier légèrement leurs disques en introduisant un HPA (et/ou un DCO) pour pouvoir identifier ceux qui viennent de leurs usines et faire de la vente forcée.
De retour sur une machine de bureau, je teste le disque acheté précédemment : défectueux. J’ai beau être le plus classe du monde, pas de bol Abitbol.
J’avais par ailleurs tout de même emmené un disque fonctionnel afin de faire quelques tests et bingo :
1 2 3 4 | $ hdparm -N /dev/sda /dev/sda: max sectors = 976773167/976773168, HPA is enabled |
Il y a un secteur en moins pour constituer le HPA :-D. Voyons voir ce qu’il y a dedans.
Je change le nombre de secteurs du disque pour récupérer le secteur “caché” :
1 | $ hdparm -N p976773168 /dev/sda |
Et on peut ainsi extraire le dernier secteur (un secteur = 512 bytes sur ce disque) :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | $ dd if=/dev/sda of=/tmp/hpa-orig.img bs=512 count=1 skip=976773167 1+0 records in 1+0 records out 512 bytes (512 B) copied, 0.00036925 s, 1.4 MB/s $ hexdump -C /tmp/hpa-orig.img 00000000 45 4d 43 32 53 41 54 41 00 00 00 01 00 00 1c 20 |EMC2SATA....... | 00000010 80 00 00 00 00 00 00 03 3a 38 60 0f 00 00 00 00 |........:8`.....| 00000020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| * 00000080 00 04 00 7c 00 00 02 41 54 41 2d 48 54 43 48 37 |...|...ATA-HTCH7| 00000090 32 35 30 35 30 4b 4c 20 43 4c 41 52 35 30 30 41 |25050KL CLAR500A| 000000a0 43 30 41 4b 52 56 4e 36 33 5a 41 4a 36 4c 36 50 |C0AKRVN63ZAJ6L6P| 000000b0 44 20 20 20 20 20 20 44 47 31 31 38 30 33 32 34 |D DG1180324| 000000c0 39 37 00 00 30 30 35 30 34 38 36 30 37 00 00 00 |97..005048607...| 000000d0 48 44 53 37 32 35 30 35 30 4b 4c 41 33 36 30 20 |HDS725050KLA360 | 000000e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 000000f0 20 20 20 20 20 20 20 20 4b 32 41 4f 41 43 30 41 | K2AOAC0A| 00000100 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| * 00000200 |
Héhé, je jubile Le disque contient des informations sur le model de la baie et du disque lui même (HDS725050KLA360) !
Pour la petite anecdote, j’avais effectué les tests sur mon PC personnel et lors du reboot suivant, mon propre disque à grillé. Il n’y a pas à dire, j’ai vraiment vraiment pas de bol et pourtant j’aime la ouiche.
Je pars aussitôt à Montgallet afin d’acheter un disque de rechange, j’insère le fameux secteur en bout de disque et j’active le HPA :
1 2 3 4 5 6 7 | $ dd if=/tmp/hpa-orig.img of=/dev/sdb bs=512 count=1 seek=976773167 $ hdparm --yes-i-know-what-i-am-doing -N p976773167 /dev/sdb ## Ne pas oublier de réactiver le HPA sur le disque d'origine : $ hdparm --yes-i-know-what-i-am-doing -N p976773167 /dev/sda |
Je retourne en baie, j’insère fébrillement le disque modifié et bingo, ça marche !
Pour la petite histoire, Dell a entre temps réussi à nous faire un devis : 160 euros le disque qui coûte en réalité 36 euros n’importe où ailleurs ! Normal normaux, bicyclette vélo !
Attention tout de même, ce genre de manipulations fait sauter la garantie du matériel (celle de la baie SAN en l’occurence).
Chapeau bas pour trouver ça ^^
Je prends note de ces quelques commandes qui pourraient me service.
J’aime bien les histoires d’admin, ça change du quotidien d’un développeur
Attention : cet atricle n’est pas un atricle sur le dévelommepent.
GG en tout cas, tu viens de sauver la boite de la banqueroute !! (au moins !)
C’est amusant, j’ai presque eu l’impression de lire un article de hacking sur console… C’est des coups à vous faire des armés de RMS !
Au passage, j’ai adoré le –yes-i-know-what-i-am-doing