linuxblock-device

Block device information without mounting in Linux


I am trying to get some information (specifically block size) of block device in linux, in C++. Is it possible to get block size of a device without mounting it and possibly without looking into dynamic files (like the ones in /sys), but with a system call only.

I was trying with stat, but it returns data about /dev filesystem if I ask about /dev/sdb2.

If it's impossible with system call, where should i look in dynamic files (haven't been able to locate it either.)


Solution

  • You want to use ioctl, in particular BLKSSZGET.

    Quoting linux/fs.h:

    #define BLKSSZGET  _IO(0x12,104)/* get block device sector size */
    

    Untested example:

    #include <sys/ioctl.h>
    #include <linux/fs.h>
    
    int fd = open("/dev/sda");
    size_t blockSize;
    int rc = ioctl(fd, BLKSSZGET, &blockSize);