zoned#

Usage: zoned <command> [<args>]

Where <command> is one of:

  enum             | Enumerate Zoned Namespaces on the system
  info             | Retrieve device info
  idfy-ctrlr       | Zoned Command Set specific identify-controller
  idfy-ns          | Zoned Command Set specific identify-namespace
  changes          | Retrieve the Changed Zone list
  errors           | Retrieve the Error-Log
  read             | Execute a Read Command
  write            | Execute a Write Command
  append           | Execute an Append Command
  mgmt-open        | Open a Zone
  mgmt-close       | Close a Zone
  mgmt-finish      | Finish a Zone
  mgmt-reset       | Reset a Zone
  mgmt             | Zone Management Send Command with custom action
  report           | Retrieve Zone Information

See 'zoned <command> --help' for the description of [<args>]

Zoned Namespace Utility -- ver: {major: 0, minor: 7, patch: 5}

Enumerate Zoned Devices on the system#

zoned enum --help
Usage: zoned enum [<args>]

Enumerate Zoned Namespaces on the system
  
Where <args> include:

  [ --uri uri ]                 ; System URI e.g. '10.9.8.1:8888'
  [ --flags 0xNUM ]             ; Command flags
  
With <args> for backend:

  [ --subnqn STRING ]           ; Subsystem NQN of the NVMe over Fabrics endpoint e.g. 'nqn.2022-06.io.xnvme:ctrlnode1'
  [ --hostnqn STRING ]          ; The host NQN to use when connecting to NVMe over Fabrics controllers
  [ --be STRING ]               ; xNVMe backend, e.g. 'linux', 'spdk', 'fbsd', 'macos', 'posix', 'windows'
  [ --help ]                    ; Show usage / help

See 'zoned --help' for other commands

Zoned Namespace Utility -- ver: {major: 0, minor: 7, patch: 5}

Enumerate the storage devices usable by the library and the zoned CLI on the system:

zoned enum
xnvme_cli_enumeration:
  - {uri: '/dev/nvme0n2', dtype: 0x2, nsid: 0x2, csi: 0x2, subnqn: 'nqn.2019-08.org.qemu:deadbeef'}
  - {uri: '/dev/ng0n2', dtype: 0x2, nsid: 0x2, csi: 0x2, subnqn: 'nqn.2019-08.org.qemu:deadbeef'}

Retrieve essential device information#

zoned info --help
Usage: zoned info <uri> [<args>]

Retrieve device info
  
Positional arguments:

  uri                           ; Device URI e.g. '/dev/nvme0n1', '0000:01:00.1', '10.9.8.1.8888', '\\.\PhysicalDrive1'
  
With <args> for backend:

  [ --subnqn STRING ]           ; Subsystem NQN of the NVMe over Fabrics endpoint e.g. 'nqn.2022-06.io.xnvme:ctrlnode1'
  [ --hostnqn STRING ]          ; The host NQN to use when connecting to NVMe over Fabrics controllers
  [ --be STRING ]               ; xNVMe backend, e.g. 'linux', 'spdk', 'fbsd', 'macos', 'posix', 'windows'
  [ --dev-nsid 0xNUM ]          ; Namespace Identifier for Device Handle
  [ --admin STRING ]            ; xNVMe admin. command-interface, e.g. 'nvme', 'block'
  [ --mem STRING ]              ; xNVMe buffer/memory manager
  [ --direct NUM ]              ; Bypass layers
  [ --help ]                    ; Show usage / help

See 'zoned --help' for other commands

Zoned Namespace Utility -- ver: {major: 0, minor: 7, patch: 5}

Retrieve device properties and attributes for a specific device identified by e.g. /dev/nvme0n1:

zoned info /dev/nvme0n2
xnvme_dev:
  xnvme_ident:
    uri: '/dev/nvme0n2'
    dtype: 0x2
    nsid: 0x2
    csi: 0x2
    subnqn: 'nqn.2019-08.org.qemu:deadbeef'
  xnvme_be:
    admin: {id: 'nvme'}
    sync: {id: 'nvme'}
    async: {id: 'emu'}
    attr: {name: 'linux'}
  xnvme_opts:
    be: 'linux'
    mem: 'posix'
    dev: 'FIX-ID-VS-MIXIN-NAME'
    admin: 'nvme'
    sync: 'nvme'
    async: 'emu'
  xnvme_geo:
    type: XNVME_GEO_ZONED
    npugrp: 1
    npunit: 1
    nzone: 256
    nsect: 8192
    nbytes: 4096
    nbytes_oob: 0
    tbytes: 8589934592
    mdts_nbytes: 520192
    lba_nbytes: 4096
    lba_extended: 0
    ssw: 12
    pi_type: 0
    pi_loc: 0
    pi_format: 0

Retrieve Device Report#

zoned report --help
Usage: zoned report <uri> [<args>]

Retrieve Zone Information
  
Positional arguments:

  uri                           ; Device URI e.g. '/dev/nvme0n1', '0000:01:00.1', '10.9.8.1.8888', '\\.\PhysicalDrive1'
  
Where <args> include:

  [ --slba 0xNUM ]              ; Start Logical Block Address
  [ --limit NUM ]               ; Restrict amount to 'NUM'
  [ --data-output FILE ]        ; Path to data output-file
  
With <args> for backend:

  [ --subnqn STRING ]           ; Subsystem NQN of the NVMe over Fabrics endpoint e.g. 'nqn.2022-06.io.xnvme:ctrlnode1'
  [ --hostnqn STRING ]          ; The host NQN to use when connecting to NVMe over Fabrics controllers
  [ --be STRING ]               ; xNVMe backend, e.g. 'linux', 'spdk', 'fbsd', 'macos', 'posix', 'windows'
  [ --dev-nsid 0xNUM ]          ; Namespace Identifier for Device Handle
  [ --admin STRING ]            ; xNVMe admin. command-interface, e.g. 'nvme', 'block'
  [ --mem STRING ]              ; xNVMe buffer/memory manager
  [ --direct NUM ]              ; Bypass layers
  [ --sync STRING ]             ; xNVMe sync. command-interface, e.g. 'nvme', 'block'
  [ --help ]                    ; Show usage / help

See 'zoned --help' for other commands

Zoned Namespace Utility -- ver: {major: 0, minor: 7, patch: 5}

Retrieve the entire device report#

Retrieve a complete report of zone information for a specific device identified by e.g. /dev/nvme0n1:

zoned report /dev/nvme0n2
# Zone Information Report for lba: 0x0000000000000000, limit: 256
xnvme_znd_report:
  report_nbytes: 16448
  entries_nbytes: 16384
  zd_nbytes: 64
  zdext_nbytes: 0
  zrent_nbytes: 64
  zslba: 0x0000000000000000
  zelba: 0x00000000001fe000
  nzones: 256
  nentries: 256
  extended: 0
  entries:
    - {zslba: 0x0000000000000000, wp: 0x0000000000000000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000002000, wp: 0x0000000000002000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000004000, wp: 0x0000000000004000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000006000, wp: 0x0000000000006000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000008000, wp: 0x0000000000008000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x000000000000a000, wp: 0x000000000000a000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x000000000000c000, wp: 0x000000000000c000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x000000000000e000, wp: 0x000000000000e000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000010000, wp: 0x0000000000010000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000012000, wp: 0x0000000000012000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000014000, wp: 0x0000000000014000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000016000, wp: 0x0000000000016000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000018000, wp: 0x0000000000018000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x000000000001a000, wp: 0x000000000001a000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x000000000001c000, wp: 0x000000000001c000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x000000000001e000, wp: 0x000000000001e000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000020000, wp: 0x0000000000020000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000022000, wp: 0x0000000000022000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000024000, wp: 0x0000000000024000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000026000, wp: 0x0000000000026000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000028000, wp: 0x0000000000028000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x000000000002a000, wp: 0x000000000002a000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x000000000002c000, wp: 0x000000000002c000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x000000000002e000, wp: 0x000000000002e000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000030000, wp: 0x0000000000030000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000032000, wp: 0x0000000000032000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000034000, wp: 0x0000000000034000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000036000, wp: 0x0000000000036000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000038000, wp: 0x0000000000038000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x000000000003a000, wp: 0x000000000003a000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x000000000003c000, wp: 0x000000000003c000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x000000000003e000, wp: 0x000000000003e000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000040000, wp: 0x0000000000040000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000042000, wp: 0x0000000000042000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000044000, wp: 0x0000000000044000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000046000, wp: 0x0000000000046000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000048000, wp: 0x0000000000048000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x000000000004a000, wp: 0x000000000004a000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x000000000004c000, wp: 0x000000000004c000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x000000000004e000, wp: 0x000000000004e000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000050000, wp: 0x0000000000050000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000052000, wp: 0x0000000000052000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000054000, wp: 0x0000000000054000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000056000, wp: 0x0000000000056000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000058000, wp: 0x0000000000058000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x000000000005a000, wp: 0x000000000005a000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x000000000005c000, wp: 0x000000000005c000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x000000000005e000, wp: 0x000000000005e000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000060000, wp: 0x0000000000060000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000062000, wp: 0x0000000000062000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000064000, wp: 0x0000000000064000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000066000, wp: 0x0000000000066000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000068000, wp: 0x0000000000068000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x000000000006a000, wp: 0x000000000006a000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x000000000006c000, wp: 0x000000000006c000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x000000000006e000, wp: 0x000000000006e000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000070000, wp: 0x0000000000070000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000072000, wp: 0x0000000000072000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000074000, wp: 0x0000000000074000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000076000, wp: 0x0000000000076000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000078000, wp: 0x0000000000078000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x000000000007a000, wp: 0x000000000007a000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x000000000007c000, wp: 0x000000000007c000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x000000000007e000, wp: 0x000000000007e000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000080000, wp: 0x0000000000080000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000082000, wp: 0x0000000000082000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000084000, wp: 0x0000000000084000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000086000, wp: 0x0000000000086000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000088000, wp: 0x0000000000088000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x000000000008a000, wp: 0x000000000008a000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x000000000008c000, wp: 0x000000000008c000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x000000000008e000, wp: 0x000000000008e000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000090000, wp: 0x0000000000090000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000092000, wp: 0x0000000000092000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000094000, wp: 0x0000000000094000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000096000, wp: 0x0000000000096000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000098000, wp: 0x0000000000098000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x000000000009a000, wp: 0x000000000009a000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x000000000009c000, wp: 0x000000000009c000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x000000000009e000, wp: 0x000000000009e000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x00000000000a0000, wp: 0x00000000000a0000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x00000000000a2000, wp: 0x00000000000a2000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x00000000000a4000, wp: 0x00000000000a4000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x00000000000a6000, wp: 0x00000000000a6000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x00000000000a8000, wp: 0x00000000000a8000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x00000000000aa000, wp: 0x00000000000aa000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x00000000000ac000, wp: 0x00000000000ac000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x00000000000ae000, wp: 0x00000000000ae000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x00000000000b0000, wp: 0x00000000000b0000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x00000000000b2000, wp: 0x00000000000b2000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x00000000000b4000, wp: 0x00000000000b4000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x00000000000b6000, wp: 0x00000000000b6000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x00000000000b8000, wp: 0x00000000000b8000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x00000000000ba000, wp: 0x00000000000ba000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x00000000000bc000, wp: 0x00000000000bc000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x00000000000be000, wp: 0x00000000000be000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x00000000000c0000, wp: 0x00000000000c0000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x00000000000c2000, wp: 0x00000000000c2000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x00000000000c4000, wp: 0x00000000000c4000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x00000000000c6000, wp: 0x00000000000c6000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x00000000000c8000, wp: 0x00000000000c8000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x00000000000ca000, wp: 0x00000000000ca000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x00000000000cc000, wp: 0x00000000000cc000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x00000000000ce000, wp: 0x00000000000ce000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x00000000000d0000, wp: 0x00000000000d0000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x00000000000d2000, wp: 0x00000000000d2000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x00000000000d4000, wp: 0x00000000000d4000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x00000000000d6000, wp: 0x00000000000d6000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x00000000000d8000, wp: 0x00000000000d8000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x00000000000da000, wp: 0x00000000000da000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x00000000000dc000, wp: 0x00000000000dc000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x00000000000de000, wp: 0x00000000000de000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x00000000000e0000, wp: 0x00000000000e0000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x00000000000e2000, wp: 0x00000000000e2000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x00000000000e4000, wp: 0x00000000000e4000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x00000000000e6000, wp: 0x00000000000e6000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x00000000000e8000, wp: 0x00000000000e8000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x00000000000ea000, wp: 0x00000000000ea000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x00000000000ec000, wp: 0x00000000000ec000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x00000000000ee000, wp: 0x00000000000ee000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x00000000000f0000, wp: 0x00000000000f0000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x00000000000f2000, wp: 0x00000000000f2000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x00000000000f4000, wp: 0x00000000000f4000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x00000000000f6000, wp: 0x00000000000f6000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x00000000000f8000, wp: 0x00000000000f8000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x00000000000fa000, wp: 0x00000000000fa000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x00000000000fc000, wp: 0x00000000000fc000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x00000000000fe000, wp: 0x00000000000fe000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000100000, wp: 0x0000000000100000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000102000, wp: 0x0000000000102000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000104000, wp: 0x0000000000104000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000106000, wp: 0x0000000000106000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000108000, wp: 0x0000000000108000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x000000000010a000, wp: 0x000000000010a000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x000000000010c000, wp: 0x000000000010c000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x000000000010e000, wp: 0x000000000010e000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000110000, wp: 0x0000000000110000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000112000, wp: 0x0000000000112000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000114000, wp: 0x0000000000114000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000116000, wp: 0x0000000000116000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000118000, wp: 0x0000000000118000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x000000000011a000, wp: 0x000000000011a000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x000000000011c000, wp: 0x000000000011c000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x000000000011e000, wp: 0x000000000011e000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000120000, wp: 0x0000000000120000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000122000, wp: 0x0000000000122000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000124000, wp: 0x0000000000124000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000126000, wp: 0x0000000000126000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000128000, wp: 0x0000000000128000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x000000000012a000, wp: 0x000000000012a000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x000000000012c000, wp: 0x000000000012c000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x000000000012e000, wp: 0x000000000012e000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000130000, wp: 0x0000000000130000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000132000, wp: 0x0000000000132000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000134000, wp: 0x0000000000134000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000136000, wp: 0x0000000000136000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000138000, wp: 0x0000000000138000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x000000000013a000, wp: 0x000000000013a000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x000000000013c000, wp: 0x000000000013c000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x000000000013e000, wp: 0x000000000013e000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000140000, wp: 0x0000000000140000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000142000, wp: 0x0000000000142000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000144000, wp: 0x0000000000144000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000146000, wp: 0x0000000000146000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000148000, wp: 0x0000000000148000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x000000000014a000, wp: 0x000000000014a000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x000000000014c000, wp: 0x000000000014c000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x000000000014e000, wp: 0x000000000014e000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000150000, wp: 0x0000000000150000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000152000, wp: 0x0000000000152000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000154000, wp: 0x0000000000154000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000156000, wp: 0x0000000000156000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000158000, wp: 0x0000000000158000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x000000000015a000, wp: 0x000000000015a000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x000000000015c000, wp: 0x000000000015c000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x000000000015e000, wp: 0x000000000015e000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000160000, wp: 0x0000000000160000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000162000, wp: 0x0000000000162000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000164000, wp: 0x0000000000164000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000166000, wp: 0x0000000000166000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000168000, wp: 0x0000000000168000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x000000000016a000, wp: 0x000000000016a000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x000000000016c000, wp: 0x000000000016c000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x000000000016e000, wp: 0x000000000016e000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000170000, wp: 0x0000000000170000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000172000, wp: 0x0000000000172000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000174000, wp: 0x0000000000174000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000176000, wp: 0x0000000000176000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000178000, wp: 0x0000000000178000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x000000000017a000, wp: 0x000000000017a000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x000000000017c000, wp: 0x000000000017c000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x000000000017e000, wp: 0x000000000017e000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000180000, wp: 0x0000000000180000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000182000, wp: 0x0000000000182000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000184000, wp: 0x0000000000184000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000186000, wp: 0x0000000000186000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000188000, wp: 0x0000000000188000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x000000000018a000, wp: 0x000000000018a000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x000000000018c000, wp: 0x000000000018c000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x000000000018e000, wp: 0x000000000018e000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000190000, wp: 0x0000000000190000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000192000, wp: 0x0000000000192000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000194000, wp: 0x0000000000194000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000196000, wp: 0x0000000000196000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000198000, wp: 0x0000000000198000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x000000000019a000, wp: 0x000000000019a000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x000000000019c000, wp: 0x000000000019c000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x000000000019e000, wp: 0x000000000019e000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x00000000001a0000, wp: 0x00000000001a0000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x00000000001a2000, wp: 0x00000000001a2000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x00000000001a4000, wp: 0x00000000001a4000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x00000000001a6000, wp: 0x00000000001a6000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x00000000001a8000, wp: 0x00000000001a8000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x00000000001aa000, wp: 0x00000000001aa000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x00000000001ac000, wp: 0x00000000001ac000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x00000000001ae000, wp: 0x00000000001ae000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x00000000001b0000, wp: 0x00000000001b0000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x00000000001b2000, wp: 0x00000000001b2000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x00000000001b4000, wp: 0x00000000001b4000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x00000000001b6000, wp: 0x00000000001b6000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x00000000001b8000, wp: 0x00000000001b8000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x00000000001ba000, wp: 0x00000000001ba000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x00000000001bc000, wp: 0x00000000001bc000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x00000000001be000, wp: 0x00000000001be000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x00000000001c0000, wp: 0x00000000001c0000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x00000000001c2000, wp: 0x00000000001c2000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x00000000001c4000, wp: 0x00000000001c4000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x00000000001c6000, wp: 0x00000000001c6000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x00000000001c8000, wp: 0x00000000001c8000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x00000000001ca000, wp: 0x00000000001ca000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x00000000001cc000, wp: 0x00000000001cc000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x00000000001ce000, wp: 0x00000000001ce000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x00000000001d0000, wp: 0x00000000001d0000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x00000000001d2000, wp: 0x00000000001d2000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x00000000001d4000, wp: 0x00000000001d4000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x00000000001d6000, wp: 0x00000000001d6000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x00000000001d8000, wp: 0x00000000001d8000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x00000000001da000, wp: 0x00000000001da000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x00000000001dc000, wp: 0x00000000001dc000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x00000000001de000, wp: 0x00000000001de000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x00000000001e0000, wp: 0x00000000001e0000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x00000000001e2000, wp: 0x00000000001e2000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x00000000001e4000, wp: 0x00000000001e4000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x00000000001e6000, wp: 0x00000000001e6000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x00000000001e8000, wp: 0x00000000001e8000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x00000000001ea000, wp: 0x00000000001ea000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x00000000001ec000, wp: 0x00000000001ec000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x00000000001ee000, wp: 0x00000000001ee000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x00000000001f0000, wp: 0x00000000001f0000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x00000000001f2000, wp: 0x00000000001f2000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x00000000001f4000, wp: 0x00000000001f4000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x00000000001f6000, wp: 0x00000000001f6000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x00000000001f8000, wp: 0x00000000001f8000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x00000000001fa000, wp: 0x00000000001fa000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x00000000001fc000, wp: 0x00000000001fc000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x00000000001fe000, wp: 0x00000000001fe000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}

Retrieve a subset of the device report#

zoned report /dev/nvme0n2 --slba 0x0 --limit 10
# Zone Information Report for lba: 0x0000000000000000, limit: 10
xnvme_znd_report:
  report_nbytes: 704
  entries_nbytes: 640
  zd_nbytes: 64
  zdext_nbytes: 0
  zrent_nbytes: 64
  zslba: 0x0000000000000000
  zelba: 0x0000000000012000
  nzones: 256
  nentries: 10
  extended: 0
  entries:
    - {zslba: 0x0000000000000000, wp: 0x0000000000000000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000002000, wp: 0x0000000000002000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000004000, wp: 0x0000000000004000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000006000, wp: 0x0000000000006000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000008000, wp: 0x0000000000008000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x000000000000a000, wp: 0x000000000000a000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x000000000000c000, wp: 0x000000000000c000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x000000000000e000, wp: 0x000000000000e000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000010000, wp: 0x0000000000010000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}
    - {zslba: 0x0000000000012000, wp: 0x0000000000012000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}

Report Changes#

zoned changes --help
Usage: zoned changes <uri> [<args>]

Retrieve the Changed Zone list
  
Positional arguments:

  uri                           ; Device URI e.g. '/dev/nvme0n1', '0000:01:00.1', '10.9.8.1.8888', '\\.\PhysicalDrive1'
  
Where <args> include:

  [ --data-output FILE ]        ; Path to data output-file
  
With <args> for backend:

  [ --subnqn STRING ]           ; Subsystem NQN of the NVMe over Fabrics endpoint e.g. 'nqn.2022-06.io.xnvme:ctrlnode1'
  [ --hostnqn STRING ]          ; The host NQN to use when connecting to NVMe over Fabrics controllers
  [ --be STRING ]               ; xNVMe backend, e.g. 'linux', 'spdk', 'fbsd', 'macos', 'posix', 'windows'
  [ --dev-nsid 0xNUM ]          ; Namespace Identifier for Device Handle
  [ --admin STRING ]            ; xNVMe admin. command-interface, e.g. 'nvme', 'block'
  [ --mem STRING ]              ; xNVMe buffer/memory manager
  [ --direct NUM ]              ; Bypass layers
  [ --help ]                    ; Show usage / help

See 'zoned --help' for other commands

Zoned Namespace Utility -- ver: {major: 0, minor: 7, patch: 5}

In relation to the above commands, then you can ask the device about which zones has changed information since the last time you retrieve the report. You do this using the changes sub-command:

zoned changes /dev/nvme0n2
# Retrieving the Changed Zone List
# Zoned Changes log page is an optional feature
# This devices does not support it; expect failure

# ERR: 'xnvme_znd_log_changes_from_dev()': {errno: 0, msg: 'Success'}

Report Errors#

zoned errors --help
Usage: zoned errors <uri> [<args>]

Retrieve the Error-Log
  
Positional arguments:

  uri                           ; Device URI e.g. '/dev/nvme0n1', '0000:01:00.1', '10.9.8.1.8888', '\\.\PhysicalDrive1'
  
Where <args> include:

  [ --nsid 0xNUM ]              ; Namespace Identifier for Command Construction
  [ --data-output FILE ]        ; Path to data output-file
  
With <args> for backend:

  [ --subnqn STRING ]           ; Subsystem NQN of the NVMe over Fabrics endpoint e.g. 'nqn.2022-06.io.xnvme:ctrlnode1'
  [ --hostnqn STRING ]          ; The host NQN to use when connecting to NVMe over Fabrics controllers
  [ --be STRING ]               ; xNVMe backend, e.g. 'linux', 'spdk', 'fbsd', 'macos', 'posix', 'windows'
  [ --dev-nsid 0xNUM ]          ; Namespace Identifier for Device Handle
  [ --admin STRING ]            ; xNVMe admin. command-interface, e.g. 'nvme', 'block'
  [ --mem STRING ]              ; xNVMe buffer/memory manager
  [ --direct NUM ]              ; Bypass layers
  [ --help ]                    ; Show usage / help

See 'zoned --help' for other commands

Zoned Namespace Utility -- ver: {major: 0, minor: 7, patch: 5}

Get the errors logged on the given device:

zoned errors /dev/nvme0n2
# Error-Information-Log has 0 valid entries
xnvme_spec_log_erri:
  - {ecnt: 0, sqid: 0, cid: 0, status: 0, eloc: 0, lba: 0, nsid: 0, ven_si: 0, trtype: 0, cmd_si: 0, trtype_si: 0}

Zone Management#

zoned mgmt --help
Usage: zoned mgmt <uri> [<args>]

Zone Management Send Command with custom action
  
Positional arguments:

  uri                           ; Device URI e.g. '/dev/nvme0n1', '0000:01:00.1', '10.9.8.1.8888', '\\.\PhysicalDrive1'
  
Where <args> include:

  --slba 0xNUM                  ; Start Logical Block Address
  --zsa 0xNUM                   ; Zone Send Action: Close=0x1, Finish=0x2, Open=0x3, Reset=0x4, Offline=0x5, Zone Descriptor Extension=0x10
  [ --nsid 0xNUM ]              ; Namespace Identifier for Command Construction
  [ --all ]                     ; Select / Affect all
  
With <args> for backend:

  [ --subnqn STRING ]           ; Subsystem NQN of the NVMe over Fabrics endpoint e.g. 'nqn.2022-06.io.xnvme:ctrlnode1'
  [ --hostnqn STRING ]          ; The host NQN to use when connecting to NVMe over Fabrics controllers
  [ --be STRING ]               ; xNVMe backend, e.g. 'linux', 'spdk', 'fbsd', 'macos', 'posix', 'windows'
  [ --dev-nsid 0xNUM ]          ; Namespace Identifier for Device Handle
  [ --admin STRING ]            ; xNVMe admin. command-interface, e.g. 'nvme', 'block'
  [ --mem STRING ]              ; xNVMe buffer/memory manager
  [ --direct NUM ]              ; Bypass layers
  [ --sync STRING ]             ; xNVMe sync. command-interface, e.g. 'nvme', 'block'
  [ --help ]                    ; Show usage / help

See 'zoned --help' for other commands

Zoned Namespace Utility -- ver: {major: 0, minor: 7, patch: 5}

Explicitly controlling the Zone Management action:

zoned mgmt-reset /dev/nvme0n2 --slba 0x0
# MGMT: zslba: 0x0000000000000000, zsa: 0x4, str: ZND_CMD_MGMT_SEND_RESET

Reading#

zoned read /dev/nvme0n2 --slba 0x0 --nlb 0
# Reading nsid: 0x2, slba: 0x0000000000000000, nlb: 0
# Alloc/clear dbuf, dbuf_nbytes: 4096
# Sending the command...

Writing#

zoned --help
Usage: zoned <command> [<args>]

Where <command> is one of:

  enum             | Enumerate Zoned Namespaces on the system
  info             | Retrieve device info
  idfy-ctrlr       | Zoned Command Set specific identify-controller
  idfy-ns          | Zoned Command Set specific identify-namespace
  changes          | Retrieve the Changed Zone list
  errors           | Retrieve the Error-Log
  read             | Execute a Read Command
  write            | Execute a Write Command
  append           | Execute an Append Command
  mgmt-open        | Open a Zone
  mgmt-close       | Close a Zone
  mgmt-finish      | Finish a Zone
  mgmt-reset       | Reset a Zone
  mgmt             | Zone Management Send Command with custom action
  report           | Retrieve Zone Information

See 'zoned <command> --help' for the description of [<args>]

Zoned Namespace Utility -- ver: {major: 0, minor: 7, patch: 5}

Note, for a write to success it has to write at the write-pointer of an open or empty zone. To use that, we reset the zone before writing.

zoned mgmt-reset /dev/nvme0n2 --slba 0x0
zoned write /dev/nvme0n2 --slba 0x0 --nlb 0
# MGMT: zslba: 0x0000000000000000, zsa: 0x4, str: ZND_CMD_MGMT_SEND_RESET


# Writing nsid: 0x2, slba: 0x0000000000000000, nlb: 0
# Alloc/fill dbuf, dbuf_nbytes: 4096
# Sending the command...

Writing - with append#

zoned append --help
Usage: zoned append <uri> [<args>]

Execute an Append Command
  
Positional arguments:

  uri                           ; Device URI e.g. '/dev/nvme0n1', '0000:01:00.1', '10.9.8.1.8888', '\\.\PhysicalDrive1'
  
Where <args> include:

  --slba 0xNUM                  ; Start Logical Block Address
  --nlb NUM                     ; Number of LBAs (NOTE: zero-based value)
  [ --nsid 0xNUM ]              ; Namespace Identifier for Command Construction
  [ --data-input FILE ]         ; Path to data input-file
  [ --meta-input FILE ]         ; Path to meta input-file
  
With <args> for backend:

  [ --subnqn STRING ]           ; Subsystem NQN of the NVMe over Fabrics endpoint e.g. 'nqn.2022-06.io.xnvme:ctrlnode1'
  [ --hostnqn STRING ]          ; The host NQN to use when connecting to NVMe over Fabrics controllers
  [ --be STRING ]               ; xNVMe backend, e.g. 'linux', 'spdk', 'fbsd', 'macos', 'posix', 'windows'
  [ --dev-nsid 0xNUM ]          ; Namespace Identifier for Device Handle
  [ --admin STRING ]            ; xNVMe admin. command-interface, e.g. 'nvme', 'block'
  [ --mem STRING ]              ; xNVMe buffer/memory manager
  [ --direct NUM ]              ; Bypass layers
  [ --sync STRING ]             ; xNVMe sync. command-interface, e.g. 'nvme', 'block'
  [ --help ]                    ; Show usage / help

See 'zoned --help' for other commands

Zoned Namespace Utility -- ver: {major: 0, minor: 7, patch: 5}

When writing with append then we no longer need to respect the write-pointer. However, we still need to ensure that the Zone is not read-only, offline, or full.

Write using append:

zoned mgmt-reset /dev/nvme0n2 --slba 0x0
zoned report /dev/nvme0n2 --slba 0x0 --limit 1
zoned append /dev/nvme0n2 --slba 0x0 --nlb 0
zoned append /dev/nvme0n2 --slba 0x0 --nlb 0
zoned append /dev/nvme0n2 --slba 0x0 --nlb 0
zoned report /dev/nvme0n2 --slba 0x0 --limit 1
# MGMT: zslba: 0x0000000000000000, zsa: 0x4, str: ZND_CMD_MGMT_SEND_RESET


# Zone Information Report for lba: 0x0000000000000000, limit: 1
xnvme_znd_report:
  report_nbytes: 128
  entries_nbytes: 64
  zd_nbytes: 64
  zdext_nbytes: 0
  zrent_nbytes: 64
  zslba: 0x0000000000000000
  zelba: 0x0000000000000000
  nzones: 256
  nentries: 1
  extended: 0
  entries:
    - {zslba: 0x0000000000000000, wp: 0x0000000000000000, zcap: 7168, zt: 0x2, zs:   ZND_STATE_EMPTY, za: '0b00000000'}


# Zone Append nlb: 0 to zslba: 0x0000000000000000
# Allocating dbuf
# Appended to slba: 0x0000000000000000


# Zone Append nlb: 0 to zslba: 0x0000000000000000
# Allocating dbuf
# Appended to slba: 0x0000000000000001


# Zone Append nlb: 0 to zslba: 0x0000000000000000
# Allocating dbuf
# Appended to slba: 0x0000000000000002


# Zone Information Report for lba: 0x0000000000000000, limit: 1
xnvme_znd_report:
  report_nbytes: 128
  entries_nbytes: 64
  zd_nbytes: 64
  zdext_nbytes: 0
  zrent_nbytes: 64
  zslba: 0x0000000000000000
  zelba: 0x0000000000000000
  nzones: 256
  nentries: 1
  extended: 0
  entries:
    - {zslba: 0x0000000000000000, wp: 0x0000000000000003, zcap: 7168, zt: 0x2, zs:   ZND_STATE_IOPEN, za: '0b00000000'}