SIG 11 ARTICLES DOCUMENTS MEMBRES LIENS

Tout savoir de ses disques durs avec smartmontools

Professeur de physique à l'université de Milwaukee, Bruce Allen s'est retrouvé aux commandes d'une ferme de 600 disques durs ATA, garnis de 50 To de données dont il valait mieux assurer la pérennité. Voilà pourquoi il s'est intéressé à SMART, cet ensemble de routines présentes en gros depuis 1996 dans les disques durs ATA comme SCSI et qui, analysant leurs paramètres physiques les plus critiques, permettent de prévoir une éventuelle défaillance avec une étonnante efficacité. Et, pour sortir de l'ombre une fonction plutôt méconnue malgré son utilité, et aider à l'interprétation des messages obscurs qu'elle délivre, il a développé smartmontools. Élémentaire à configurer, très simple à utiliser, smartmontools fournit sur le comportement intime de son disque dur une quantité d'informations qui frôle l'indécence.

le daemon : smartd

Pour exécuter sa tâche, smartmontools se divise en deux : un daemon, smartd, analyse périodiquement, toutes les 30 minutes par défaut, les paramètres fournis par le disque dur, chacun étant répertorié sous un numéro d'attribut qui lui est propre ; notons au passage que, puisque le fabricant ne publie pas toujours la documentation nécessaire, smartmontools échouera parfois à interpréter certains paramètres d'un disque. On le configure simplement à l'aide du fichier smartd.conf, classiquement situé dans le répertoire /etc. Au départ, ce fichier se compose d'une directive unique : DEVICESCAN.
Il vaut mieux éviter d'en rester là, car elle ordonne à smartd de rechercher les 12 disques ATA, et les 26 SCSI, potentiellement présent sur son système, et de faire un compte-rendu scrupuleux de ses trouvailles dans /var/log/messages, ce qui produit un résultat de cet ordre :
Dec 22 14:57:37 lazare smartd[1007]: smartd version 5.1-18 Copyright (C) 2002-3 Bruce Allen
Dec 22 14:57:37 lazare smartd[1007]: Home page is http://smartmontools.sourceforge.net/
Dec 22 14:57:37 lazare smartd[1007]: Opened configuration file /etc/smartd.conf
Dec 22 14:57:38 lazare smartd[1007]: Drive: DEVICESCAN, implied '-a' Directive on line 9 of file /etc/smartd.conf
Dec 22 14:57:38 lazare smartd[1007]: Configuration file /etc/smartd.conf was parsed,
found DEVICESCAN, scanning devices
Dec 22 14:57:38 lazare smartd[1007]: Device: /dev/hda, opened
Dec 22 14:57:38 lazare smartd[1007]: Device: /dev/hda, found in smartd database.
Dec 22 14:57:38 lazare smartd[1007]: Device: /dev/hda, is SMART capable. Adding to "monitor" list.
Dec 22 14:57:38 lazare smartd[1007]: Device: /dev/hdb, opened
Dec 22 14:57:38 lazare smartd[1007]: Device: /dev/hdb, not found in smartd database.
Dec 22 14:57:39 lazare smartd[1007]: Device: /dev/hdb, does not support SMART Self-test Log.
Dec 22 14:57:39 lazare smartd[1007]: Device: /dev/hdb, does not support SMART Error Log.
Dec 22 14:57:39 lazare smartd[1007]: Device: /dev/hdb, is SMART capable. Adding to "monitor" list.
Dec 22 14:57:39 lazare smartd[1007]: Device: /dev/hdc, opened
Dec 22 14:57:39 lazare smartd[1007]: Device: /dev/hdc, not found in smartd database.
Dec 22 14:57:39 lazare smartd[1007]: Device: /dev/hdc, appears to lack SMART,
use '-T permissive' Directive to try anyway.
Dec 22 14:57:39 lazare smartd[1007]: Unable to register ATA device /dev/hdc at line 9 of file /etc/smartd.conf
Dec 22 14:57:39 lazare smartd[1007]: Device: /dev/hdd, opened 
Dec 22 14:57:39 lazare smartd[1007]: Device: /dev/hdd, not found in smartd database.
Dec 22 14:57:39 lazare smartd[1007]: Device: /dev/hdd, appears to lack SMART, 
use '-T permissive' Directive to try anyway.
Dec 22 14:57:39 lazare smartd[1007]: Unable to register ATA device /dev/hdd at line 9 of file /etc/smartd.conf
Dec 22 14:57:39 lazare smartd[1007]: Device: /dev/hde, no such device or address, open() failed
Dec 22 14:57:39 lazare smartd[1007]: Unable to register ATA device /dev/hde at line 9 of file etc/smartd.conf
Dec 22 14:57:39 lazare smartd[1007]: Device: /dev/hdf, No such device or address, open() failed
Dec 22 14:57:39 lazare smartd[1007]: Unable to register ATA device /dev/hdf at line 9 of file /etc/smartd.conf
Dec 22 14:57:39 lazare smartd[1007]: Device: /dev/hdg, No such device or address, open() failed 
Dec 22 14:57:39 lazare smartd[1007]: Unable to register ATA device /dev/hdg at line 9 of file /etc/smartd.conf 
Dec 22 14:57:39 lazare smartd[1007]: Device: /dev/hdh, No such device or address, open() failed 
Dec 22 14:57:39 lazare smartd[1007]: Unable to register ATA device /dev/hdh at line 9 of file /etc/smartd.conf 
Dec 22 14:57:39 lazare smartd[1007]: Device: /dev/hdi, No such device or address, open() failed 
Dec 22 14:57:39 lazare smartd[1007]: Unable to register ATA device /dev/hdi at line 9 of file /etc/smartd.conf 
Dec 22 14:57:39 lazare smartd[1007]: Device: /dev/hdj, No such device or address, open() failed 
Et ainsi de suite, jusqu'à épuisement.

