Architecture

What is Block Storage?

Block storage is a type of data storage where data is managed as fixed-size blocks with no inherent filesystem structure, exposing raw storage capacity that hosts can format with any filesystem — the foundation for databases, VMs, and container volumes.

Technical Overview

Block storage presents a storage device to a host as a sequence of fixed-size blocks — typically 512 bytes or 4,096 bytes (4K) — addressable by logical block address (LBA). The host kernel's block layer treats the device as a raw volume and is free to place any filesystem (ext4, XFS, NTFS, ZFS, Btrfs) on top of it, or to use the raw device directly as a database data file or VM disk image. There is no file, directory, or metadata concept at the block layer; those abstractions exist entirely in the filesystem or application layer above.

The block abstraction is fundamental to how operating systems manage storage. Linux's block device layer (the bio/request layer in the kernel) handles I/O scheduling, merge/sort optimization, and plugging/unplugging queues. NVMe devices bypass much of this overhead through the blk-mq (multi-queue block layer) introduced in Linux 3.13, which maps I/O queues directly to hardware NVMe queues with minimal kernel overhead. Block storage over NVMe/TCP leverages this same blk-mq path, ensuring that the high queue depth and parallelism of NVMe is preserved through the network transport layer.

Block storage excels for workloads with predictable, high-frequency I/O patterns: relational databases (PostgreSQL, MySQL, Oracle), NoSQL stores (Cassandra, MongoDB), message brokers (Kafka), and virtual machine disk images. These workloads require low latency and high IOPS for small random reads and writes, characteristics that block storage — especially NVMe block storage — is uniquely suited to provide. By contrast, NFS and object storage add metadata and filesystem overhead that increases latency and reduces IOPS for random workloads.

How It Relates to NVMe/TCP

NVMe/TCP is a block storage protocol — it exposes NVMe namespaces as raw block devices over the network. Every NVMe/TCP namespace that an initiator connects to appears as a /dev/nvmeXnY block device in Linux, identical in interface to a locally attached NVMe SSD. This transparency is a key advantage of block storage protocols: applications and filesystems require no modification to run on NVMe/TCP-backed storage versus local storage. simplyblock.io delivers block storage built on NVMe/TCP, enabling Kubernetes workloads to consume high-performance NVMe volumes through a standard CSI driver.

Key Characteristics

  • Granularity: Fixed block sizes (512B logical, 4K physical standard)
  • Access model: LBA (Logical Block Addressing) — random read/write by block number
  • Filesystem: None at block layer — host applies filesystem of choice
  • Best for: Databases, VM disks, Kubernetes PVCs (RWO)
  • Linux interface: /dev/sdX (SCSI), /dev/nvmeXnY (NVMe)
  • Protocols: iSCSI, Fibre Channel, NVMe/TCP, NVMe/RDMA

Block Storage vs File Storage vs Object Storage

Type Abstraction Best for Concurrent writers
Block Raw blocks (LBA) DBs, VMs, high IOPS No (RWO)
File (NFS) Files + directories Shared datasets Yes (RWX)
Object (S3) Immutable objects Backups, media, logs Yes (via API)

What Is SDS? The Future of Scalable Data Infrastructure