NVME-VERIFY(1)

πŸ’… NVME-VERIFY(1) β€” the verify girlies' era ✨

okay so bestie, this is a page from the NVMe Manual and it's literally all about nvme-verify β€” sending an NVMe Verify command and getting results back πŸŽ€


🌸 NAME 🌸

nvme-verify β€” send an NVMe Verify command, and it returns results. that's it, that's the vibe πŸ¦‹


✨ SYNOPSIS ✨

nvme [<global-options>] verify <device>
                        [--namespace-id=<nsid> | -n <nsid>]
                        [--start-block=<slba> | -s <slba>]
                        [--block-count=<nlb> | -c <nlb>] [--limited-retry | -l]
                        [--force-unit-access | -f]
                        [--prinfo=<prinfo> | -p <prinfo>]
                        [--ref-tag=<reftag> | -r <reftag>]
                        [--app-tag-mask=<appmask> | -m <appmask>]
                        [--app-tag=<apptag> | -a <apptag>]
                        [--storage-tag<storage-tag> | -S <storage-tag>]
                        [--storage-tag-check | -C]

like, copy that shape exactly, no cap β€” every bracket is doing its job πŸ’…


πŸ¦‹ DESCRIPTION πŸ¦‹

the Verify command checks that the information you stored is still actually intact, by reading the data and the metadata. it's giving "trust but verify" main character energy. literally the integrity check we all deserve ✨


πŸ”₯ OPTIONS πŸ”₯

  • -n <nsid>, --namespace-id=<nsid> β€” the Namespace ID used in the command. also, the broadcast value 0xffffffff can be given as all or -1. yes bestie, three ways to say the same thing, pick your fighter 🫢
  • -s <slba>, --start-block=<slba> β€” the start block address. where the party begins πŸ’–
  • -c <nlb>, --block-count=<nlb> β€” how many logical blocks you want to Verify. the count, the whole count, nothing but the count 😌
  • -l, --limited-retry β€” sets the limited retry flag πŸŽ€
  • -f, --force-unit-access β€” sets the force-unit access flag. highkey forceful of it, but ok πŸ‘‘
  • -p <prinfo>, --prinfo=<prinfo> β€” the Protection Information field definition. it's a lil bitfield and it's lowkey iconic, so here's the tea:
    • Bit 3 β€” PRACT: Protection Information Action. set it to 1 and PI gets stripped/inserted on read/write when the block format's metadata size is 8. set it to 0 and the metadata is passes β€” yep, passes through, untouched πŸ™ˆ
    • Bits 2:0 β€” PRCHK: Protection Information Check. this is the trio that decides what actually gets checked:
      • Bit 2 β€” set to 1 enables checking the guard tag ⭐
      • Bit 1 β€” set to 1 enables checking the application tag 🌸
      • Bit 0 β€” set to 1 enables checking the reference tag πŸ’œ
  • -r <reftag>, --ref-tag=<reftag> β€” optional reftag, used when you're rolling with protection information πŸ’«
  • -m <appmask>, --app-tag-mask=<appmask> β€” optional application tag mask, when used with protection information πŸŽ€
  • -a <apptag>, --app-tag=<apptag> β€” optional application tag, when used with protection information ✨
  • -S <storage-tag>, --storage-tag=<storage-tag> β€” Variable Sized Expected Logical Block Storage Tag (ELBST). say that five times fast, i dare you 😭
  • -C, --storage-tag-check β€” this flag enables Storage Tag field checking as part of the Verify operation πŸ”

🌈 GLOBAL OPTIONS 🌈

these are defined up at the top-level nvme command, and they're available to this subcommand too β€” so they're basically the group chat everyone's in 🫢

  • --dry-run β€” prints the command it would execute, but doesn't actually execute it. manifesting without the consequences, we love to see it πŸ’…
  • --no-ioctl-probing β€” disables probing for 64-bit IOCTL support πŸ¦‹
  • --no-retries β€” disables the retry logic on transient errors. one shot, no second chances, dramatic much πŸ’€
  • -o <fmt>, --output-format=<fmt> β€” sets the reporting format to normal, tabular, 'json, or binary. only one output format at a time, bestie β€” you can't have all four, that's not how this works 😀
  • --output-format-version=<version> β€” picks the output format version. version 1 uses the original field naming, while version 2 (the default) gives you more consistent and script-friendly field names. any other version gets rejected, periodt πŸ™…β€β™€οΈ
  • --quiet β€” suppresses informational messages. errors are still reported, and --quiet cancels any --verbose for the library log level. it's giving "i'm not listening but i'm still watching" πŸ‘€
  • --set-options=<key=value>[,<key=value>...] β€” sets libnvme library options for this invocation. the supported keys are force-4k, mi-probe-enabled, test-base-dir and test-sysfs-dir πŸ”‘
  • --timeout=<ms> β€” sets the timeout for the command in milliseconds. infinite or -1 waits without a time limit (0xffffffff). no clock, no stress, no cap ⏳
  • -v, --verbose β€” increases the level of detail in the output. you can specify it multiple times to further increase verbosity β€” go off, stack those vs πŸ”₯
also!! all of these can be set as machine-wide defaults in nvme-cli.conf(5). a command-line flag always overrides the file β€” CLI stays the main character πŸ‘‘

πŸŽ€ EXAMPLES πŸŽ€

No examples yet. (literally the manpage said that, i'm not gatekeeping, there are just none 😭 someone should fix this fr fr)


πŸ‘‘ NVME πŸ‘‘

Part of the nvme-user suite πŸ’–


alright bestie, that's the whole page, go verify something and slay πŸ¦‹βœ¨

signed, sealed, delivered by the NVMe crew β€” page dated 10/30/2026 β€” from NVME-VERIFY(1) with love πŸ’œπŸŽ€

πŸ“¦ where this page comes from