Pour mettre fin à ces bavardages inutiles, une petite configuration s'impose ; elle est très simple. Au minimum, il suffit, après avoir supprimé ou commenté avec un # DEVICESCAN, d'indiquer, chacun sur sa propre ligne, les périphériques à surveiller, /dev/hda et /dev/hdb par exemple, si l'on dispose de deux disques ATA en maître et esclave sur la première interface IDE. Il ne sera pas inutile d'ajouter quelques paramètres, comme ceux-ci :

  • -d indique la catégorie du périphérique, ata ou scsi pour l'essentiel.
  • -a demande à smartd de vérifier tous les paramètres du disque. C'est le comportement par défaut.
  • il est alors conseillé de ne pas tenir compte de la température, laquelle va nécessairement changer entre chaque contrôle de smartd, et risque donc de générer des messages du style :
    Dec 23 15:07:46 lazare smartd[1384]: Device: /dev/hda,
    SMART Usage Attribute: 194 Temperature_Celsius changed from 253 to 183 
    Dec 23 15:07:47 lazare smartd[1384]: Device: /dev/hdb,
    SMART Usage Attribute: 231 Temperature_Celsius changed from 253 to 189
    Dec 23 15:37:46 lazare smartd[1384]: Device: /dev/hda,
    SMART Usage Attribute: 194 Temperature_Celsius changed from 183 to 161 
    Dec 23 15:37:46 lazare smartd[1384]: Device: /dev/hdb,
    SMART Usage Attribute: 231 Temperature_Celsius changed from 189 to 161
    Dec 23 16:07:46 lazare smartd[1384]: Device: /dev/hda,
    SMART Usage Attribute: 194 Temperature_Celsius changed from 161 to 152 
    Dec 23 16:07:47 lazare smartd[1384]: Device: /dev/hdb,
    SMART Usage Attribute: 231 Temperature_Celsius changed from 161 to 157 
    
    On s'en lasse vite. Pour demander à smartd d'ignorer ce paramètre, on utilise -I (i majuscule), suivi de l'identifiant approprié, en général, 194. Ici, /dev/hdb est un IBM DJNA datant de 1999, qui utilise l'identifiant 231.
  • Et pour centraliser les alertes d'un système complexe, -m suivi d'une adresse électronique permet de recevoir les informations pertinentes.
En somme, un fichier smartd.conf efficace peut être aussi simple que cela :
/dev/hda -d ata -a -m moi@chez.moi -I 194
/dev/hdb -d ata -a -m moi@chez.moi -I 231
Si tout était aussi facile, Linux serait beaucoup moins amusant.

la commande : smartctl

