Новый массив md доступен только для чтения и имеет функцию reync = PENDING

17

Я создал новый массив md с помощью следующей команды:

mdadm --create /dev/md1 -l 1 -n 2 /dev/sd[ed]1

Но теперь /proc/mdstatпоказывает массив как «только для чтения» с resync = PENDING:

~ # cat /proc/mdstat 
Personalities : [raid1] 
md1 : active (auto-read-only) raid1 sde1[1] sdd1[0]
      976630336 blocks super 1.2 [2/2] [UU]
        resync=PENDING

md0 : active raid1 sdb1[0] sdc1[1]
      1953511936 blocks [2/2] [UU]

unused devices: <none>

Согласно этому сайту я могу это исправить с помощью:

mdadm --readwrite /dev/md1

И это работает:

~ # mdadm --readwrite /dev/md1
~ # cat /proc/mdstat 
Personalities : [raid1] 
md1 : active raid1 sde1[1] sdd1[0]
      976630336 blocks super 1.2 [2/2] [UU]
      [>....................]  resync =  0.0% (54400/976630336) finish=598.2min speed=27200K/sec

md0 : active raid1 sdb1[0] sdc1[1]
      1953511936 blocks [2/2] [UU]

unused devices: <none>

Но я все еще хотел бы знать, что здесь происходит, и я не могу найти никакой реальной информации об этом. Кто-нибудь знает, почему массив по умолчанию принимает это состояние?

РЕДАКТИРОВАТЬ: добавлен вывод dmesg:

~ # grep kernel /var/log/syslog.1 
Nov 13 10:03:44 iserv kernel: [160446.860113] e1000: eth1 NIC Link is Down
Nov 13 10:04:48 iserv kernel: [160511.017666] e1000: eth1 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX/TX
Nov 13 20:12:40 iserv kernel: [196982.775186]  sda: sda1
Nov 13 20:12:59 iserv kernel: [197001.598187]  sdd: sdd1
Nov 13 20:13:13 iserv kernel: [197016.344939]  sde: sde1
Nov 13 20:14:05 iserv kernel: [197067.520825] md: bind<sdd1>
Nov 13 20:14:05 iserv kernel: [197067.521263] md: bind<sde1>
Nov 13 20:14:05 iserv kernel: [197067.670215] md/raid1:md1: not clean -- starting background reconstruction
Nov 13 20:14:05 iserv kernel: [197067.670219] md/raid1:md1: active with 2 out of 2 mirrors
Nov 13 20:14:05 iserv kernel: [197067.670246] md1: detected capacity change from 0 to 1000069464064
Nov 13 20:14:05 iserv kernel: [197067.675101]  md1: unknown partition table
Nov 13 20:24:10 iserv kernel: [197672.572128] md: md1 switched to read-write mode.
Nov 13 20:24:10 iserv kernel: [197672.572269] md: resync of RAID array md1
Nov 13 20:24:10 iserv kernel: [197672.572273] md: minimum _guaranteed_  speed: 1000 KB/sec/disk.
Nov 13 20:24:10 iserv kernel: [197672.572275] md: using maximum available idle IO bandwidth (but not more than 200000 KB/sec) for resync.
Nov 13 20:24:10 iserv kernel: [197672.572280] md: using 128k window, over a total of 976630336k.
Мартин фон Виттих
источник
Вы проверяли dmesg?
frostschutz
@frostschutz Я добавил строки dmesg, которые были зарегистрированы вчера в системном журнале, часовой пояс UTC + 1 (с тех пор я перезагрузил машину, поэтому у меня больше нет доступа к исходному dmesg). Насколько я могу судить, ничего необычного.
Мартин фон Виттих,
Любопытно, какие версии ядра и mdadm у вас есть ...
derobert
@derobert Linux hostname 3.10-0.bpo.3-686-pae # 1 SMP Debian 3.10.11-1 ~ bpo70 + 1 (2013-09-24) i686 GNU / Linux
Мартин фон Виттих,
@derobert mdadm - v3.2.5 - 18 мая 2012 года, из Debian wheezy
Мартин фон Виттич,

Ответы:

25

Когда массив изначально собран, он помещается в режим «только для чтения». Я быстро проверил, с моим ядром (3.10.x) и mdadm (3.3), это не происходит при создании, но вы должны использовать разные версии.

Тем не менее, только для автоматического чтения не является ошибкой и не о чем беспокоиться. Основная идея заключается в том, чтобы сделать --assemble(и, по-видимому, теперь даже --create) более безопасным: ничего не записывается на диски, пока массив не перейдет в режим чтения-записи. (Я не уверен, что, возможно, метаданные все еще пишутся при создании.)

Массив будет автоматически переключаться с автоматического чтения на чтение и запись, когда он получит свою первую запись. Итак, если вы продолжите и создали файловую систему на устройстве или физический том LVM, или что-то еще, он переключился бы на чтение-запись и запустил синхронизацию.

Единственная причина, по которой вам нужно его запустить, - mdadm --readwriteэто если вы хотите, чтобы он синхронизировался перед выполнением любых операций записи.

derobert
источник
Хм ... начнется ли синхронизация сразу после первой записи, так что только для автоматического чтения задерживает синхронизацию?
Мартин фон Виттих
@MartinvonWittich Да, он начнет синхронизироваться сразу после первой записи. Так что да, это задерживает его, как правило , на несколько секунд, как вы обычно делаете что - то ( pvcreate, mkfsи т.д.) с новым массивом довольно скоро после --create.
Дероберт
"Вы должны работать с разными версиями" - это предположение? Я использую последние версии и не могу вспомнить это поведение для любой старой версии. Если @MartinvonWittich не сделал что-то, о чем он нам не говорил (например, перезагрузка после создания), это не объясняет того, что произошло вообще.
frostschutz