Voglio usare due unità da 3 TB in una configurazione mdadm raid1 (usando Debian Sequeeze).
Le unità utilizzano settori hardware 4k anziché quelli tradizionali da 512 byte.
Sono un po 'confuso perché da un lato il kernel riporta:
$ cat /sys/block/sdb/queue/hw_sector_size
512
Ma d'altra parte fdisk
riporta:
# 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
Quindi, sembra che il kernel abbia qualche idea che l'unità usi settori 4k.
La mdadm
pagina man è un po 'enigmatica per quanto riguarda le dimensioni del pezzo e il 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.
Perché non è significativo per raid1?
Guardando /proc/mdstat
, il dispositivo raid1 md8 ha 2930265424 blocchi, vale a dire
3000591794176/2930265424/2 = 512
Non mdadm
utilizzare poi un blocksize di 512 byte? (/ 2 perché è un mirror a due vie)
E la dimensione del pezzo è un concetto diverso rispetto alla dimensione del blocco?
Cercare di mdadm
spiegare 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)
Dove
3000591794176/5860530848 = 512
Con un valore predefinito mkfs.xfs
sul dispositivo md, segnala:
sectsz=512
bsize=4096
Ho corretto questo con una chiamata di mkfs.xfs -s size=4096 /dev/md8
Modifica: testando un po 'ho notato le seguenti cose:
Sembra che la risincronizzazione iniziale venga eseguita con una dimensione di blocco di 128k (e non 512 byte):
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 velocità visualizzata tramite /proc/mdstat
è coerente per quella dimensione di blocco (per 512bytes ci si aspetterebbe un impatto sulle prestazioni):
[>....................] resync = 3.0% (90510912/2930265424) finish=381.1min speed=124166K/sec
(Ad esempio quando si disabilita la cache di scrittura la velocità visualizzata scende immediatamente a 18m / sec)
Sotto /sys
ci sono in realtà alcuni file più rilevanti oltre a hw_sector_size
:
# cat /sys/block/sdb/queue/physical_block_size
4096
# cat /sys/block/sdb/queue/logical_block_size
512
Ciò significa che l'unità non mente al kernel circa la sua dimensione del settore 4k e il kernel ha un supporto del settore 4k (come l'output di fstab -l
suggerito).
Googling un po 'in giro ha portato ad alcuni rapporti sui dischi WD, che non riportano la dimensione di 4k - fortunatamente questo disco WD da 3 TB non lo fa - forse WD ha riparato il proprio firmware con i dischi attuali.