Guère plus difficile d'emploi, smartcl implique de posséder les privilèges du super-utilisateur ; la syntaxe reste classique, la commande étant suivie des options appropriées, puis de l'identification du périphérique concerné. Commençont par le commencement, avec :
smartctl -i /dev/hda
qui nous permettra d'identifier notre disque :
smartctl version 5.0-24 Copyright (C) 2002 Bruce Allen
Home page is http://smartmontools.sourceforge.net/

=== START OF INFORMATION SECTION ===
Device Model:     IC35L120AVVA07-0                        
Serial Number:    VNC605A6GG8W8A
Firmware Version: VA6OA52A
ATA Version is:   5
ATA Standard is:  ATA/ATAPI-5 T13 1321D revision 1
SMART support is: Available - device has SMART capability.
SMART support is: Enabled
Les routines SMART du disque sont actives ; on peut donc passer à l'étape suivante, la collecte des données :
smartctl -t long /dev/hda
Fort obligeamment, smartmontools traduit en langage humain la commande que l'on a lancée, et nous prévient que son exécution prendra un certain temps.
=== START OF OFFLINE IMMEDIATE AND SELF-TEST SECTION ===
Sending command: "Execute SMART Extended self-test routine immediately in off-line mode".
Drive command "Execute SMART Extended self-test routine immediately in off-line mode" successful.
Testing has begun.
Please wait 13 minutes for test to complete.
Use smartctl -X to abort test.
En fait, l'option -t lance un test qui peut connaître plusieurs valeurs : offline, qui va simplement mettre à jour les valeurs des paramètres, short, qui vérifiera en plus l'état électrique et mécanique du disque, et ajoutera une entrée dans le journal des tests du disque, long, plus approfondi, et dont la durée peut, en fonction de la taille du disque, dépasser les trente minutes, et conveyance, spécialement destiné à repérer si le disque a été endommagé durant son transport, et qui marche visiblement seulement sur du matériel très récent. Chaque type de test est mutuellement exclusif, et peut sans danger être lancé sur un équipement en cours d'utilisation.
Il ne reste plus qu'à prendre connaissance des résultats, avec l'option -l pour log. Celle-ci s'accompagne de deux attributs principaux : pour les pressés, selftest dira en une ligne si le test s'est terminé sans erreur : quant aux inquiets, error leur montrera que même un disque en parfait état connaît un petit souci de temps à autre :
smatctl -l error /dev/hda

smartctl version 5.1-18 Copyright (C) 2002-3 Bruce Allen
Home page is http://smartmontools.sourceforge.net/

=== START OF READ SMART DATA SECTION ===
SMART Error Log Version: 1
ATA Error Count: 3
        CR = Command Register [HEX]
        FR = Features Register [HEX]
        SC = Sector Count Register [HEX]
        SN = Sector Number Register [HEX]
        CL = Cylinder Low Register [HEX]
        CH = Cylinder High Register [HEX]
        DH = Device/Head Register [HEX]
        DC = Device Command Register [HEX]
        ER = Error register [HEX]
        ST = Status register [HEX]
Timestamp = decimal seconds since the previous disk power-on.
Note: timestamp "wraps" after 2^32 msec = 49.710 days.

Error 3 occurred at disk power-on lifetime: 4023 hours
  When the command that caused the error occurred, the device was active or idle.

  After command completion occurred, registers were:
  ER ST SC SN CL CH DH
  -- -- -- -- -- -- --
  40 51 05 e0 90 fe af

  Commands leading to the command that caused the error were:
  CR FR SC SN CL CH DH DC   Timestamp  Command/Feature_Name
  -- -- -- -- -- -- -- --   ---------  --------------------
  fe a2 05 e0 90 fe ef 02   27872.000  [VENDOR SPECIFIC]
  fe a1 00 00 00 00 a0 02   27872.000  [VENDOR SPECIFIC]
  fe a6 50 60 00 00 a1 02   27871.800  [VENDOR SPECIFIC]
  fe a6 50 60 00 00 a1 02   27871.600  [VENDOR SPECIFIC]
  fe a6 50 60 00 00 a1 02   27871.400  [VENDOR SPECIFIC]

