terça-feira, 19 de março de 2019

RAID 1 - substituir drive com mdadm

Apesar de o array não ter qualquer problema o SMART do disco indica problemas. A troca do disco é aconselhada.

Verificar o array

Para ver o estado do array:
cat /proc/mdstat

md0 : active raid1 sdb1[0] sdc1[1]
      976629760 blocks super 1.2 [2/2] [UU]
      bitmap: 0/8 pages [0KB], 65536KB chunk

Para ver os detalhes do array:
mdadm --detail /dev/md0
 /dev/md0:
        Version : 1.2
  Creation Time : Sat Jan 21 17:33:16 2017
     Raid Level : raid1
     Array Size : 976629760 (931.39 GiB 1000.07 GB)
  Used Dev Size : 976629760 (931.39 GiB 1000.07 GB)
   Raid Devices : 2
  Total Devices : 2
    Persistence : Superblock is persistent

  Intent Bitmap : Internal

    Update Time : Tue Mar 19 08:48:42 2019
          State : clean
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0

           Name : data:0  (local to host hostname)
           UUID : f047a10d:ae9c8424:c469fb59:5f6773bd
         Events : 13799

    Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1
       1       8       33        1      active sync   /dev/sdc1



Verificar erros nos discos

É possível os discos com a ferramenta  smartctl, fazendo o teste curto (cerca de 2 minutos) ou o teste longo (mais demorado):
smartctl -t short /dev/sdb
smartctl -t long /dev/sdb

Assim, apesar de o array indicar que está tudo bem, um dos disco apresenta erros nos testes SMART.
smartctl -a /dev/sdb(...)
=== START OF INFORMATION SECTION ===
Model Family:     Western Digital Green
Device Model:     WDC WD10EARX-00N0YB0
Serial Number:    WD-WMC0T0383723

(...)
SMART Self-test log structure revision number 1
Num  Test_Description    Status                  Remaining  LifeTime(hours)  LBA_of_first_error
# 1  Extended offline    Completed: read failure       90%     33281         296
# 2  Short offline       Completed: read failure       90%     33281         296
(...)

Substituir disco do array

Para substituir o disco é necessário provocar uma falha no disco:
mdadm --manage /dev/md0 --fail /dev/sdb1
mdadm: set /dev/sdb1 faulty in /dev/md0

cat /proc/mdstat
md0 : active raid1 sdb1[0](F) sdc1[1]      976629760 blocks super 1.2 [2/1] [_U]
      bitmap: 3/8 pages [12KB], 65536KB chunk


Depois é necessário remover o disco do array:
mdadm --manage /dev/md0 --remove /dev/sdb1
mdadm: hot removed /dev/sdb1 from /dev/md0

Agora é necessário:
  1. desligar a máquina;
  2. retirar o disco em falha (é possível ver o serial number com o smartctl -a para remover o disco correto);
  3. colocar o novo disco;
  4. ligar a máquina.

Como o novo disco está vazio é necessário clonar a tabela de partições do disco bom do array para o novo:


sfdisk -d /dev/sdc | sfdisk /dev/sdb
Checking that no-one is using this disk right now ... OK

Disk /dev/sdb: 931.5 GiB, 1000204886016 bytes, 1953525168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes

>>> Script header accepted.
>>> Script header accepted.
>>> Script header accepted.
>>> Script header accepted.
>>> Created a new DOS disklabel with disk identifier 0xd6ec1f12.
/dev/sdb1: Created a new partition 1 of type 'Linux raid autodetect' and of size 931.5 GiB.
/dev/sdb2: Done.

New situation:

Device     Boot Start        End    Sectors   Size Id Type
/dev/sdb1        2048 1953523711 1953521664 931.5G fd Linux raid autodetect
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.


Após esta operação pode adicionar-se o novo disco ao array:

mdadm --manage /dev/md0 --add /dev/sdb1
mdadm: added /dev/sdb1

O array inicia o processo de espelho do disco bom para o novo.

Como o processo é demorado, pode ser acompanhado com:
watch cat /proc/mdstat
md0 : active raid1 sdb1[2] sdc1[1]
      976629760 blocks super 1.2 [2/1] [_U]
      [>....................]  recovery =  1.0% (10220864/976629760) finish=122.3min speed=131660K/sec
      bitmap: 7/8 pages [28KB], 65536KB chunk



Referências:


[1] - Replacing a Failed Mirror Disk in a Software RAID Array (mdadm) - https://www.thegeekdiary.com/replacing-a-failed-mirror-disk-in-a-software-raid-array-mdadm/

[2] - mdadm cheat sheet - http://www.ducea.com/2009/03/08/mdadm-cheat-sheet/