mdadm RAID5 случайные ошибки чтения. Умирающий диск?

Сначала длинная история:
У меня RAID5 с mdadm на Debian 9. Raid имеет 5 дисков, каждый размером 4 ТБ. 4 из них - это HGST Deskstar NAS, а один из них - Toshiba N300 NAS.

В последние дни я заметил некоторые ошибки чтения с этого рейда. Например, у меня был архив RAR 10 Гб в нескольких частях. Когда я пытаюсь извлечь, я получаю ошибки CRC в некоторых частях. Если я попробую это второй раз, я получу ошибки в этих частях. Это также происходит с торрентами и повторной проверкой после загрузки.

После перезагрузки мой BIOS заметил, что состояние SMART накопителя HGST на порте SATA 3 плохое. smartctl сказал мне, что есть ошибки DMA CRC, но утверждает, что с Drive все в порядке.

Еще одна перезагрузка позже, я больше не вижу ошибок crc в смарте. Но теперь я получаю этот вывод

smartctl 6.6 2016-05-31 r4324 [x86_64-linux-4.9.0-4-amd64] (local build)
Copyright (C) 2002-16, Bruce Allen, Christian Franke, www.smartmontools.org

=== 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.
Failed Attributes:
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  5 Reallocated_Sector_Ct   0x0033   001   001   005    Pre-fail  Always   FAILING_NOW 1989

Поскольку HGST больше не доступны по нормальным ценам, я купил другую Toshiba N300, чтобы заменить HGST. Оба помечены как 4 ТБ. Я попытался создать раздел точно такого же размера, но это не сработало. Программа разбиения утверждала, что мое число слишком велико (я пробовал с байтами и секторами). Поэтому я просто сделал раздел настолько большим, насколько это возможно. Но теперь, похоже, он того же размера, я немного растерялся.

SD C старый, а SDH новый

Disk /dev/sdc: 3,7 TiB, 4000787030016 bytes, 7814037168 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
Disklabel type: gpt
Disk identifier: 4CAD956D-E627-42D4-B6BB-53F48DF8AABC

Device     Start        End    Sectors  Size Type
/dev/sdc1   2048 7814028976 7814026929  3,7T Linux RAID


Disk /dev/sdh: 3,7 TiB, 4000787030016 bytes, 7814037168 sectors
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: 3A173902-47DE-4C96-8360-BE5DBED1EAD3

Device     Start        End    Sectors  Size Type
/dev/sdh1   2048 7814037134 7814035087  3,7T Linux filesystem

В настоящее время я добавил новый как запасной диск. RAID все еще работает со старым диском. У меня все еще есть некоторые ошибки чтения, особенно на больших файлах.

Вот как выглядит мой RAID на данный момент:

/dev/md/0:
        Version : 1.2
  Creation Time : Sun Dec 17 22:03:20 2017
     Raid Level : raid5
     Array Size : 15627528192 (14903.57 GiB 16002.59 GB)
  Used Dev Size : 3906882048 (3725.89 GiB 4000.65 GB)
   Raid Devices : 5
  Total Devices : 6
    Persistence : Superblock is persistent

  Intent Bitmap : Internal

    Update Time : Sat Jan  5 09:48:49 2019
          State : clean
 Active Devices : 5
Working Devices : 6
 Failed Devices : 0
  Spare Devices : 1

         Layout : left-symmetric
     Chunk Size : 512K

           Name : SERVER:0  (local to host SERVER)
           UUID : 16ee60d0:f055dedf:7bd40adc:f3415deb
         Events : 25839

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

       6       8      113        -      spare   /dev/sdh1

И структура диска это

NAME                       MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
sda                          8:0    0   3,7T  0 disk
└─sda1                       8:1    0   3,7T  0 part
  └─md0                      9:0    0  14,6T  0 raid5
    └─storageRaid          253:4    0  14,6T  0 crypt
      └─vg_raid-raidVolume 253:5    0  14,6T  0 lvm   /media/raidVolume
