FREENAS: Por que o comando mv não é instantâneo dentro de um volume RAIDZ1?

11

Atualmente estou reorganizando a estrutura de arquivos em um volume RAIDZ1. Movendo diretórios de um conjunto de dados para outro, ambos contidos no mesmo volume.

SSH entrou na máquina e saiu à moda antiga:

mv * destination

Isso não deveria ser instantâneo? Eu entendo que ele está espalhado em três drives, mas ao mesmo tempo, os arquivos em si não precisam realmente ser movidos - eu apenas esperava que ele ajustasse os ponteiros para esses arquivos e fosse, basicamente, instantâneo. Definitivamente não é. Eu tenho cerca de 500G de dados para mover e está funcionando por cerca de meia hora agora. o.O

Por que não é quase instantâneo?

Specs: CPU: Intel G3220
MB: Gigabyte GA-B85-HD3
MEM: Kingston DDR3-1600 8GB
DISK: 3x2TB WD Green in RAIDZ1 volume

    
por Ryan 26.03.2014 / 17:23

1 resposta

18

Você está pensando em coisas do nível errado, é tudo.

Se você mover um arquivo dentro dos limites de um único conjunto de dados do ZFS, ele reagirá de maneira semelhante ao que você está esperando. Se você mover um arquivo dentro dos limites de um pool, mas entre conjuntos de dados, será um movimento real. Sim, tecnicamente os dados foram do ponto A para o ponto B e ambos os pontos estão nos mesmos pratos - mas do ponto de vista do ZFS, ele mudou de casa.

Conjuntos de dados do ZFS são sistemas de arquivos separados. Sistemas de arquivos reais. Eles podem ter diferentes tamanhos de bloco, configurações de compactação, etc. Mover um arquivo entre dois sistemas de arquivos ZFS, mesmo no mesmo pool, é uma mudança real - os bits são lidos e gravados novamente, em vez de apenas atualizar um ponteiro.

Funcionalmente, é aproximadamente análogo a mover um arquivo entre dois sistemas de arquivos ext4 que são tecnicamente provenientes de duas partições do mesmo disco rígido - os dois sistemas de arquivos, apesar de compartilharem hardware subjacente, são logicamente diferentes e, portanto, nenhuma alteração de 'ponteiro' pode acontecer , ele deve mover fisicamente o arquivo, mesmo que seja apenas copiando dados de um local para outro na mesma unidade subjacente.

    
por 26.03.2014 / 22:43