mdadm raid1 e o que chunksize (ou blocksize) em drives de 4k?

9

Eu quero usar dois drives de 3 TB em uma configuração mdadm raid1 (usando o Debian Sequeeze).

As unidades usam setores de hardware de 4k em vez dos tradicionais 512 bytes.

Estou um pouco confuso porque, por um lado, o kernel reporta:

$ cat /sys/block/sdb/queue/hw_sector_size
512

Mas, por outro lado, fdisk relatórios:

# fdisk -l /dev/sdb
Disk /dev/sdb: 3000.6 GB, 3000592982016 bytes
255 heads, 63 sectors/track, 364801 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes

Assim, parece que o kernel tem alguma idéia de que o disco usa setores 4k.

A página mdadm man é um pouco enigmática sobre o tamanho do bloco e o raid1:

   -c, --chunk=
          Specify chunk size of kibibytes.  The default when  creating  an
          array  is 512KB.  To ensure compatibility with earlier versions,
          the default when Building and array with no persistent  metadata
          is  64KB.   This  is  only  meaningful  for RAID0, RAID4, RAID5,
          RAID6, and RAID10.

Por que não é significativo para o raid1?

Olhando para /proc/mdstat , o dispositivo raid1 md8 tem 2930265424 blocos, ou seja,

3000591794176/2930265424/2 = 512

O mdadm usa um tamanho de bloco de 512 bytes? (/ 2 porque é um espelho bidirecional)

E o tamanho do bloco é um conceito diferente do tamanho do bloco?

Tentando deixar mdadm explicar um dispositivo:

# mdadm -E /dev/sdb -v -v
Avail Dev Size : 5860531120 (2794.52 GiB 3000.59 GB)
Array Size : 5860530848 (2794.52 GiB 3000.59 GB)

Onde

3000591794176/5860530848 = 512

Com um mkfs.xfs padrão no dispositivo md, ele informa:

sectsz=512
bsize=4096

Eu corrigi isso com uma chamada de mkfs.xfs -s size=4096 /dev/md8

Editar: Testando um pouco ao redor, observei as seguintes coisas:

Parece que a ressincronização inicial é feita com um tamanho de bloco de 128k (e não 512 bytes):

md: resync of RAID array md8
md: minimum _guaranteed_  speed: 1000 KB/sec/disk.
md: using maximum available idle IO bandwidth (but not more than 200000 KB/sec) for resync.
md: using 128k window, over a total of 2930265424 blocks.

A velocidade exibida via /proc/mdstat é consistente para esse tamanho de bloco (para 512 bytes, seria de se esperar um resultado de desempenho):

[>....................]  resync =  3.0% (90510912/2930265424) finish=381.1min speed=124166K/sec

(Por exemplo, ao desativar o cache de gravação, a velocidade exibida cai imediatamente para 18m / s)

Em /sys , na verdade, existem alguns arquivos mais relevantes além de hw_sector_size :

# cat /sys/block/sdb/queue/physical_block_size
4096
# cat  /sys/block/sdb/queue/logical_block_size
512

Isso significa que a unidade não mente ao kernel sobre seu tamanho de setor de 4k e o kernel tem algum suporte ao setor 4k (como a saída de fstab -l sugeriu).

Pesquisando um pouco no Google resultou em alguns relatórios sobre os discos WD, que não relatam o tamanho de 4k - felizmente este disco WD de 3 TB não faz isso - talvez a WD tenha consertado o firmware com os discos atuais.

    
por maxschlepzig 28.05.2011 / 15:56

1 resposta

11

O tamanho do bloco não se aplica ao raid1 porque não há striping; essencialmente, todo o disco é um pedaço. Em resumo, você não precisa se preocupar com o tamanho do setor físico de 4k. Versões recentes do mdadm usam as informações do kernel para garantir que o início dos dados esteja alinhado com um limite de 4kb. Apenas certifique-se de estar usando um formato de metadados 1.x.

    
por 30.05.2011 / 17:21