Я использую mdadm для нескольких зеркал RAID1. md7 - это N-образное зеркало, состоящее из 3 вращающихся дисков (все помечены для записи в основном) и SSD:
md7 : active raid1 sdd1[0] sde5[3](W) sdf5[4](W) sdc1[1](W)
234428416 blocks [4/4] [UUUU]
md6 : active raid1 sdf6[0] sde6[1]
1220988096 blocks [2/2] [UU]
md2 : active raid1 sdb6[0] sda6[1]
282229824 blocks [2/2] [UU]
md1 : active raid1 sdb2[0] sda2[1]
19534976 blocks [2/2] [UU]
md0 : active raid1 sdb1[0] sda1[1]
192640 blocks [2/2] [UU]
Вся система зависала 3 раза за последние 2 недели, что потребовало полной перезагрузки. На данный момент я предполагаю, что зависание системы не связано с моей проблемой MD, хотя я не могу полностью исключить эту возможность. Каждый раз, когда мы перезагружались, md7 требовал перестройки, но я не могу понять, как узнать из журналов, какой диск вызвал перестройку. Я думал, что iostat может мне помочь, пока RAID все еще перестраивался:
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
sda 43.39 1038.34 558.83 223108 120075
sdb 66.88 1445.47 648.86 310588 139420
sdc 36.42 12.99 22256.81 2792 4782320
sdd 190.75 23227.78 331.14 4990954 71152
md0 2.11 21.39 0.23 4596 50
md1 173.72 1855.87 522.14 398770 112192
md2 11.68 65.84 27.59 14146 5928
md6 27.42 149.83 69.51 32194 14936
sde 75.83 70.81 22326.91 15214 4797384
sdf 79.31 99.41 22326.91 21360 4797384
sr0 0.04 2.61 0.00 560 0
md7 202.31 1287.41 331.07 276626 71136
... но мне кажется, что md7 использует sdd для восстановления всех других дисков в этом RAID. Я подумал, может быть, это просто потому, что sdd - это SSD, а все остальные диски помечены как предназначенные для записи, но в этом случае он должен восстановить только один диск, который был не синхронизирован (если только все вращающиеся диски не вышли из строя) синхронизации, что мне кажется маловероятным).
Другая теория, которая у меня есть, заключается в том, что все вращающиеся диски всегда не синхронизированы при перезагрузке просто потому, что запись SSD происходит так быстро, что у него есть время закончить запись блока, в то время как другие все еще пишут, тогда система просто зависает прежде чем другие диски закончат запись этого блока?
Итак, как мне узнать, какой диск запустил повторную синхронизацию? Тот факт, что у меня есть n-стороннее зеркало со смешанными SSD и вращающимися дисками, возможно, ответственное за тот факт, что все вращающиеся диски всегда восстанавливаются после одного из этих зависаний, или драйвер md гарантирует, что блок не считается записанным на одном диске, пока он не будет успешно записан на все диски?
Я понимаю, что (по крайней мере, linux) raid для этих целей работает как файловая система - если система выйдет из строя во время ее использования, ее нужно будет проверить при перезагрузке. Таким образом, причиной сбоев вашей системы может быть не любой диски в массиве.
Как указывает Майкл выше, зависания и последующие нечистое отключение являются причиной того, что вы видите восстановление вашего RAID. Драйвер ядра md перестраивает нечистые массивы, чтобы гарантировать, что они действительно синхронизированы, поскольку зависание, сбой или потеря мощности не гарантируют, какие записи действительно были сброшены на диск.
Теперь, почему sdd
Привыкли, первое, что нужно понять, это то, что при нечистом завершении работы фактический массив, в отличие от отдельного устройства-члена, помечается как грязный. На приведенной выше странице руководства о RAID-1 говорится следующее:
Если драйвер md обнаруживает, что массив загрязнен при запуске, он приступает к исправлению любого возможного несоответствия. Для RAID1 это включает в себя копирование содержимого первого диска на все остальные диски.
В вашем примере md7
в массиве есть разделы на дисках sdc
, sdd
, sde
& sdf
, но если вы посмотрите на свой mdstat
вывод:
md7: активный raid1 sdd1 [0] sde53 sdf54 sdc11
обратите внимание, как первый раздел, отмеченный [0]
, идет sdd
, а именно sdd1
. Вот в чем причина sdd
используется - это первая поездка в md7
.