A nova matriz md é somente leitura automática e tem ressincronização = PENDING

17

Eu criei uma nova matriz md com o seguinte comando:

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

Mas agora /proc/mdstatmostra a matriz como "somente leitura automática" com 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>

De acordo com este site, eu posso corrigir isso com:

mdadm --readwrite /dev/md1

E isso funciona:

~ # 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>

Mas ainda gostaria de saber o que está acontecendo aqui e não consigo encontrar nenhuma informação real sobre isso. Alguém sabe por que a matriz assume como padrão esse estado?

EDIT: adicionado dmesg output:

~ # 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.
Martin von Wittich
fonte
Você checou dmesg?
Frostschutz 14/11/2013
@frostschutz Adicionei as linhas dmesg que foram registradas no syslog ontem, fuso horário UTC + 1 (reinicializei a máquina desde então, não tenho mais acesso ao dmesg original). Nada fora do comum, tanto quanto eu posso dizer.
Martin von Wittich
Curioso para saber quais versões do kernel e do mdadm você tem ...
derobert
@derobert Nome do host do Linux 3.10-0.bpo.3-686-pae # 1 SMP Debian 3.10.11-1 ~ bpo70 + 1 (24-09-2013) i686 GNU / Linux
Martin von Wittich
@derobert mdadm - v3.2.5 - 18 de maio de 2012, do Debian wheezy
Martin von Wittich

Respostas:

25

Quando uma matriz é montada inicialmente, é colocada no modo "somente leitura automática". Eu testei rapidamente, com meu kernel (3.10.x) e mdadm (3.3), isso não acontece no create - mas você deve estar executando versões diferentes.

No entanto, somente leitura automática não é um erro, nem é algo para se preocupar. A idéia básica por trás disso é tornar --assemble(e, aparentemente, agora até --create) mais seguro: nada é gravado nos discos até que a matriz vá para leitura / gravação. (Não tenho certeza se talvez os metadados ainda estejam gravados no create.)

A matriz mudará automaticamente de somente leitura automática para leitura e gravação quando receber sua primeira gravação. Portanto, se você criasse um sistema de arquivos no dispositivo, ou um volume físico LVM, ou qualquer outra coisa, ele teria mudado para leitura / gravação e iniciado a sincronização.

O único motivo pelo qual você precisará executá mdadm --readwrite-lo é se você deseja sincronizar antes de executar qualquer gravação.

derobert
fonte
Hmm ... começaria a sincronizar diretamente após a primeira gravação, para que a leitura automática atrasasse apenas a sincronização?
Martin von Wittich
@MartinvonWittich Sim, ele começaria a sincronizar logo após a primeira gravação. Então, sim, atrasa-lo-tipicamente por alguns segundos, como você normalmente fazer algo ( pvcreate, mkfs, etc.) com uma nova matriz logo depois --create.
derobert
"você deve estar executando versões diferentes" é um palpite? Estou usando as versões mais recentes e não consigo me lembrar desse comportamento para nenhuma versão anterior. A menos que o @MartinvonWittich tenha feito algo que ele não nos contou (como reiniciar após criar), isso não explica o que aconteceu.
Frostschutz