Error 2 occurred at disk power-on lifetime: 4022 hours
  When the command that caused the error occurred, the device was active or idle.

  After command completion occurred, registers were:
  ER ST SC SN CL CH DH
  -- -- -- -- -- -- --
  40 51 05 e0 90 fe af

  Commands leading to the command that caused the error were:
  CR FR SC SN CL CH DH DC   Timestamp  Command/Feature_Name
  -- -- -- -- -- -- -- --   ---------  --------------------
  fe a2 05 e0 90 fe ef 02   26491.000  [VENDOR SPECIFIC]
  fe a1 00 00 00 00 a0 02   26491.000  [VENDOR SPECIFIC]
  fe a6 50 60 00 00 a1 02   26490.800  [VENDOR SPECIFIC]
  fe a6 50 60 00 00 a1 02   26490.600  [VENDOR SPECIFIC]
  fe a6 50 60 00 00 a1 02   26490.400  [VENDOR SPECIFIC]

Error 1 occurred at disk power-on lifetime: 1457 hours
  When the command that caused the error occurred, the device was active or idle.

  After command completion occurred, registers were:
  ER ST SC SN CL CH DH
  -- -- -- -- -- -- --
  40 51 05 e0 90 fe af

  Commands leading to the command that caused the error were:
  CR FR SC SN CL CH DH DC   Timestamp  Command/Feature_Name
  -- -- -- -- -- -- -- --   ---------  --------------------
  fe a2 05 e0 90 fe ef 02   15590.300  [VENDOR SPECIFIC]
  fe a1 00 00 00 00 a0 02   15590.300  [VENDOR SPECIFIC]
  fe a6 50 60 00 00 a1 02   15590.100  [VENDOR SPECIFIC]
  fe a6 50 60 00 00 a1 02   15589.900  [VENDOR SPECIFIC]
  fe a6 50 60 00 00 a1 02   15589.700  [VENDOR SPECIFIC]

Bon, trois erreurs en 4023 heures de fonctionnement, on a vu pire.

que faire quand tout va mal

Voyons, justemment, quelques exemples de disques en bien moins bon état. A tout seigneur tout honneur, commençont par un exemplaire de la fameuse série des IBM Dekstar 75GXP, qui causa tant d'angoisse chez tant d'utilisateurs, et que l'on soupçonne d'avoir conduit l'inventeur du disque dur à revendre son activité à Hitachi. Smartmontools dispose d'une option simple, -a pour all, qui permet à smartctl de recueillir toutes les informations possibles sur le disque. On peut en fournir un extrait révélateur :
smartctl -a /dev/hda


Error 663 occurred at disk power-on lifetime: 3964 hours
  When the command that caused the error occurred, the device was active or idle.

  After command completion occurred, registers were:
  ER ST SC SN CL CH DH
  -- -- -- -- -- -- --
  40 59 01 6a 35 17 e0

  Commands leading to the command that caused the error were:
  CR FR SC SN CL CH DH DC   Timestamp  Command/Feature_Name
  -- -- -- -- -- -- -- --   ---------  --------------------
  20 00 01 6a 35 17 e0 00    7845.000  READ SECTOR(S)
  10 00 01 01 ff ff a0 00    7844.900  RECALIBRATE [OBS-4]
  20 00 01 01 00 00 a0 04    7844.700  READ SECTOR(S)
  20 00 01 69 35 17 e0 00    7842.500  READ SECTOR(S)
  10 00 01 01 00 00 a0 00    7842.400  RECALIBRATE [OBS-4]

Error 662 occurred at disk power-on lifetime: 3964 hours
  When the command that caused the error occurred, the device was active or idle.

  After command completion occurred, registers were:
  ER ST SC SN CL CH DH
  -- -- -- -- -- -- --
  40 59 01 69 35 17 e0

  Commands leading to the command that caused the error were:
  CR FR SC SN CL CH DH DC   Timestamp  Command/Feature_Name
  -- -- -- -- -- -- -- --   ---------  --------------------
  20 00 01 69 35 17 e0 00    7836.700  READ SECTOR(S)
  10 00 01 01 ff ff a0 00    7836.600  RECALIBRATE [OBS-4]
  20 00 01 01 00 00 a0 04    7836.400  READ SECTOR(S)
  20 00 01 68 35 17 e0 00    7834.200  READ SECTOR(S)
  10 00 01 01 00 00 a0 00    7834.100  RECALIBRATE [OBS-4]

