Если инфорация оказалась интересна и/или полезна, не побрезгуйте, оставьте комментарий ;)

пятница, 5 февраля 2021 г.

Маленькая практическая задача. Отслеживание состояния RAID-группы на домашнем сервере и определение неисправного диска

На домашнем Микросервере вышел из строя диск в RAID-группе. Надо менять. В связи с этим есть две практические задачи. Следить за дисками, живые или нет. И если какой-то вышел, определить его положение в дисковой корзине и заменить.

Первая задачи у меня решена коротким скриптом

microserver:~$ cat ./raidstat.sh
#!/bin/bash
sudo mdadm --detail /dev/md0
df -m
Первая строка выводит информацию о состоянии RAID-группы, вторая - о заполненности файловой системы. Завел себе правило, когда захожу в консоль сервера, запускаю этот скрипт. Никакой автоматизации не делал. Вывод такой. Выделил блоки, где виден сбой:

microserver:~$ ./raidstat.sh 
/dev/md0:
           Version : 1.2
     Creation Time : Wed May 22 22:10:40 2013
        Raid Level : raid5
        Array Size : 5860268032 (5588.79 GiB 6000.91 GB)
     Used Dev Size : 2930134016 (2794.39 GiB 3000.46 GB)
      Raid Devices : 3
     Total Devices : 3
       Persistence : Superblock is persistent

       Update Time : Thu Feb  4 11:42:05 2021
             State : clean, degraded 
    Active Devices : 2
   Working Devices : 2
    Failed Devices : 1
     Spare Devices : 0

            Layout : left-symmetric
        Chunk Size : 512K

Consistency Policy : resync

              Name : microserver:0  (local to host microserver)
              UUID : f59e4ccb:ed0f8a61:38615829:f568d153
            Events : 1913644

    Number   Major   Minor   RaidDevice State
       -       0        0        0      removed
       1       8       33        1      active sync   /dev/sdc1
       3       8       49        2      active sync   /dev/sdd1

       4       8       17        -      faulty   /dev/sdb1
Файл.система        1M-блоков Использовано Доступно Использовано% Cмонтировано в
udev                     1843            0     1843            0% /dev
tmpfs                     381            3      379            1% /run
/dev/sda1              149222         9412   132207            7% /
tmpfs                    1905            0     1905            0% /dev/shm
tmpfs                       5            0        5            0% /run/lock
tmpfs                    1905            0     1905            0% /sys/fs/cgroup
/dev/mapper/vg1-lv3   1004294       596747   407547           60% /media/timemachine
/dev/mapper/vg1-lv1   3096240      1529782  1566443           50% /media/archive
/dev/mapper/vg1-lv2   1572864       591490   543002           53% /media/data
tmpfs                     381            0      381            0% /run/user/1000

Из вывода команды знаем, что сбойный у нас диск по пути /dev/sdb. Теперь определяем, какой это диск:

microserver:~$ lsblk -S
NAME HCTL       TYPE VENDOR   MODEL                 REV TRAN
sda  0:0:0:0    disk ATA      VB0160EAVEQ          HPG0 sata
sdb  1:0:0:0    disk ATA      WDC_WD30EFRX-68EUZN0 0A82 sata
sdc  3:0:0:0    disk ATA      TOSHIBA_DT01ACA300   ABB0 sata
sdd  4:0:0:0    disk ATA      TOSHIBA_DT01ACA300   ABB0 sata

Диск во втором отсеке дисковой корзины. Кроме того, мы знаем его модель и производителя - Western Digital WD30EFRX

Честно сказать, испытываю волнение. Этот диск - уже замена когда-то выходившему из строя. То есть два живых TOSHIBA - старше сломанного. Надеюсь RAID успеет пересобраться прежде, чем еще один выйдет из строя. Надо думать о РК.

Обновление. Добавлю для памятки еще команды для запуска пересборки RAID-группы

Предполагаем, что сервер/компьютер мы выключили, диски заменили. Он распознался по старому адресу.На всякий случай проверяем командой lsblk -S. Далее надо инициализировать диски и добавить его в RAID-группу. Инициализируем (создаем таблицу разделов) командой gdisk (как я понимаю, наследник fdisk). Комменировать не буду. Всё просто - создали, записали. Диск разбивать на разделы не надо, поэтому при создании раздела везде нажимаем Enter:


microserver:~$ sudo gdisk /dev/sdb
GPT fdisk (gdisk) version 1.0.5

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present

Found valid GPT with protective MBR; using GPT.

