{
  "slug": "logical-block-address",
  "term": "Logical block address",
  "aliases": [
    "LBA"
  ],
  "definition": "A logical block address (LBA) is the numeric address used to select a logical block within a storage device or namespace.",
  "note": "An LBA is a logical position, not physical-media placement. Retain the device or namespace identity. [snia-lba]\n\nFor linear zero-based data addressing, byte offset = LBA times data bytes per block. LBA 8 starts at byte 4096 with 512-byte units or 32768 with 4096-byte units. Eight blocks from LBA 8 span LBAs 8-15. These are calculations, not observed media operations.\n\nNVM Command Set 1.0e Read NLB=7 requests eight blocks, whereas NSZE=8 counts addresses 0-7. That namespace cannot contain the preceding request. Metadata is separate from block data size. [nvme-nvm-1-0e]\n\nFor integer N >= 0 addressable blocks, integer start S >= 0 and decoded integer count C > 0, require S < N then C <= N - S: S=7, C=1 fits N=8; C=2 or S=8 does not. This checks only address-space containment, not command success. NSZE bounds addresses; NCAP bounds simultaneous allocation. [nvme-nvm-1-0e]\n\nIn NVM Command Set 1.0e, NSFEAT.THINP=0 requires NCAP=NSZE and permits constant NUSE=NCAP; THINP=1 requires allocated-block tracking. With ANA support, NUSE and NVMCAP are zero in ANA Inaccessible or ANA Persistent Loss for the controller-namespace relationship. Therefore zero proves neither an empty namespace nor erased data; NUSE is not filesystem used space. Record controller/path state. NVMCAP is in bytes, not blocks, and need not equal NSZE times block data size. [nvme-nvm-1-0e]\n\nLinux 6.17 block-statistics read/write/discard sector counters use 512-byte units, regardless of logical-block size. Do not multiply them by a discovered 4096-byte sector size. [linux-stat-units]",
  "status": "shipping",
  "advantages": [],
  "limitations": [
    {
      "text": "An address alone does not establish physical placement, allocation state, atomicity or durable completion.",
      "citationIds": [
        "snia-lba",
        "nvme-nvm-1-0e"
      ]
    }
  ],
  "related": [
    "logical-sector",
    "scsi-read-capacity",
    "namespace-nvme",
    "active-lba-range",
    "nvme-extended-lba"
  ],
  "supersedes": [],
  "supersededBy": [],
  "firstSeen": null,
  "lastSeen": null,
  "updated": "2026-11-05",
  "citations": [
    {
      "id": "nvme-nvm-1-0e",
      "title": "NVM Express NVM Command Set Specification 1.0e (2024), definitions 1.4.3.2-6, section 2.1.1 and Figures 47-48, 97",
      "url": "https://nvmexpress.org/wp-content/uploads/NVM-Express-NVM-Command-Set-Specification-1.0e-2024.07.29-Ratified.pdf",
      "accessed": "2026-11-05"
    },
    {
      "id": "snia-lba",
      "title": "SNIA Dictionary: logical block and logical block address, edition generated 4 November 2026",
      "url": "https://www.snia.org/sites/default/files/snia-dictionary-pdf/SNIADictionary.pdf",
      "accessed": "2026-11-04"
    },
    {
      "id": "linux-stat-units",
      "title": "Linux 6.17: block layer statistics, read/write/discard sector units",
      "url": "https://docs.kernel.org/6.17/block/stat.html",
      "accessed": "2026-11-04"
    }
  ],
  "provenance": [
    "Primary-source review; illustrative integer arithmetic only. No device commands, benchmark or new field observations. NVMe revision is pinned; neither NLB encoding nor NSZE meaning is generalized to every storage field."
  ]
}