Error 661 occurred at disk power-on lifetime: 3964 hours
  When the command that caused the error occurred, the device was active or idle.

  After command completion occurred, registers were:
  ER ST SC SN CL CH DH
  -- -- -- -- -- -- --
  40 59 01 68 35 17 e0

  Commands leading to the command that caused the error were:
  CR FR SC SN CL CH DH DC   Timestamp  Command/Feature_Name
  -- -- -- -- -- -- -- --   ---------  --------------------
  20 00 01 68 35 17 e0 00    7828.400  READ SECTOR(S)
  10 00 01 01 ff ff a0 00    7828.300  RECALIBRATE [OBS-4]
  20 00 01 01 00 00 a0 04    7828.100  READ SECTOR(S)
  20 00 01 67 35 17 e0 00    7825.900  READ SECTOR(S)
  10 00 01 01 00 00 a0 00    7825.800  RECALIBRATE [OBS-4]

Error 660 occurred at disk power-on lifetime: 3964 hours
  When the command that caused the error occurred, the device was active or idle.

  After command completion occurred, registers were:
  ER ST SC SN CL CH DH
  -- -- -- -- -- -- --
  40 59 01 67 35 17 e0

  Commands leading to the command that caused the error were:
  CR FR SC SN CL CH DH DC   Timestamp  Command/Feature_Name
  -- -- -- -- -- -- -- --   ---------  --------------------
  20 00 01 67 35 17 e0 00    7820.100  READ SECTOR(S)
  10 00 01 01 ff ff a0 00    7820.000  RECALIBRATE [OBS-4]
  20 00 01 01 00 00 a0 04    7819.800  READ SECTOR(S)
  20 00 01 66 35 17 e0 00    7817.600  READ SECTOR(S)
  10 00 01 01 00 00 a0 00    7817.500  RECALIBRATE [OBS-4]

Error 659 occurred at disk power-on lifetime: 3964 hours
  When the command that caused the error occurred, the device was active or idle.

  After command completion occurred, registers were:
  ER ST SC SN CL CH DH
  -- -- -- -- -- -- --
  40 59 01 66 35 17 e0

  Commands leading to the command that caused the error were:
  CR FR SC SN CL CH DH DC   Timestamp  Command/Feature_Name
  -- -- -- -- -- -- -- --   ---------  --------------------
  20 00 01 66 35 17 e0 00    7811.800  READ SECTOR(S)
  10 00 01 01 ff ff a0 00    7811.700  RECALIBRATE [OBS-4]
  20 00 01 01 00 00 a0 04    7811.500  READ SECTOR(S)
  20 00 01 65 35 17 e0 00    7809.300  READ SECTOR(S)
  10 00 01 01 00 00 a0 00    7809.200  RECALIBRATE [OBS-4]
  
Seules, les cinq dernières erreurs sont détaillées par smartctl, ce qui vaut mieux, compte tenu de leur nombre. On constate qu'elles se produisent toutes au même moment, et concernent toute le recalibrage des têtes. Ceux qui en ont fait l'expérience identifieront là ce terrible grincement, signe de mort certaine pour une quantité indéterminée de données. Cela dit, pour autant, le disque n'est pas considéré comme inutilisable. Voyons donc, toujours avec la même commande, le compte-rendu de mort clinique d'un Maxtor 2B020H1 :
=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: FAILED!
Drive failure expected in less than 24 hours. SAVE ALL DATA.
See vendor-specific Attribute list for failed Attributes.

General SMART Values:
Offline data collection status:  (0x00)	Offline data collection activity was
					never started.
					Auto Offline Data Collection: Disabled.
Self-test execution status:      (  64)	The previous self-test completed having
					a test element that failed and the test
					element that failed is not known.
Total time to complete Offline 
data collection: 		 (  30) seconds.
Offline data collection
capabilities: 			 (0x1b) SMART execute Offline immediate.
					Auto Offline data collection on/off support.
					Suspend Offline collection upon new
					command.
					Offline surface scan supported.
					Self-test supported.
					No Conveyance Self-test supported.
					No Selective Self-test supported.
SMART capabilities:            (0x0003)	Saves SMART data before entering
					power-saving mode.
					Supports SMART auto save timer.