Command (? for help): n
Partition number (1-128, default 1): 
First sector (34-5860533134, default = 2048) or {+-}size{KMGTP}: 
Last sector (2048-5860533134, default = 5860533134) or {+-}size{KMGTP}: 
Current type is 8300 (Linux filesystem)
Hex code or GUID (L to show codes, Enter = 8300): 
Changed type of partition to 'Linux filesystem'

Command (? for help): p
Disk /dev/sdb: 5860533168 sectors, 2.7 TiB
Model: WDC WD30EFAX-68J
Sector size (logical/physical): 512/4096 bytes
Disk identifier (GUID): B0121851-F22D-48E4-B78E-8985B4C6AC6C
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 5860533134
Partitions will be aligned on 2048-sector boundaries
Total free space is 2014 sectors (1007.0 KiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048      5860533134   2.7 TiB     8300  Linux filesystem

Command (? for help): w

Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!

Do you want to proceed? (Y/N): y
OK; writing new GUID partition table (GPT) to /dev/sdb.
The operation has completed successfully
Важно, чтобы инициализировался полный объем диска. fdisk больше 2 ТБ не видит (возможно, нужны спецключи). Дальше проверяем, что раздел увиделся:

microserver:~$ lsblk 
NAME          MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
sda             8:0    0 149,1G  0 disk  
├─sda1          8:1    0 148,2G  0 part  /
├─sda2          8:2    0     1K  0 part  
└─sda5          8:5    0   894M  0 part  [SWAP]
sdb             8:16   0   2,7T  0 disk  
└─sdb1          8:17   0   2,7T  0 part  
sdc             8:32   0   2,7T  0 disk  
└─sdc1          8:33   0   2,7T  0 part  
  └─md0         9:0    0   5,5T  0 raid5 
    ├─vg1-lv1 253:0    0     3T  0 lvm   
    ├─vg1-lv2 253:1    0   1,5T  0 lvm   
    └─vg1-lv3 253:2    0 980,8G  0 lvm   
sdd             8:48   0   2,7T  0 disk  
└─sdd1          8:49   0   2,7T  0 part  
  └─md0         9:0    0   5,5T  0 raid5 
    ├─vg1-lv1 253:0    0     3T  0 lvm   
    ├─vg1-lv2 253:1    0   1,5T  0 lvm   
    └─vg1-lv3 253:2    0 980,8G  0 lvm
И добавляем диск в RAID.

microserver:~$ sudo mdadm /dev/md0 --add /dev/sdb1
mdadm: added /dev/sdb
Восстановление пойдет само. За процессом можно наблюдать по процентам Rebuild Status:

microserver:~$ sudo mdadm -D /dev/md0 
/dev/md0:
           Version : 1.2
     Creation Time : Wed May 22 22:10:40 2013
        Raid Level : raid5
        Array Size : 5860268032 (5588.79 GiB 6000.91 GB)
     Used Dev Size : 2930134016 (2794.39 GiB 3000.46 GB)
      Raid Devices : 3
     Total Devices : 3
       Persistence : Superblock is persistent

       Update Time : Sun Feb  7 00:39:07 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 : resync

    Rebuild Status : 0% complete

              Name : microserver:0  (local to host microserver)
              UUID : f59e4ccb:ed0f8a61:38615829:f568d153
            Events : 1913658

    Number   Major   Minor   RaidDevice State
       4       8       16        0      spare rebuilding   /dev/sdb1
       1       8       33        1      active sync   /dev/sdc1
       3       8       49        2      active sync   /dev/sdd1

Остается только переживать за то, что восстановление завершиться до того, как еще один диск выйдет из строя.

На 26% ушел спать... 2021-02-07 03:05

microserver:/media/archive$ sudo mdadm -D /dev/md0 
/dev/md0:
           Version : 1.2
     Creation Time : Wed May 22 22:10:40 2013
        Raid Level : raid5
        Array Size : 5860268032 (5588.79 GiB 6000.91 GB)
     Used Dev Size : 2930134016 (2794.39 GiB 3000.46 GB)
      Raid Devices : 3
     Total Devices : 3
       Persistence : Superblock is persistent

       Update Time : Sun Feb  7 02:59:12 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 : resync

    Rebuild Status : 26% complete

              Name : microserver:0  (local to host microserver)
              UUID : f59e4ccb:ed0f8a61:38615829:f568d153
            Events : 1913736

    Number   Major   Minor   RaidDevice State
       4       8       16        0      spare rebuilding   /dev/sdb1
       1       8       33        1      active sync   /dev/sdc1
       3       8       49        2      active sync   /dev/sdd1

Продолжение. Помните о резервной копии данных! Когда что-то пошло не так...

После очередного перезапуска сервера вместо своего RAID5 получил вот такую картину (по идее, это всё та же группа из 3 дисков в RAID5):

microserver:~$ sudo mdadm -D /dev/md0 
/dev/md0:
           Version : 1.2
        Raid Level : raid0
     Total Devices : 2
       Persistence : Superblock is persistent

             State : inactive
   Working Devices : 2

              Name : microserver:0  (local to host microserver)
              UUID : f59e4ccb:ed0f8a61:38615829:f568d153
            Events : 1914527

    Number   Major   Minor   RaidDevice

       -       8       49        -        /dev/sdd1
       -       8       33        -        /dev/sdc1
Короче, RAID-группу вроде как распалась.
microserver:~$ cat /proc/mdstat 
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] 
md0 : inactive sdd1[3](S) sdc1[5](S)
      5860268943 blocks super 1.2
       
