Por que um resilver do ZFS verifica o conjunto inteiro?

4

Eu tenho um zpool onde acabei de substituir um disco com falha e iniciei um resilvering para o novo disco.

O que eu não entendo é, por que zpool status diz que deseja varrer 129 TB, quando o tamanho do vdev é de ~ 30 TB. Quando olho para iostat -nx 1 , posso ver que os 5 discos no vdev estão recebendo leituras pesadas, e o novo disco é igual a gravações pesadas. Então o zfs não varre todos os dados como diz.

# zpool status tank3 |head
  pool: tank3
 state: ONLINE
status: One or more devices is currently being resilvered.  The pool will
        continue to function, possibly in a degraded state.
action: Wait for the resilver to complete.
  scan: resilver in progress since Thu Apr 30 09:59:15 2015
    61.2T scanned out of 129T at 3.03G/s, 6h23m to go
    946G resilvered, 47.34% done

Pergunta

Eu diria que cada vdev é independente um do outro, portanto, um resilver de um não deve exigir nenhuma varredura dos outros. Por que o zfs verifica todo o espaço em disco usado durante a atualização?

    
por Jasmine Lognnes 30.04.2015 / 15:52

2 respostas

3

O resilvering é uma operação do vdev; como você implicou apenas os dispositivos de armazenamento em que vdev são usados para reconstruir o novo dispositivo. Eu não tenho certeza porque cita o tamanho total do zpool, mas suspeito que os desenvolvedores emprestaram código das funções scrub, ou que ele simplesmente cita o tamanho completo do zpool, pois esse seria o pior cenário possível.

    
por 30.04.2015 / 18:12
7

O resilvering (e o scrubbing) envolve andar toda a B-Tree do pool e recriar novamente os blocos que estariam no disco ausente.

Sem percorrer todos os txg da árvore, não é possível saber quais blocos estariam no disco ausente, portanto, ele verifica todo o universo de metadados do conjunto.

Ele não necessariamente todos os dados, apenas metadados suficientes para determinar se ele realmente precisa ler os dados correspondentes ou não. Você provavelmente verá as informações de progresso aumentarem mais rapidamente do que a quantidade real de dados sendo lidos, já que está realmente contando a quantidade de dados referenciados pelos metadados lidos.

    
por 12.06.2015 / 23:44