Блочные устройства могут быть записаны или прочитаны только при их собственном выравнивании блоков, которое для всего, с чем я когда-либо сталкивался, составляет либо 512 байт, либо 4096 байт.Вы можете увидеть размер блока вашего устройства в sysfs:
# cat /sys/block/sdb/queue/logical_block_size
512
Почему?Наборы команд NVMe, SCSI и ATA просто не поддерживают доступ к области, меньшей этой.Аргументы команды WRITE
находятся в целочисленных блоках.
Если приложению необходимо записать область меньшего размера или невыровненную область, то ядро выдает чтение для заполнения пробелов, а затем записываетбольший кусок.Например, скажем, вам нужно было записать 256 байтов в середине 512-байтового блока.Ядро считывает все 512 байт с диска, объединяет ваши данные для записи в правильное место, а затем записывает блок 512 байт.
Один простой способ контролировать чтение и запись в вашей системе - с помощью *Утилита 1009 *, которая входит в пакет sysstat
как минимум в Centos / RHEL.
[root@bb-cluster-4 md]# iostat -xyz 1
...
avg-cpu: %user %nice %system %iowait %steal %idle
32.29 0.00 7.61 0.00 0.00 60.10
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sdd 0.00 0.00 1.00 0.00 4.00 0.00 8.00 0.00 1.00 1.00 0.00 1.00 0.10