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.