Essas unidades são 4k? Sim, você pode ver que elas relatam 4096 bytes físicos, o que é o indicador disso. O relatório lógico de 512 bytes é o resultado da tentativa dos fabricantes de discos de compatibilidade com versões anteriores (e, portanto, confunde as coisas).
gpart? Na sua situação, eu usaria os seguintes comandos para colocar o disco em branco:
# -- Force ashift to be at least 12
sysctl vfs.zfs.min_auto_ashift=12;
# -- Create GPT tables
gpart create -s gpt ada0 &&
gpart create -s gpt ada1 &&
gpart create -s gpt ada2;
# -- Create paritions, align start/stop to 1 MiB boundaries
gpart add -a 1m -t freebsd-zfs -l disk0 ada0 &&
gpart add -a 1m -t freebsd-zfs -l disk1 ada1 &&
gpart add -a 1m -t freebsd-zfs -l disk2 ada2;
# -- Not needed under FreeBSD 10.1 but sometimes is on
# older versions to get /dev/gpt to update.
# Run if you don't see /dev/gpt/disk0 etc devices:
true > /dev/ada0; true > /dev/ada1; true > /dev/ada2;
# -- Create temporary GNOP 4k devices
gnop create -S 4k /dev/gpt/disk0 &&
gnop create -S 4k /dev/gpt/disk1 &&
gnop create -S 4k /dev/gpt/disk2;
# -- Create the zpool
zpool create -f -m /mnt zstorage raidz /dev/gpt/disk0.nop /dev/gpt/disk1.nop /dev/gpt/disk2.nop;
# -- Export
zpool export zroot;
# -- Remove temproary GNOP devices
gnop destroy /dev/gpt/disk0.nop &&
gnop destroy /dev/gpt/disk1.nop &&
gnop destroy /dev/gpt/disk2.nop;
# -- Bring back pool with "real" devices
zpool import -d /dev/gpt zstorage;
# -- Check status
zpool status;
# -- Verify ashift is 12
zdb | grep ashift
O gpart-ing não tem penalidade de desempenho ou desvantagens de que tenhamos conhecimento ou visto. Tivemos isso implantado em dezenas de locais de produção por muitos e muitos anos. Também confere as seguintes vantagens:
- É possível rotular as partições (-l) (por exemplo, disk0, disk1) para que você saiba quais discos são quais, mesmo se os números da porta mudarem (por exemplo, ada0 pode nem sempre ser disk0).
gpart show -l
mostrará a tabela GPT com esses rótulos.
- Embora não seja aplicável a você, ele permite inicializar o ZFS e também ter partições de troca (isto é, usando o GMIRROR) nos mesmos discos.
- Devido ao alinhamento de 1 MiB, você acaba com um pouco de espaço livre no final do disco porque sua partição é arredondada para 1 MiB. Isso evita uma situação em que você substitui uma unidade por um fornecedor diferente e ela acaba sendo um pouco menor e, portanto, inutilizável.
Você também notará que a primeira coisa acima é fazer sysctl vfs.zfs.min_auto_ashift=12;
e a última coisa é verificar esse valor. Em ZFS, o ashift = 9 é o padrão apropriado para discos de 512 bytes, mas para discos 4k você veria amplificação de gravação e perda de desempenho, com efeito semelhante, mas não em causa devido a desalinhamento de partição. Nós vimos onde, por razões desconhecidas, o ZFS não seleciona ashift = 12 automaticamente, mesmo com o GNOP, o que força o problema. Esta página descreve tudo bem: link
Tuning? Depende da sua carga de trabalho. Agora, habilitamos a compactação LZ4 em todas as novas implantações, pois ela provou ter uma sobrecarga desprezível na pior das hipóteses e, na melhor das hipóteses, aumenta drasticamente o desempenho de arquivos compactáveis.
# -- Set compresison on
zfs set compression=lz4 zstorage;
# -- See compression performance
zfs get used,compressratio,compression,logicalused zstorage;
A única desvantagem é que isso afetará o benchmarking, bonnie++
irá reportar alguns números insanos quando for ativado, o que provavelmente não refletirá o desempenho do mundo real. O mesmo com o benchmark de dd if=/dev/zero of=test.dat
style.