Замена диска в mdadm


Tagged , , , ,

Давече сработал алерт, что на одном из серверов в селектеле RAID поломался.

Зашел на сервер, глянул mdadm —detail /dev/md1 и увидел, что один из дисков пропал. /dev/sda работает корректно и продолжает держать строй. Посмотрел smartctl -i /dev/sdb, у поломанного диска, в ответ отказ. Значит точно с ним все плохо. Создал тикет по замене диска в поддержку.

Поддержка отработал отлично, попросили данные о живом диске ( smartctl -i /dev/sda) и сказали что в течении часа заменят. Договорились о начале работ.

После того как диск поменяли и запустили сервер, поддержка отчиталась что все хорошо, диск заменен и работает. Посмотрел на сервере, диск есть, инфу возвращает, но он чистый и не пренадлежит RAID. Спросил у поддержки, самому мне его добавлять или они справятся, на что ответили что они отвечают только за железо, а дальше как хотите.

Что ж, не беда. Погуглил) Понял как добавить диск. Итак начинаем, умеем.

# lsblk 
NAME           MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
sda              8:0    0 447.1G  0 disk  
├─sda1           8:1    0     1M  0 part  
├─sda2           8:2    0   977M  0 part  
│ └─md0          9:0    0   976M  0 raid1 /boot
└─sda3           8:3    0 446.2G  0 part  
  └─md1          9:1    0 446.1G  0 raid1 
    └─vg0-root 253:0    0   446G  0 lvm   /
sdb              8:16   0 447.1G  0 disk
# mdadm --detail /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Tue Nov  5 18:15:20 2019
        Raid Level : raid1
        Array Size : 999424 (976.00 MiB 1023.41 MB)
     Used Dev Size : 999424 (976.00 MiB 1023.41 MB)
      Raid Devices : 2
     Total Devices : 1
       Persistence : Superblock is persistent

       Update Time : Thu Jan 23 12:47:05 2025
             State : clean, degraded 
    Active Devices : 1
   Working Devices : 1
    Failed Devices : 0
     Spare Devices : 0

Consistency Policy : resync

              Name : Litleo:0  (local to host Litleo)
              UUID : 452ac8fd:9ca6ed27:3dad65bc:59ba198a
            Events : 247

    Number   Major   Minor   RaidDevice State
       0       8        2        0      active sync   /dev/sda2
       -       0        0        1      removed

Убедился что разметка GPT, скомандовав fdisk -l /dev/sda. Далее дампим таблицу разметки (партиций) с живого диска в файл table.bin.

# sgdisk --backup=table.bin /dev/sda

Накатываем этот дамп на новый диск

# sgdisk --load-backup=table.bin /dev/sdb

Генерируем новый Disk Identifier для новог диска

# sgdisk -G /dev/sdb

Убеждаемся что разметка в точности как в sda

# fdisk -l /dev/sda /dev/sdb
Disk /dev/sda: 447.13 GiB, 480103981056 bytes, 937703088 sectors
Disk model: KINGSTON SA400S3
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: EDCA112F-88BB-4F8E-8A6F-06D726DDEEBF

Device       Start       End   Sectors   Size Type
/dev/sda1     2048      4095      2048     1M BIOS boot
/dev/sda2     4096   2004991   2000896   977M Linux RAID
/dev/sda3  2004992 937701375 935696384 446.2G Linux RAID

Disk /dev/sdb: 447.13 GiB, 480103981056 bytes, 937703088 sectors
Disk model: CT480BX500SSD1  
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: EA67925F-A0AE-4CE8-85F8-4B3181B5B8BB

Device       Start       End   Sectors   Size Type
/dev/sdb1     2048      4095      2048     1M BIOS boot
/dev/sdb2     4096   2004991   2000896   977M Linux RAID
/dev/sdb3  2004992 937701375 935696384 446.2G Linux RAID

Теперь осталось связать разделы в RAID 1, для этого командуем

# mdadm /dev/md0 -a /dev/sdb2
mdadm: added /dev/sdb2

И проверяем что рейд собрался для раздела:

# mdadm --detail /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Tue Nov  5 18:15:20 2019
        Raid Level : raid1
        Array Size : 999424 (976.00 MiB 1023.41 MB)
     Used Dev Size : 999424 (976.00 MiB 1023.41 MB)
      Raid Devices : 2
     Total Devices : 2
       Persistence : Superblock is persistent

       Update Time : Thu Jan 23 13:16:46 2025
             State : clean 
    Active Devices : 2
   Working Devices : 2
    Failed Devices : 0
     Spare Devices : 0

Проделываем тоже самое для второго раздела:

# mdadm /dev/md1 -a /dev/sdb3
mdadm: added /dev/sdb3

И проверяем

mdadm --detail /dev/md1
/dev/md1:
           Version : 1.2
     Creation Time : Tue Nov  5 18:15:20 2019
        Raid Level : raid1
        Array Size : 467716096 (446.05 GiB 478.94 GB)
     Used Dev Size : 467716096 (446.05 GiB 478.94 GB)
      Raid Devices : 2
     Total Devices : 2
       Persistence : Superblock is persistent

     Intent Bitmap : Internal

       Update Time : Thu Jan 23 13:17:26 2025
             State : clean, degraded, recovering 
    Active Devices : 1
   Working Devices : 2
    Failed Devices : 0
     Spare Devices : 1

Consistency Policy : bitmap

    Rebuild Status : 0% complete

              Name : Litleo:1  (local to host Litleo)
              UUID : 5ac32b62:688303c5:d8d47f8c:8af6f6b0
            Events : 74406

    Number   Major   Minor   RaidDevice State
       0       8        3        0      active sync   /dev/sda3
       2       8       19        1      spare rebuilding   /dev/sdb3

Все, рейд собран обратно, проверяем стату

# cat /proc/mdstat 
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10] 
md1 : active raid1 sdb3[2] sda3[0]
      467716096 blocks super 1.2 [2/1] [U_]
      [>....................]  recovery =  0.7% (3614400/467716096) finish=95.0min speed=81393K/sec
      bitmap: 4/4 pages [16KB], 65536KB chunk

md0 : active raid1 sdb2[2] sda2[0]
      999424 blocks super 1.2 [2/2] [UU]

Процесс синхронизации md1 идет полным ходом. На этом все, ждем когда закончится и поздравляем себя, что все прошло удачно.

Делаем из этого еще один вывод: Обязательно нужно иметь средства мониторинга серверов + систему оповещений. Если бы не алерт, фиг знает когда бы я узнал что рейд деградировал.

На серверах стоит node_exporter + настроены vicroriametrics и алерты

Share:

No comments

RSS / trackback

Respond