sdb                          8:16   0   3,7T  0 disk
└─sdb1                       8:17   0   3,7T  0 part
  └─md0                      9:0    0  14,6T  0 raid5
    └─storageRaid          253:4    0  14,6T  0 crypt
      └─vg_raid-raidVolume 253:5    0  14,6T  0 lvm   /media/raidVolume
sdc                          8:32   0   3,7T  0 disk
└─sdc1                       8:33   0   3,7T  0 part
  └─md0                      9:0    0  14,6T  0 raid5
    └─storageRaid          253:4    0  14,6T  0 crypt
      └─vg_raid-raidVolume 253:5    0  14,6T  0 lvm   /media/raidVolume
sdd                          8:48   0   3,7T  0 disk
└─sdd1                       8:49   0   3,7T  0 part
  └─md0                      9:0    0  14,6T  0 raid5
    └─storageRaid          253:4    0  14,6T  0 crypt
      └─vg_raid-raidVolume 253:5    0  14,6T  0 lvm   /media/raidVolume
sdf                          8:80   1   3,7T  0 disk
└─md0                        9:0    0  14,6T  0 raid5
  └─storageRaid            253:4    0  14,6T  0 crypt
    └─vg_raid-raidVolume   253:5    0  14,6T  0 lvm   /media/raidVolume
sdh                          8:112  1   3,7T  0 disk
└─sdh1                       8:113  1   3,7T  0 part
  └─md0                      9:0    0  14,6T  0 raid5
    └─storageRaid          253:4    0  14,6T  0 crypt
      └─vg_raid-raidVolume 253:5    0  14,6T  0 lvm   /media/raidVolume

Я немного запутался, что запасной диск (sdh) уже находится в томе склепа.

Вопросы:
По каким критериям mdadm скажет, что диск неисправен?
Могут ли случайные ошибки чтения возникнуть с одного сломанного диска?
Не обнаружить рейд, когда диск отправляет неправильные данные?
Опасно ли помечать диск вручную как сбойный, если запасной диск имеет не тот же размер?

2 ответа

Решение

По моему мнению, MD raid слишком консервативен с выбиванием дисков. Я всегда наблюдаю за исключениями ATA в syslog/dmesg (я устанавливаю rsyslog, чтобы уведомлять меня об этом).

Должен сказать, я удивлен, что вы получаете ошибки на уровне приложения. RAID5 должен использовать информацию о четности для обнаружения ошибок (по-видимому, редактировать ее нет; только во время проверки). Сказав это, является ли диск причиной или нет, это плохо. Почти 2000 перераспределенных секторов действительно плохо.

Разделы могут быть больше, в противном случае вы также не можете добавить их как запасные, но чтобы убедиться, что все в порядке, вы можете клонировать таблицы разделов, используя fdisk, sfdisk и gdisk. У вас есть GPT, поэтому давайте использовать его функцию резервного копирования. Если вы делаете gdisk /dev/sdX, ты можешь использовать b создать резервную копию таблицы разделов на диске. Затем на новом диске gdisk /dev/sdY, ты можешь использовать r для вариантов восстановления, то l загрузить резервную копию. Тогда у вас должен быть идентичный раздел и все mdadm --manage --add Команды должны работать. (вам нужно будет вынуть новый диск из массива перед изменением таблицы разделов)

Я на самом деле склонен хранить эти резервные таблицы разделов на серверах. Это делает для быстрой замены диска.

И последний совет: не используйте RAID5. RAID5 с такими огромными дисками облупился. Вы должны иметь возможность добавить диск и динамически перейти на RAID6. Не уверен, как из головы, но вы можете Google, что.

Довольно распространено иметь задачу cron, инициирующую проверки несоответствия четности. Я уверен, что Debian 9 делает это по умолчанию, когда устанавливается пакет mdadm, и, следовательно, в журналах вашей системы будут отчеты по этому вопросу.

Кроме того, если ОЗУ вашей системы выходит из строя, это может быть основной причиной

Другие вопросы по тегам