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