Nous avons dans une cave, un serveur Proxmox avec un RAID5.

Un des disques est entrain de se dégrader, il serait bon de le remplacer.

Des erreurs ?

On voit dans l'interface web de Proxmox > Jimmy > Disks qu'il y a le sdc avec un statut S.M.A.R.T. FAILED !

On voit en ssh qu'il y a des erreurs avec la commande dmesg | grep sdc.

On voit aussi des erreurs sur l'écran de sortie du serveur lorsqu'on en branche un.

En détail

La commande smartctl -a /dev/sdc sortira le rapport suivant.

smartctl 7.2 2020-12-30 r5155 [x86_64-linux-5.11.22-4-pve] (local build)
Copyright (C) 2002-20, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF INFORMATION SECTION ===
Model Family:     SAMSUNG SpinPoint F3
Device Model:     SAMSUNG HD103SJ
Serial Number:    62823C741A03QO  L
LU WWN Device Id: 5 0000f0 01acbb003
Firmware Version: 1AJ10001
User Capacity:    1.000.203.804.160 bytes [1,00 TB]
Sector Size:      512 bytes logical/physical
Rotation Rate:    7200 rpm
Form Factor:      3.5 inches
Device is:        In smartctl database [for details use: -P show]
ATA Version is:   ATA8-ACS T13/1699-D revision 6
SATA Version is:  SATA 2.6, 3.0 Gb/s
Local Time is:    Wed Nov  3 07:55:46 2021 CET
SMART support is: Available - device has SMART capability.
SMART support is: Enabled

=== 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:      (   0) The previous self-test routine completed
                    without error or no self-test has ever 
                    been run.
Total time to complete Offline 
data collection:        ( 9300) seconds.
Offline data collection
capabilities:            (0x5b) 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.
                    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.
                    General Purpose Logging supported.
Short self-test routine 
recommended polling time:    (   2) minutes.
Extended self-test routine
recommended polling time:    ( 155) minutes.
SCT capabilities:          (0x003f) SCT Status supported.
                    SCT Error Recovery Control supported.
                    SCT Feature Control supported.
                    SCT Data Table supported.

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   001   001   051    Pre-fail  Always   FAILING_NOW 35051
  2 Throughput_Performance  0x0026   252   252   000    Old_age   Always       -       0
  3 Spin_Up_Time            0x0023   074   069   025    Pre-fail  Always       -       7880
  4 Start_Stop_Count        0x0032   100   100   000    Old_age   Always       -       187
  5 Reallocated_Sector_Ct   0x0033   252   252   010    Pre-fail  Always       -       0
  7 Seek_Error_Rate         0x002e   252   252   051    Old_age   Always       -       0
  8 Seek_Time_Performance   0x0024   252   252   015    Old_age   Offline      -       0
  9 Power_On_Hours          0x0032   100   100   000    Old_age   Always       -       44630
 10 Spin_Retry_Count        0x0032   252   252   051    Old_age   Always       -       0
 11 Calibration_Retry_Count 0x0032   252   252   000    Old_age   Always       -       0
 12 Power_Cycle_Count       0x0032   100   100   000    Old_age   Always       -       160
191 G-Sense_Error_Rate      0x0022   100   100   000    Old_age   Always       -       2
192 Power-Off_Retract_Count 0x0022   252   252   000    Old_age   Always       -       0
194 Temperature_Celsius     0x0002   064   054   000    Old_age   Always       -       21 (Min/Max 13/46)
195 Hardware_ECC_Recovered  0x003a   100   100   000    Old_age   Always       -       0
196 Reallocated_Event_Count 0x0032   252   252   000    Old_age   Always       -       0
197 Current_Pending_Sector  0x0032   100   100   000    Old_age   Always       -       22
198 Offline_Uncorrectable   0x0030   252   252   000    Old_age   Offline      -       0
199 UDMA_CRC_Error_Count    0x0036   200   200   000    Old_age   Always       -       0
200 Multi_Zone_Error_Rate   0x002a   100   100   000    Old_age   Always       -       38
223 Load_Retry_Count        0x0032   252   252   000    Old_age   Always       -       0
225 Load_Cycle_Count        0x0032   100   100   000    Old_age   Always       -       204

SMART Error Log Version: 1
ATA Error Count: 344 (device log contains only the most recent five errors)
    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]
Powered_Up_Time is measured from power on, and printed as
DDd+hh:mm:SS.sss where DD=days, hh=hours, mm=minutes,
SS=sec, and sss=millisec. It "wraps" after 49.710 days.

