A questão
Por que minha ressincronização inicial é tão lenta? Inicialmente, cat /proc/mdstat
reportou ~ 30000K/sec
.
- Em seguida, aumentei
/sys/block/md0/md/stripe_cache_size
de 256
para 16384
. Isso aumentou a velocidade para ~50000K/sec
.
- Alterei
/proc/sys/dev/raid/speed_limit_min
de 1000
para 100000
e /proc/sys/dev/raid/speed_limit_max
de 200000
para 400000
, mas isso não ajudou.
O que mais posso fazer para acelerar as coisas?
-
Este tópico sugere a substituição de unidades Western Digital Green por algo diferente. Isso não é uma opção para mim.
- A execução de
smartctl -t short /dev/sd[bcd]
e posterior smartctl -l selftest /dev/sd[bcd]
não revelou erros.
- Vários recursos que encontrei no tópico ( 1 , 2 ) não são muito específicos sobre como (quais comandos) alterar certas configurações, eles não explicam muito bem o que eles fazem & porque eles ajudam.
Alguns antecedentes
Como eu configuro o array de ataque
Acabei de adicionar três unidades Western Digital SATA de 2TB (suas unidades "verdes") ao meu servidor Ubuntu 14.04. Eles são /dev/sd[bcd]
.
Eu decidi usá-los em um array raid5 e configurar tudo assim:
1) Crie uma partição em cada disco:
fdisk /dev/sdb
(mesmo para sdc
e sdd
)
Baseado em este post de blog escolhi 2048
e 3907029128
como o respectivo primeiro e último setor em cada disco. Esses números são divisíveis por 4, já que essas unidades são unidades de setor de 4K.
O tipo fs foi definido como da (Non-FS data)
, de acordo com o post do blog, que diz
This stops distribution auto-mount startup scripts for searching for superblocks on drives marked as “fd” and trying to mount them up in a funny order.
Como o RAID Array não é essencial para inicializar o sistema, isso faz sentido para mim.
2) crie uma matriz de raid usando mdadm
:
mdadm --create --verbose /dev/md0 --level=5 --chunk=2048 --raid-devices=3 /dev/sdb1 /dev/sdc1 /dev/sdd1 --spare-devices=0 --force
A opção --chunk=2048
também foi inspirada no mesma postagem no blog ," tendo [ing] em mente a lógica 'deve ser divisível por 4'. "
As opções --spare-devices=0 --force
são criadas por mim, pois sem elas o comando mdadm
iniciaria o processo de ressincronização inicial, mas rapidamente diminuiria para < 200K/sec
e, em seguida, sairia com uma mensagem em /var/mail/root
that /dev/sdd
"pode ter falhado". Depois disso, a saída de mdadm --detail /dev/md0
mostraria que /dev/sdd1
foi movido para ser uma unidade sobressalente.
Desde a adição dessas opções, a ressincronização continua em execução. Primeiro diminuiu para < 100K/sec
, mas a velocidade aumentou para cerca de 30000K/sec
e ficou lá.
Sobre o processo de ressincronização em execução
atop
revela que /dev/sdd
é o mais lento
DSK | sdd | busy 103% | read 930 | write 304 | KiB/r 512 | | KiB/w 512 | MBr/s 46.50 | MBw/s 15.20 | avq 112.12 | avio 8.10 ms |
DSK | sdc | busy 85% | read 942 | write 384 | KiB/r 508 | | KiB/w 410 | MBr/s 46.75 | MBw/s 15.40 | avq 20.59 | avio 6.21 ms |
DSK | sdb | busy 73% | read 942 | write 387 | KiB/r 508 | | KiB/w 411 | MBr/s 46.75 | MBw/s 15.55 | avq 17.31 | avio 5.31 ms |
Sobre as unidades WD Green
Todas as unidades foram compradas em um horário diferente (por isso, suspeito que sejam de diferentes tiragens de produção, com meses de diferença). /dev/sdb
e /dev/sdc
são as mais novas e têm 64MB de cache. /dev/sdd
tem 32MB de cache.