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

Как узнать, какой диск в многодисковом массиве mdadm RAID1 инициировал восстановление?

Я использую 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.