Tenho um array MD raid1 de 2 discos. Um dos drives é lento, então quero substituí-lo. Mas por paranoia[1] e segurança, quero adicionar o novo (3º) drive e sincronizá-lo antes de remover o drive lento, já que, bem, ele é apenas lento, mas de outra forma está funcionando e tem dados válidos nele e quero evitar degradar o array antes que eu tenha que fazer isso.
Então adicionei o terceiro disco e ele começou a sincronizar, então está tudo bem até agora. Mas ele está usando apenas 1 das 2 unidades existentes como fonte da sincronização, e você não sabe que de acordo com o que eu chamo de regra 50/50/90[2], ele está usando o disco lento como a (única) fonte da sincronização. Posso ver que ele está usando (apenas) o disco lento usando sar :
01:21:55 PM tps rkB/s wkB/s dkB/s areq-sz aqu-sz await %util DEV
01:22:00 PM 91.60 0.00 45147.30 0.00 492.87 0.14 1.48 11.26 sdb
01:22:00 PM 0.40 0.00 1.70 0.00 4.25 0.13 314.00 48.08 sde
01:22:00 PM 91.60 45145.60 1.70 0.00 492.87 3.41 37.26 88.30 sdd
01:22:00 PM 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 md0
sdd
é o disco lento. Se MD estivesse lendo em sde
vez disso, a velocidade seria cerca de 4x isso:
# dd if=/dev/sde of=/dev/null bs=1M count=5000
5000+0 records in
5000+0 records out
5242880000 bytes (5.2 GB, 4.9 GiB) copied, 23.1946 s, 226 MB/s
Francamente, estou surpreso que o MD esteja sendo tão simplista e que ele não leia todos os discos durante a reconstrução, exatamente por esse tipo de motivo/caso.
Então, há alguma maneira de forçar o uso de sde
nesta sincronização, além sdd
ou em vez dela?
PS A velocidade de sincronização não está sendo limitada por dev.raid.speed_limit_max
:
# sysctl -n dev.raid.speed_limit_max
20000000
[1] Podem me chamar de paranóico, mas você sabe que o momento em que seu array estiver reduzido a um único disco é quando esse único disco irá falhar.
[2] Se você tem 50% de chance de algo acontecer de uma forma ou de outra, 90% das vezes será do jeito que você não queria.