Testei isso usando zdb -ddddd
[consulte link ]
Eu criei dois arquivos chamados disk1 e disk2 que eram 400M e, em seguida, disk3 e disk4 em 650M, e eu criei um zpool "tank" usando eles:
zpool create tank mirror disk1 disk2
zpool add mirror disk3 disk4
( Eu estou supondo que você usou zpool add mirror
para incluir os discos no pool, e não zpool attach
os discos para um espelho existente vdev; o último é uma idéia universalmente ruim e não vai aumentar capacidade de qualquer maneira, seria apenas adicionar outro dispositivo de espelho )
Quando eu enchi o pool 100M por vez com mkfile , eu verifiquei zdb -ddddd tank <inode#>
para ver quais vdevs estavam sendo gravados, e zfs fez o balanceamento da carga entre cada um; dos 400 endereços de bloco, em média, cerca de 300-350 foram gravados nos "discos" menores e 450-500 no maior, mesmo no último arquivo que encheu a piscina.
Isso significa que o ZFS irá equilibrar os blocos gravados entre cada vdev em um pool. (Neste caso, entre cada um dos seus 11 espelhos). OTOH, se você fosse adicionar uma unidade maior a um espelho existente usando zpool attach , o ZFS não seria capaz de utilizar esse espaço extra, já que ele grava os mesmos blocos em cada disco em um espelho.
Normalmente, é recomendável usar os mesmos discos em um pool, mas isso não é necessário. Não se preocupe em adicionar uma unidade mais rápida a uma piscina com discos mais lentos; em um pool, seu disco mais lento é o seu afunilamento (embora adicionar um log SSD para o ZIL possa atenuar esse problema).
Além disso, eu não me preocuparia com desfragmentação no ZFS, é a natureza da fera - como o ZFS é um sistema de arquivos Copy-on-Write , é inevitável. (Ou seja, em vez de sobrescrever um bloco com dados novos, ele grava os novos dados em um novo bloco e atualiza ponteiros de metadados e somas de verificação para usar o novo bloco.) Eu não esperaria que isso reduzisse o desempenho. p>
O que reduzirá o desempenho é estar 90% cheio (interfere com Copy-on-Write). É aconselhável manter a utilização em ou abaixo de 80% para o desempenho máximo.
O que me faz pensar em outra coisa - seu pool já existia e você adicionou dois novos discos - os dados existentes NÃO serão exibidos nesses discos, não até que sejam reescritos, por isso esperaria ver menos dados totais nos novos discos por algum tempo.