4k discos rígidos freebsd gpart e zfs

2

Eu tenho 3 hdd, com o próximo camcotrol de identificação.

root@cirmos:/root # camcontrol identify ada1
pass2: <WDC WD10EZEX-00RKKA0 80.00A80> ATA-8 SATA 3.x device
pass2: 300.000MB/s transfers (SATA 2.x, UDMA6, PIO 8192bytes)

protocol              ATA/ATAPI-8 SATA 3.x
device model          WDC WD10EZEX-00RKKA0
firmware revision     80.00A80
serial number         WD-WMC1S4587539
WWN                   50014ee003930f6e
cylinders             16383
heads                 16
sectors/track         63
sector size           logical 512, physical 4096, offset 0
LBA supported         268435455 sectors
LBA48 supported       1953525168 sectors
PIO supported         PIO4
DMA supported         WDMA2 UDMA6 

Feature                      Support  Enabled   Value           Vendor
read ahead                     yes  yes
write cache                    yes  yes
flush cache                    yes  yes
overlap                        no
Tagged Command Queuing (TCQ)   no   no
Native Command Queuing (NCQ)   yes      32 tags
SMART                          yes  yes
microcode download             yes  yes
security                       yes  no
power management               yes  yes
advanced power management      no   no
automatic acoustic management  no   no
media status notification      no   no
power-up in Standby            yes  no
write-read-verify              no   no
unload                         no   no
free-fall                      no   no
data set management (TRIM)     no
root@cirmos:/root # 

como pode ver acima, o tamanho do setor é detectado como:

sector size           logical 512, physical 4096, offset 0

Aqui já há alguns tópicos sobre o ajuste da unidade 4k. Eu quero criar o ZFS (raidz) acima de 3 drives e ter as próximas perguntas:

  1. Essas unidades são 4k drives ? (perguntando porque o tamanho do setor físico é 4k, mas lógico é reportado como 512b)
  2. qual é o gpart recomendado para os mergulhadores acima para obter correct alignment (Deseja criar uma partição freebsd-zfs )
  3. Está aqui zpool ajustando o que devo considerar? (a raiz, o sistema e a troca não devem estar nas unidades acima - essas unidades são apenas para armazenamento de arquivos "puro" (e diretórios base).
por jm666 17.06.2013 / 15:19

2 respostas

2

Começando com o ponto 2; Em todas as práticas recomendadas, o ZFS deve "alimentar" unidades inteiras para gerenciar. Nenhum particionamento especial é necessário.

Quanto ao resto:

Esse link tem muitas dicas úteis, dos quais eu vou repetir alguns.

Cada vdev (como um espelho ou raidz) tem um único ashift. ashift = 9 é 512 setores de bytes, ashift = 12 é 4k setores. (calculado como 2 ^ ashift = setorial)

Para ajudar a garantir compatibilidade futura, sem ter que destruir e recriar o pool posteriormente, geralmente é recomendado usar o ashift = 12, independentemente dos recursos reais da unidade (já que não pode ser alterado após a criação do vdev).

Do link:

# gnop create -S 4096 ada0
# zpool create tank raidz ada0.nop ada1 ada2
# zdb | grep ashift
     ashift: 12

O comando gnop cria um dispositivo de passagem de alinhamento 4k forçado para ada0 como ada0.nop. Em seguida, o pool é criado. O ZFS então usará ashift = 12 para todo o vdev. Com o pool / vdev criado, é recomendável se livrar do dispositivo de passagem ada0.nop.

# zpool export tank
# gnop destroy ada0.nop
# zpool import tank

Agora, o pool será importado com os dispositivos ada0, ada1 e ada2. E ainda terá o ashift bloqueado = 12 com o qual foi criado.

É isso. Com o ZFS gerenciando todas as unidades, você está pronto e pronto para uso.

    
por 25.06.2013 / 14:28
1

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.

    
por 24.04.2015 / 20:56