Error logging capability:        (0x01)	Error logging supported.
					No General Purpose Logging support.
Short self-test routine 
recommended polling time: 	 (   2) minutes.
Extended self-test routine
recommended polling time: 	 (  13) minutes.

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
  3 Spin_Up_Time            0x0027   234   234   063    Pre-fail  Always       -       5199
  4 Start_Stop_Count        0x0032   253   253   000    Old_age   Always       -       216
  5 Reallocated_Sector_Ct   0x0033   016   016   063    Pre-fail  Always   FAILING_NOW 598
  6 Read_Channel_Margin     0x0001   253   253   100    Pre-fail  Offline      -       0
  7 Seek_Error_Rate         0x000a   253   216   000    Old_age   Always       -       1
  8 Seek_Time_Performance   0x0027   250   241   187    Pre-fail  Always       -       64201
  9 Power_On_Hours          0x0032   253   251   000    Old_age   Always       -       154
 10 Spin_Retry_Count        0x002b   253   252   223    Pre-fail  Always       -       0
 11 Calibration_Retry_Count 0x002b   253   252   223    Pre-fail  Always       -       0
 12 Power_Cycle_Count       0x0032   251   251   000    Old_age   Always       -       811
192 Power-Off_Retract_Count 0x0032   253   253   000    Old_age   Always       -       1
193 Load_Cycle_Count        0x0032   253   253   000    Old_age   Always       -       2158
194 Temperature_Celsius     0x0032   253   253   000    Old_age   Always       -       0
195 Hardware_ECC_Recovered  0x000a   253   252   000    Old_age   Always       -       34
196 Reallocated_Event_Count 0x0008   253   253   000    Old_age   Offline      -       0
197 Current_Pending_Sector  0x0008   253   253   000    Old_age   Offline      -       0
198 Offline_Uncorrectable   0x0008   253   253   000    Old_age   Offline      -       0
199 UDMA_CRC_Error_Count    0x0008   199   199   000    Old_age   Offline      -       0
200 Multi_Zone_Error_Rate   0x000a   253   252   000    Old_age   Always       -       0
201 Soft_Read_Error_Rate    0x000a   253   249   000    Old_age   Always       -       23
202 TA_Increase_Count       0x000a   253   251   000    Old_age   Always       -       0
203 Run_Out_Cancel          0x000b   253   252   180    Pre-fail  Always       -       0
204 Shock_Count_Write_Opern 0x000a   253   252   000    Old_age   Always       -       0
205 Shock_Rate_Write_Opern  0x000a   253   252   000    Old_age   Always       -       0
207 Spin_High_Current       0x002a   253   252   000    Old_age   Always       -       0
208 Spin_Buzz               0x002a   253   252   000    Old_age   Always       -       0
209 Offline_Seek_Performnce 0x0024   253   253   000    Old_age   Offline      -       0
 99 Unknown_Attribute       0x0004   253   253   000    Old_age   Offline      -       0
100 Unknown_Attribute       0x0004   253   253   000    Old_age   Offline      -       0
101 Unknown_Attribute       0x0004   253   253   000    Old_age   Offline      -       0
Le résultat, un brin alarmiste, fournit un tableau d'ensemble des attributs mesurés, et permet d'identifier le fautif, dans la colonne WHEN_FAILED : le quota de secteurs tenus en réserve pour remplacer les secteurs défectueux est épuisé, ce qui est quand même profondément anormal sur un disque à peine vieux de plus d'un an, et signale probablement une dégradation accélérée de la surface des plateaux.
Que faire alors ? Sur le site du fabricant, télécharger son utilitaire de test, confirmer que le disque est bien hors service, noter le numéro d'erreur et suivre la procédure de retour de marchandise. Sauf exception, les disques IDE sont garantis trois ans ; d'après mon expérience, Maxtor comme Seagate assurent la réparation ou le remplacement de l'objet défectueux dans un délai de quatre semaines, sans autre frais que l'expédition du disque dans un emballage approprié, en Irlande pour Maxtor, aux Pays-Bas pour Seagate. En général, ça vaut le coup.

Denis Berger, 29 janvier 2004

SIG 11ARTICLESDOCUMENTSMEMBRESLIENS

info@sig-11.org