mdadm raid1 e qual tamanho de bloco (ou tamanho de bloco) em unidades de 4k?

13

Eu quero usar duas unidades 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 de 512 bytes.

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

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

Mas, por outro lado, fdiskrelata:

# 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 a unidade usa setores de 4k.

A mdadmpágina de manual é um pouco enigmática sobre o tamanho do chunk 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?

Observando /proc/mdstat, o dispositivo raid1 md8 possui 2930265424 blocos, ou seja,

3000591794176/2930265424/2 = 512

Não mdadmusar, em seguida, um tamanho de bloco de 512 bytes? (/ 2 porque é um espelho de mão dupla)

E o tamanho do pedaço é 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 padrão mkfs.xfsno dispositivo md, ele informa:

sectsz=512
bsize=4096

Corrigi isso com uma ligação de mkfs.xfs -s size=4096 /dev/md8

Edit: Testando um pouco, notei 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 (por 512 bytes seria de esperar um impacto no 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)

Abaixo /sysexistem alguns arquivos mais relevantes além 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 para o kernel sobre seu tamanho de setor de 4k e o kernel possui algum suporte para o setor de 4k (como fstab -lsugerido na saída ).

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

maxschlepzig
fonte

Respostas:

16

O tamanho do pedaço não se aplica ao raid1 porque não há distribuição; 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 verifique se você está usando um formato de metadados 1.x.

psusi
fonte