Quiero usar dos unidades de 3 TB en una configuración mdadm raid1 (usando Debian Sequeeze).
Las unidades utilizan sectores de hardware 4k en lugar de los tradicionales de 512 bytes.
Estoy un poco confundido porque, por un lado, el núcleo informa:
$ cat /sys/block/sdb/queue/hw_sector_size
512
Pero por otro lado fdisk
informa:
# 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
Por lo tanto, parece que el núcleo tiene alguna idea de que la unidad utiliza 4k sectores.
La mdadm
página del manual es un poco críptica sobre el tamaño del fragmento y la incursión1:
-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 qué no tiene sentido para raid1?
Mirando /proc/mdstat
, el dispositivo raid1 md8 tiene 2930265424 bloques, es decir
3000591794176/2930265424/2 = 512
¿ mdadm
Utiliza entonces un tamaño de bloque de 512 bytes? (/ 2 porque es un espejo de dos vías)
¿Y el tamaño de fragmento es un concepto diferente al tamaño de bloque?
Intentando dejar mdadm
explicar un 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)
Dónde
3000591794176/5860530848 = 512
Con un valor predeterminado mkfs.xfs
en el dispositivo md, informa:
sectsz=512
bsize=4096
Lo corregí con una llamada de mkfs.xfs -s size=4096 /dev/md8
Editar: probando un poco, noté lo siguiente:
Parece que la resincronización inicial se realiza con un tamaño de bloque de 128k (y no 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.
La velocidad mostrada a través de /proc/mdstat
es consistente para ese tamaño de bloque (para 512bytes uno esperaría un golpe de rendimiento):
[>....................] resync = 3.0% (90510912/2930265424) finish=381.1min speed=124166K/sec
(Por ejemplo, al deshabilitar la caché de escritura, la velocidad mostrada cae inmediatamente a 18 m / s)
Debajo /sys
hay en realidad algunos archivos más relevantes además de hw_sector_size
:
# cat /sys/block/sdb/queue/physical_block_size
4096
# cat /sys/block/sdb/queue/logical_block_size
512
Eso significa que la unidad no le miente al kernel sobre su tamaño de sector de 4k y el kernel tiene algún soporte de sector de 4k (como se fstab -l
sugiere en la salida ).
Buscar un poco en Google dio como resultado algunos informes sobre discos WD, que no informan el tamaño de 4k, afortunadamente este disco WD de 3 TB no hace eso, tal vez WD arregló su firmware con los discos actuales.