unused devices: <none>
  
microserver:~$ sudo mdadm -E /dev/sd*1 |grep Event
mdadm: No md superblock detected on /dev/sda1.
mdadm: No md superblock detected on /dev/sdb1.
         Events : 1914527
         Events : 1914527
sdb1 - "потерянный" диск.

Вариант 1. Что-то случилось с /etc/mdadm/mdadm.conf. В этом случае можно обойтись командой

microserver:~$ sudo mdadm --examine --scan >> /etc/mdadm/mdadm.conf
Можно вначале вывести результат выполнения на экран, а потом самостоятельно текстовым редактором записать в /etc/mdadm/mdadm.conf. Так вы будете знать, что пишите. В моем случае строка не отличалась от той, что была в /etc/mdadm/mdadm.conf, только массив назывался /dev/md/0 вместо /dev/md0
microserver:~$ sudo mdadm --examine --scan
ARRAY /dev/md/0  metadata=1.2 UUID=f59e4ccb:ed0f8a61:38615829:f568d153 name=microserver:0
Очевидно, что обновление /etc/mdadm/mdadm.conf не помогло бы.

Вариант 2. Поэтому я заново добавил их в старую RAID-группу

microserver:~$ sudo mdadm --stop /dev/md0 
mdadm: stopped /dev/md0
microserver:~$ sudo mdadm -A --force /dev/md0 /dev/sdb1 /dev/sdc1 /dev/sdd1
mdadm: Cannot assemble mbr metadata on /dev/sdb
mdadm: /dev/sdb has no superblock - assembly aborted
Тогда я повторил команду для двух "хороших" дисков:
microserver:~$ sudo mdadm -A --force /dev/md0 /dev/sdc1 /dev/sdd1
mdadm: /dev/md0 has been started with 2 drives (out of 3).

И о чудо, группа собралась, и даже данные остались на месте:

microserver:~$ sudo mdadm -D /dev/md0 
/dev/md0:
           Version : 1.2
     Creation Time : Wed May 22 22:10:40 2013
        Raid Level : raid5
        Array Size : 5860268032 (5588.79 GiB 6000.91 GB)
     Used Dev Size : 2930134016 (2794.39 GiB 3000.46 GB)
      Raid Devices : 3
     Total Devices : 2
       Persistence : Superblock is persistent

       Update Time : Fri Feb 12 21:56:11 2021
             State : clean, degraded 
    Active Devices : 2
   Working Devices : 2
    Failed Devices : 0
     Spare Devices : 0

            Layout : left-symmetric
        Chunk Size : 512K

Consistency Policy : resync

              Name : microserver:0  (local to host microserver)
              UUID : f59e4ccb:ed0f8a61:38615829:f568d153
            Events : 1914527

    Number   Major   Minor   RaidDevice State
       -       0        0        0      removed
       5       8       33        1      active sync   /dev/sdc1
       3       8       49        2      active sync   /dev/sdd1

После этого я удалил и заново создал раздел на "плохом" диске

microserver:~$ sudo gdisk /dev/sdb
GPT fdisk (gdisk) version 1.0.5

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present

Found valid GPT with protective MBR; using GPT.

