блочные устройства ведут себя очень похоже на файлы - такие инструменты, как dd, могут работать с ними без какой-либо специальной обработки.fstat, тем не менее, возвращает информацию об узле специального файла, а не о блокдеве, на который он ссылается.Вы, вероятно, хотите использовать ioctl BLKGETSIZE64 для чтения размера.
нет особой причины использовать раздел поверх необработанного устройства, хотя blockdev - это blockdev.O_DIRECT также хорош, если предположить, что ваша рабочая нагрузка не будет генерировать повторный доступ.не путайте его с реальным протоколом для обеспечения постоянства и атомарности вашей файловой системы (fsync, барьеры и т. д.).