Error 344 occurred at disk power-on lifetime: 37597 hours (1566 days + 13 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 07 79 db 4b e6  Error: UNC 7 sectors at LBA = 0x064bdb79 = 105634681

  Commands leading to the command that caused the error were:
  CR FR SC SN CL CH DH DC   Powered_Up_Time  Command/Feature_Name
  -- -- -- -- -- -- -- --  ----------------  --------------------
  c8 00 08 78 db 4b e6 08      00:51:37.254  READ DMA
  ca 00 01 08 08 00 e0 08      00:51:37.254  WRITE DMA
  ea 00 00 77 db 4b e0 08      00:51:37.254  FLUSH CACHE EXT
  c8 00 08 70 db 4b e6 08      00:51:37.254  READ DMA
  c8 00 08 68 db 4b e6 08      00:51:37.254  READ DMA

Error 343 occurred at disk power-on lifetime: 37597 hours (1566 days + 13 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 27 79 da 4b e6  Error: UNC 39 sectors at LBA = 0x064bda79 = 105634425

  Commands leading to the command that caused the error were:
  CR FR SC SN CL CH DH DC   Powered_Up_Time  Command/Feature_Name
  -- -- -- -- -- -- -- --  ----------------  --------------------
  c8 00 f0 b0 da 4b e6 08      00:51:37.252  READ DMA
  c8 00 08 a0 db 4b e6 08      00:51:37.252  READ DMA
  c8 00 08 a8 da 4b e6 08      00:51:37.252  READ DMA
  c8 00 08 d0 5c 6d e6 08      00:51:37.252  READ DMA
  c8 00 08 48 3f 5e e6 08      00:51:37.252  READ DMA

Error 342 occurred at disk power-on lifetime: 37407 hours (1558 days + 15 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 07 79 db 4b e6  Error: UNC 7 sectors at LBA = 0x064bdb79 = 105634681

  Commands leading to the command that caused the error were:
  CR FR SC SN CL CH DH DC   Powered_Up_Time  Command/Feature_Name
  -- -- -- -- -- -- -- --  ----------------  --------------------
  c8 00 08 78 db 4b e6 08      00:40:13.464  READ DMA
  27 00 00 00 00 00 e0 08      00:40:13.464  READ NATIVE MAX ADDRESS EXT [OBS-ACS-3]
  ec 00 00 00 00 00 a0 08      00:40:13.464  IDENTIFY DEVICE
  ef 03 46 00 00 00 a0 08      00:40:13.464  SET FEATURES [Set transfer mode]
  27 00 00 00 00 00 e0 08      00:40:13.464  READ NATIVE MAX ADDRESS EXT [OBS-ACS-3]

Error 341 occurred at disk power-on lifetime: 37407 hours (1558 days + 15 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 0d 7b db 4b e6  Error: UNC 13 sectors at LBA = 0x064bdb7b = 105634683

  Commands leading to the command that caused the error were:
  CR FR SC SN CL CH DH DC   Powered_Up_Time  Command/Feature_Name
  -- -- -- -- -- -- -- --  ----------------  --------------------
  c8 00 18 70 db 4b e6 08      00:40:13.462  READ DMA
  c8 00 18 b8 75 53 e6 08      00:40:13.462  READ DMA
  c8 00 20 c0 4d bd e7 08      00:40:13.462  READ DMA
  c8 00 20 a0 4d bd e7 08      00:40:13.462  READ DMA
  c8 00 20 a0 75 53 e6 08      00:40:13.462  READ DMA

Error 340 occurred at disk power-on lifetime: 37237 hours (1551 days + 13 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 2f 79 db 4b e6  Error: UNC 47 sectors at LBA = 0x064bdb79 = 105634681

  Commands leading to the command that caused the error were:
  CR FR SC SN CL CH DH DC   Powered_Up_Time  Command/Feature_Name
  -- -- -- -- -- -- -- --  ----------------  --------------------
  c8 00 38 70 db 4b e6 08      00:30:01.851  READ DMA
  ca 00 20 c0 e4 12 e9 08      00:30:01.851  WRITE DMA
  ca 00 20 c0 e4 12 e9 08      00:30:01.851  WRITE DMA
  c8 00 20 40 26 14 e9 08      00:30:01.851  READ DMA
  ca 00 20 c0 e4 12 e9 08      00:30:01.851  WRITE DMA

SMART Self-test log structure revision number 1
No self-tests have been logged.  [To run self-tests, use: smartctl -t]

SMART Selective self-test log data structure revision number 0
Note: revision number not 1 implies that no selective self-test has ever been run
 SPAN  MIN_LBA  MAX_LBA  CURRENT_TEST_STATUS
    1        0        0  Completed [00% left] (0-65535)
    2        0        0  Not_testing
    3        0        0  Not_testing
    4        0        0  Not_testing
    5        0        0  Not_testing
Selective self-test flags (0x0):
  After scanning selected spans, do NOT read-scan remainder of disk.
If Selective self-test is pending on power-up, resume after 0 minute delay.

On a quoi comme disques ?

# lsblk
NAME    MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
sda       8:0    0  74,5G  0 disk  
├─sda1    8:1    0   953M  0 part  
 └─md0   9:0    0   952M  0 raid1 /boot
├─sda2    8:2    0  66,1G  0 part  
 └─md1   9:1    0  66,1G  0 raid1 /
└─sda3    8:3    0   7,5G  0 part  [SWAP]
sdb       8:16   0  74,5G  0 disk  
├─sdb1    8:17   0   953M  0 part  
 └─md0   9:0    0   952M  0 raid1 /boot
├─sdb2    8:18   0  66,1G  0 part  
 └─md1   9:1    0  66,1G  0 raid1 /
└─sdb3    8:19   0   7,5G  0 part  [SWAP]
sdc       8:32   0 931,5G  0 disk  
└─md127   9:127  0   1,8T  0 raid5 /var/lib/pve-raid
sdd       8:48   0 931,5G  0 disk  
└─md127   9:127  0   1,8T  0 raid5 /var/lib/pve-raid
sde       8:64   0 931,5G  0 disk  
└─md127   9:127  0   1,8T  0 raid5 /var/lib/pve-raid
sdf       8:80   0   5,5T  0 disk  
└─sdf1    8:81   0   5,5T  0 part  

Dans quel état est le RAID5 ?

# mdadm --detail /dev/md127
/dev/md127:
           Version : 1.2
     Creation Time : Wed Sep  1 11:07:03 2021
        Raid Level : raid5
        Array Size : 1953258496 (1862.77 GiB 2000.14 GB)
     Used Dev Size : 976629248 (931.39 GiB 1000.07 GB)
      Raid Devices : 3
     Total Devices : 3
       Persistence : Superblock is persistent

     Intent Bitmap : Internal

       Update Time : Wed Nov  3 08:13:51 2021
             State : clean 
    Active Devices : 3
   Working Devices : 3
    Failed Devices : 0
     Spare Devices : 0

            Layout : left-symmetric
        Chunk Size : 512K

Consistency Policy : bitmap

              Name : pve:31
              UUID : 91d5e8bf:b3cc96f6:90b67181:1cf6eae6
            Events : 11203

    Number   Major   Minor   RaidDevice State
       0       8       32        0      active sync   /dev/sdc
       1       8       48        1      active sync   /dev/sdd
       3       8       64        2      active sync   /dev/sde

Le disque sdc est entrain de faillir mais il n'est pas encore sorti du RAID.

Enlever le disque du RAID

Même si le disque sdc semble encore actif et fonctionnel du point de vue du RAID, ça vaut la peine de le remplacer avant qu'il ne cause des problèmes.

mdadm --manage /dev/md127 --set-faulty /dev/sdc
mdadm --manage /dev/md127 --remove /dev/sdc

Vérifier l'état du RAID

/dev/md127:
           Version : 1.2
     Creation Time : Wed Sep  1 11:07:03 2021
        Raid Level : raid5
        Array Size : 1953258496 (1862.77 GiB 2000.14 GB)
     Used Dev Size : 976629248 (931.39 GiB 1000.07 GB)
      Raid Devices : 3
     Total Devices : 2
       Persistence : Superblock is persistent

     Intent Bitmap : Internal

       Update Time : Wed Nov  3 08:45:59 2021
             State : clean, degraded 
    Active Devices : 2
   Working Devices : 2
    Failed Devices : 0
     Spare Devices : 0

            Layout : left-symmetric
        Chunk Size : 512K

Consistency Policy : bitmap

              Name : pve:31
              UUID : 91d5e8bf:b3cc96f6:90b67181:1cf6eae6
            Events : 11316

    Number   Major   Minor   RaidDevice State
       -       0        0        0      removed
       1       8       48        1      active sync   /dev/sdd
       3       8       64        2      active sync   /dev/sde

Il est clean mais dégradé.

Ne pas monter le RAID lors du reboot

Surtout si on a pas accès physiquement à la machine, il faut commenter dans le fstab la ligne du RAID concerné (pve-raid dans ce cas-ci), sans quoi lors du reboot, on aura juste une invite pour se connecter à un terminal sans réseau.

# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# systemd generates mount units based on this file, see systemd.mount(5).
# Please run 'systemctl daemon-reload' after making changes here.
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
# / was on /dev/md1 during installation
UUID=c5cfa061-8479-4753-b2fa-9ebe1a18aa61 /               ext4    errors=remount-ro 0       1
# /boot was on /dev/md0 during installation
UUID=4e9f2a5e-b4cd-4b28-9ad5-cdf3797c8792 /boot           ext2    defaults        0       2
# swap was on /dev/sda3 during installation
UUID=fedb0ed8-bf6d-4ab8-8059-e49e178cba13 none            swap    sw              0       0
# swap was on /dev/sdb3 during installation
UUID=12fdf638-e77b-4d70-acf8-a2d8b1921371 none            swap    sw              0       0
# ext4 on raid5
#UUID=96a046c8-764a-4712-8d09-d60e42e14f30 /var/lib/pve-raid    ext4    defaults    0   3

Et on peut éteindre la machine.

Remplacement du disque physique

Ce n'est pas une machine qui supporte le remplacement à chaud des disques durs, et il faut danc l'éteindre avant de changer le disque.

Au début, la commande smartctl -a /dev/sdc nous renseigne la marque, le modèle et le numéro de série du disque.


Model Family:     SAMSUNG SpinPoint F3
Device Model:     SAMSUNG HD103SJ
Serial Number:    62823C741A03QO  L�

Ça sera utile pour être certain·e de remplacer le bon disque et pas un autre.

Après reboot

Vérifions la liste de block devices avec lsblk

```root@jimmy:/home/zebras# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 74,5G 0 disk
├─sda1 8:1 0 953M 0 part
│ └─md0 9:0 0 952M 0 raid1 /boot ├─sda2 8:2 0 66,1G 0 part
│ └─md1 9:1 0 66,1G 0 raid1 / └─sda3 8:3 0 7,5G 0 part [SWAP] sdb 8:16 0 74,5G 0 disk
├─sdb1 8:17 0 953M 0 part
│ └─md0 9:0 0 952M 0 raid1 /boot ├─sdb2 8:18 0 66,1G 0 part
│ └─md1 9:1 0 66,1G 0 raid1 / └─sdb3 8:19 0 7,5G 0 part [SWAP] sdc 8:32 0 931,5G 0 disk
sdd 8:48 0 931,5G 0 disk
└─md127 9:127 0 1,8T 0 raid5 sde 8:64 0 931,5G 0 disk
└─md127 9:127 0 1,8T 0 raid5 sdf 8:80 0 5,5T 0 disk
└─sdf1 8:81 0 5,5T 0 part

Pour être certain·e que le disque remplacé soit bien `/dve/sdc` et pas un autre.  Ici on voit bien qu'il est « seul » et qu'il n'y a pas de RAID dessus.

On peut aussi vérifier ça avec `smartctl -a /dev/sdc` pour retrouver la marque, le modèle et autres infos qui doivent correspondre au nouveau disque.

smartctl -a /dev/sdc

smartctl 7.2 2020-12-30 r5155 [x86_64-linux-5.11.22-4-pve] (local build) Copyright (C) 2002-20, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF INFORMATION SECTION === Model Family: Western Digital Black Device Model: WDC WD1003FZEX-00K3CA0 Serial Number: WD-WCC6Y6PVKFJ5 …

## Préparer le nouveau disque

Nous avons l'habitude de travailler avec du matériel de récupération et c'est donc plus prudent de nettoyer un peu avant d'utiliser.

fdisk -l /dev/sdc

Disque /dev/sdc : 931,51 GiB, 1000204886016 octets, 1953525168 secteurs Modèle de disque : WDC WD1003FZEX-0 Unités : secteur de 1 × 512 = 512 octets Taille de secteur (logique / physique) : 512 octets / 4096 octets taille d'E/S (minimale / optimale) : 4096 octets / 4096 octets Type d'étiquette de disque : dos Identifiant de disque : 0xeb750b58

Bon, il n'y a pas de partition mais tout de même une étiquette « dos ».  On va effacer la table de partition avec `wipefs`.

wipefs -a -f /dev/sdc

/dev/sdc : 2 octets ont été effacés à l'index 0x000001fe (dos) : 55 aa

Maintenant il est tout propre.

fdisk -l /dev/sdc

Disque /dev/sdc : 931,51 GiB, 1000204886016 octets, 1953525168 secteurs Modèle de disque : WDC WD1003FZEX-0 Unités : secteur de 1 × 512 = 512 octets Taille de secteur (logique / physique) : 512 octets / 4096 octets taille d'E/S (minimale / optimale) : 4096 octets / 4096 octets

## Ajout du nouveau disque dans le RAID

Maintenant que le disque est propre, qu'en plus il a la même taille que les deux autres membres du RAID et qu'en plus on utilise **tout le disque** sans faire de partition, c'est simple et efficace.

mdadm --manage /dev/md127 --add /dev/sdc

mdadm: added /dev/sdc

Et on vérifier l'état du md127.

mdadm -D /dev/md127

/dev/md127: Version : 1.2 Creation Time : Wed Sep 1 11:07:03 2021 Raid Level : raid5 Array Size : 1953258496 (1862.77 GiB 2000.14 GB) Used Dev Size : 976629248 (931.39 GiB 1000.07 GB) Raid Devices : 3 Total Devices : 3 Persistence : Superblock is persistent

 Intent Bitmap : Internal

   Update Time : Wed Nov  3 09:54:40 2021
         State : clean, degraded, recovering 
Active Devices : 2

Working Devices : 3 Failed Devices : 0 Spare Devices : 1

        Layout : left-symmetric
    Chunk Size : 512K

Consistency Policy : bitmap

Rebuild Status : 0% complete

          Name : pve:31
          UUID : 91d5e8bf:b3cc96f6:90b67181:1cf6eae6
        Events : 11545

Number   Major   Minor   RaidDevice State
   4       8       32        0      spare rebuilding   /dev/sdc
   1       8       48        1      active sync   /dev/sdd
   3       8       64        2      active sync   /dev/sde
Et on peut même voir où ça en est en terme de progession…

root@jimmy:/home/zebras# cat /proc/mdstat Personalities : [raid1] [raid6] [raid5] [raid4] [linear] [multipath] [raid0] [raid10] md1 : active raid1 sdb2[1] sda2[0] 69269504 blocks super 1.2 [2/2] [UU]

md0 : active raid1 sda1[0] sdb1[1] 974848 blocks super 1.2 [2/2] [UU]

md127 : active raid5 sdc[4] sdd[1] sde[3] 1953258496 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [_UU] [>....................] recovery = 1.1% (11149244/976629248) finish=206.1min speed=78055K/sec bitmap: 5/8 pages [20KB], 65536KB chunk

unused devices:

Plus qu'a attendre quelques heures pour retrouver les performances sur le serveur, avoir à nouveau 3 disques dans le RAID5 et être tranquille jusqu'à la prochaine fois.

## Décommenter la fstab

Pour rappel, on avait commenté la ligne du pve-raid dans notre `fstab` et il faut, évidemment, la décommenter.

root@jimmy:/home/zebras# cat /etc/fstab

/etc/fstab: static file system information.

Use 'blkid' to print the universally unique identifier for a

device; this may be used with UUID= as a more robust way to name devices

that works even if disks are added and removed. See fstab(5).

systemd generates mount units based on this file, see systemd.mount(5).

Please run 'systemctl daemon-reload' after making changes here.

/ was on /dev/md1 during installation

UUID=c5cfa061-8479-4753-b2fa-9ebe1a18aa61 / ext4 errors=remount-ro 0 1

/boot was on /dev/md0 during installation

UUID=4e9f2a5e-b4cd-4b28-9ad5-cdf3797c8792 /boot ext2 defaults 0 2

swap was on /dev/sda3 during installation

UUID=fedb0ed8-bf6d-4ab8-8059-e49e178cba13 none swap sw 0 0

swap was on /dev/sdb3 during installation

UUID=12fdf638-e77b-4d70-acf8-a2d8b1921371 none swap sw 0 0

ext4 on raid5

UUID=96a046c8-764a-4712-8d09-d60e42e14f30 /var/lib/pve-raid ext4 defaults 0 3

## Remonter le raid

mount -a

```

Ben oui, rien de plus.

Relancer les VMS

J'hésite à attendre que le rebuild du raid5 soit terminé avant de relancer les machines virtuelles parce qu'elle seront super lentes, mais en même temps, c'est un chouette stress test.

Allors, hop ! Un petit tour dans l'interface web de Proxomx pour aller cliquer sur les boutons start des quatre VMS actuellement hébergées sur Jimmy.