Command (? for help): p
Disk /dev/sdb: 5860533168 sectors, 2.7 TiB
Model: WDC WD30EFAX-68J
Sector size (logical/physical): 512/4096 bytes
Disk identifier (GUID): B0121851-F22D-48E4-B78E-8985B4C6AC6C
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 5860533134
Partitions will be aligned on 2048-sector boundaries
Total free space is 2014 sectors (1007.0 KiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048      5860533134   2.7 TiB     8300  Linux filesystem

Command (? for help): d
Using 1

Command (? for help): n
Partition number (1-128, default 1): 
First sector (34-5860533134, default = 2048) or {+-}size{KMGTP}: 
Last sector (2048-5860533134, default = 5860533134) or {+-}size{KMGTP}: 
Current type is 8300 (Linux filesystem)
Hex code or GUID (L to show codes, Enter = 8300): 
Changed type of partition to 'Linux filesystem'

Command (? for help): w

Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!

Do you want to proceed? (Y/N): y
OK; writing new GUID partition table (GPT) to /dev/sdb.
The operation has completed successfully.
После этого заново добавил его в группу:
microserver:~$ sudo mdadm /dev/md0 --add /dev/sdb1 
mdadm: added /dev/sdb1
microserver:~$ sudo mdadm -D /dev/md0 
/dev/md0:
           Version : 1.2
     Creation Time : Wed May 22 22:10:40 2013
        Raid Level : raid5
        Array Size : 5860268032 (5588.79 GiB 6000.91 GB)
     Used Dev Size : 2930134016 (2794.39 GiB 3000.46 GB)
      Raid Devices : 3
     Total Devices : 3
       Persistence : Superblock is persistent

       Update Time : Sat Feb 13 16:46:54 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 : resync

    Rebuild Status : 0% complete

              Name : microserver:0  (local to host microserver)
              UUID : f59e4ccb:ed0f8a61:38615829:f568d153
            Events : 1914529

    Number   Major   Minor   RaidDevice State
       4       8       17        0      spare rebuilding   /dev/sdb1
       5       8       33        1      active sync   /dev/sdc1
       3       8       49        2      active sync   /dev/sdd1

Так выглядят диски и группа сейчас:

microserver:~$ sudo mdadm -Db /dev/md0 
ARRAY /dev/md0 metadata=1.2 spares=1 name=microserver:0 UUID=f59e4ccb:ed0f8a61:38615829:f568d153


microserver:~$ lsblk 
NAME          MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
sda             8:0    0 149,1G  0 disk  
├─sda1          8:1    0 148,2G  0 part  /
├─sda2          8:2    0     1K  0 part  
└─sda5          8:5    0   894M  0 part  [SWAP]
sdb             8:16   0   2,7T  0 disk  
└─sdb1          8:17   0   2,7T  0 part  
  └─md0         9:0    0   5,5T  0 raid5 
    ├─vg1-lv1 253:0    0     3T  0 lvm   /media/archive
    ├─vg1-lv2 253:1    0   1,5T  0 lvm   
    └─vg1-lv3 253:2    0 980,8G  0 lvm   
sdc             8:32   0   2,7T  0 disk  
└─sdc1          8:33   0   2,7T  0 part  
  └─md0         9:0    0   5,5T  0 raid5 
    ├─vg1-lv1 253:0    0     3T  0 lvm   /media/archive
    ├─vg1-lv2 253:1    0   1,5T  0 lvm   
    └─vg1-lv3 253:2    0 980,8G  0 lvm   
sdd             8:48   0   2,7T  0 disk  
└─sdd1          8:49   0   2,7T  0 part  
  └─md0         9:0    0   5,5T  0 raid5 
    ├─vg1-lv1 253:0    0     3T  0 lvm   /media/archive
    ├─vg1-lv2 253:1    0   1,5T  0 lvm   
    └─vg1-lv3 253:2    0 980,8G  0 lvm


microserver:~$ lsblk -S
NAME HCTL       TYPE VENDOR   MODEL                 REV TRAN
sda  1:0:0:0    disk ATA      VB0160EAVEQ          HPG0 sata
sdb  3:0:0:0    disk ATA      WDC_WD30EFAX-68JH4N0 0A82 sata
sdc  4:0:0:0    disk ATA      WDC_WD30EFAX-68JH4N0 0A82 sata
sdd  5:0:0:0    disk ATA      TOSHIBA_DT01ACA300   ABB0 sata

Вдохнослялся этим обсуждением.

Ссылки по теме:

  1. Create RAID Arrays with mdadm on Ubuntu
  2. How to Partition, Format, and Mount a Disk on Ubuntu 20.04
  3. Linux software raid, rebuilding broken raid 1
  4. How To Manage RAID Arrays with mdadm on Ubuntu 16.04
  5. Replacing a failing RAID 6 drive with mdadm

Комментариев нет: