Назад | Перейти на главную страницу

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

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

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

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

Еще одна перезагрузка позже, ошибок 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 ТБ. Я попытался создать раздел точно такого же размера, но это не сработало. Программа раздела утверждала, что мой номер слишком велик (пробовал с байтами и секторами). Поэтому я просто сделал перегородку настолько большой, насколько это было возможно. Но теперь похоже, что он того же размера, я немного запутался.

SDC старый, и 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 скажет, что диск вышел из строя?
Могут ли случайные ошибки чтения возникать из-за одного сломанного диска?
Не обнаруживает рейд, когда диск отправляет неправильные данные?
Опасно ли помечать диск вручную как неисправный, если запасной диск не имеет точно такого же размера?

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

Кроме того, отказ оперативной памяти вашей системы может быть основной причиной

На мой взгляд, 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. Не знаю, как из макушки, но вы можете погуглить.